POJ2527+多项式除法

模拟一遍即可。

注意一些特殊情况,见代码。

  1 #include<stdio.h>

  2 #include<stdlib.h>

  3 #include<math.h>

  4 #include<algorithm>

  5 #include<string.h>

  6 using namespace std;

  7 

  8 const int maxn = 10005;

  9 

 10 struct Ploy{

 11     int cnt;//项的数目

 12     int coe[ maxn ];//各项系数

 13     int exp[ maxn ];//各项指数

 14 }a;

 15 struct Ploy2{

 16     int coe1,coe2;

 17     int exp1,exp2;

 18 }b;

 19 struct Ploy3{

 20     int coe,exp;

 21 }tmp;

 22 

 23 bool Judge( int aim ){

 24     //bool f = false;

 25     for( int i=a.cnt-1;i>=0;i-- ){

 26         if( a.coe[i]!=0&&a.exp[i]>=aim ){

 27             //f = true;

 28             return true ;

 29         }

 30     }

 31     return false;

 32 }

 33 

 34 void solve( int n,int k ){

 35     //ans.cnt = 0;

 36     while( 1 ){

 37         //if( Judge(k)==false ) break;

 38         int i;

 39         for( i=a.cnt-1;i>=0;i-- ){

 40             if( a.coe[i]!=0 ){

 41                 tmp.coe = a.coe[i];

 42                 tmp.exp = a.exp[i];

 43                 break;

 44             }

 45         }

 46         if( tmp.exp<k ) break;

 47         int delta_exp = tmp.exp-k;

 48         int delta_coe = tmp.coe;//

 49         b.exp1 = tmp.exp,b.coe1 = tmp.coe;

 50         b.exp2 = delta_exp,b.coe2 = delta_coe;

 51         //bool f1 = false,f2 = false;

 52         for( int i=0;i<a.cnt;i++ ){

 53             if( a.exp[i]==b.exp1 ){

 54                 a.coe[i] -= b.coe1;

 55                 //f1 = true;

 56             }

 57             if( a.exp[i]==b.exp2 ){

 58                 a.coe[i] -= b.coe2;

 59                 //f2 = true;

 60             }

 61         }

 62     }

 63 }

 64 

 65 int main(){

 66     //freopen("in.txt","r",stdin);

 67     //freopen("out.txt","w",stdout);

 68     int n,k;

 69     while( scanf("%d%d",&n,&k)==2 ){

 70         if( n==k&&k==-1 ) break;

 71         a.cnt = 0;

 72         for( int i=0;i<=n;i++ ){

 73             a.cnt ++;

 74             scanf("%d",&a.coe[i]);

 75             a.exp[i] = i;

 76         }

 77         if( k==0 ){

 78             puts("0");

 79             continue;

 80         }

 81         //printf("input\n");

 82         bool f = false;

 83         for( int i=0;i<a.cnt;i++ ){

 84             if( a.coe[i]!=0 ){

 85                 f = true;

 86                 break;

 87             }

 88         }

 89         if( f==false ) {

 90             puts("0");

 91             continue;

 92         }//多项式全为0

 93         if( k>n ){

 94             for( int i=0;i<a.cnt;i++ ){

 95                 if( i==0 ) printf("%d",a.coe[i]);

 96                 else printf(" %d",a.coe[i]);

 97             }

 98             printf("\n");

 99             continue;

100         }//商为0

101         //printf("solve\n");

102         solve( n,k );

103         f = false;

104         for( int i=0;i<a.cnt;i++ ){

105             if( a.coe[i]!=0 ){

106                 f = true;

107                 break;

108             }

109         }

110         if( f==false ) {

111             puts("0");

112             continue;

113         }//刚好整除

114         int pos = a.cnt-1;

115         for( int i=a.cnt-1;i>=0;i-- ){

116             if( a.coe[i]!=0 ){

117                 pos = i;

118                 break;

119             }

120         }

121         for( int i=0;i<=pos;i++ ){

122             if( i==0 ) printf("%d",a.coe[i]);

123             else {

124                 printf(" %d",a.coe[i]);

125             }

126         }

127         printf("\n");

128     }

129     return 0;

130 }
View Code

 

你可能感兴趣的:(poj)