zoukankan      html  css  js  c++  java
  • FZOJ2115+月赛+多项式

    多项式积分。

    注意化简和符号即可。

    降幂!!!

    View Code
      1 /*
      2 多项式积分
      3 */
      4 #include<stdio.h>
      5 #include<string.h>
      6 #include<stdlib.h>
      7 #include<algorithm>
      8 #include<iostream>
      9 #include<queue>
     10 #include<vector>
     11 #include<map>
     12 #include<math.h>
     13 typedef long long ll;
     14 //typedef __int64 int64;
     15 const int maxn = 10;
     16 const int maxm = 1005;
     17 const int inf = 0x7FFFFFFF;
     18 const double pi = acos(-1.0);
     19 const double eps = 1e-8;
     20 using namespace std;
     21 
     22 struct node{
     23     int x,y,num;
     24     double t;
     25 }a[ maxn ],b[ maxn ];
     26 
     27 int gcd( int a,int b ){
     28     int r;
     29     while( b!=0 ){
     30         r = a%b;
     31         a = b;
     32         b= r ;
     33     }
     34     return a;
     35 }
     36 
     37 int cmp( node a,node b ){
     38     return a.t>b.t;
     39 }
     40 
     41 int main(){
     42     int ca;
     43     scanf("%d",&ca);
     44     while( ca-- ){
     45         int n;
     46         scanf("%d",&n);
     47         for( int i=1;i<=n;i++ ){
     48             scanf("%d",&a[ i ].x);
     49             a[ i ].y = 1;
     50             a[ i ].num = i;
     51         }
     52         for( int j=1;j<=n;j++ ){
     53             scanf("%d",&b[ j ].x);
     54             b[ j ].y = 1;
     55             b[ j ].num = j;
     56         }
     57         for( int i=1;i<=n;i++ ){
     58             a[ i ].x = a[ i ].x*b[ i ].y;
     59             a[ i ].y = a[ i ].y*( b[ i ].x+b[ i ].y );
     60             b[ i ].x = b[ i ].x+b[ i ].y;
     61             
     62             int tgcd = gcd( abs(a[i].x),abs(a[i].y) );
     63             a[ i ].x /= tgcd,a[ i ].y /= tgcd;
     64             tgcd = gcd( abs(b[i].x),abs(b[i].y) );
     65             b[ i ].x /= tgcd,b[ i ].y /= tgcd;
     66             
     67             b[ i ].t = 1.0*b[ i ].x/(b[ i ].y*1.0);
     68             //printf("%d/%d ",a[i].x,a[i].y);
     69             //printf("%d/%d ",b[i].x,b[i].y);
     70         }
     71         //printf("gcd(12,8)=%d\n",gcd(12,8));
     72         int flag = -1;
     73         sort( b+1,b+1+n,cmp );
     74         for( int j=1;j<=n;j++ ){
     75             int i = b[ j ].num;//注意这里的映射关系。降幂输出!!
     76             if( a[ i ].x*a[ i ].y!=0 && flag==-1 ){
     77             
     78                 if( a[ i ].x*a[ i ].y>0 ) ;
     79                 else printf("-");
     80                 
     81                 flag++;
     82                 
     83                 if( a[ i ].x==a[ i ].y||a[ i ].x==-a[ i ].y ) ;
     84                 else if( abs(a[i].x)%abs(a[i].y)==0 ) printf("%d",abs(a[ i ].x)/abs(a[ i ].y));
     85                 else printf("%d/%d",abs(a[i].x),abs(a[i].y));//首项系数
     86                 
     87                 if( b[ j ].x*b[ j ].y==0 ) continue;
     88                 if( b[ j ].x==b[ j ].y ) printf("x");
     89                 else if( b[ j ].x==-b[ j ].y ) printf("x^-1");
     90                 else if( abs(b[ j ].x)%abs(b[ j ].y)==0 ) printf("x^%d",b[ j ].x/b[ j ].y);
     91                 else {
     92                     if( b[ j ].x*b[ j ].y<0 ) printf("-");
     93                     printf("x^%d/%d",abs(b[ j ].x),abs(b[ j ].y));        
     94                 }//首项指数
     95             } 
     96             else if( a[ i ].x*a[ i ].y!=0 && flag!=-1 ){
     97                 
     98                 if( a[i].x*a[i].y>0 ) printf("+");
     99                 else printf("-");//系数符号
    100                 
    101                 if( a[ i ].x==a[ i ].y||a[ i ].x==-a[ i ].y ) ;
    102                 else if( abs(a[i].x)%abs(a[i].y)==0 ) printf("%d",abs(a[ i ].x)/abs(a[ i ].y));
    103                 else printf("%d/%d",abs(a[i].x),abs(a[i].y));//系数
    104                 
    105                 if( b[ j ].x*b[ j ].y==0 ) ;
    106                 if( b[ j ].x==b[ j ].y ) printf("x");
    107                 else if( b[ j ].x==-b[ j ].y ) printf("x^-1");
    108                 else if( abs(b[ j ].x)%abs(b[ j ].y)==0 ) printf("x^%d",b[ j ].x/b[ j ].y);
    109                 else {
    110                     if( b[ j ].x*b[ j ].y<0 ) printf("-");
    111                     printf("x^%d/%d",abs(b[ j ].x),abs(b[ j ].y));        
    112                 }//指数
    113             }
    114         }
    115         printf("\n");
    116     }
    117     return 0;
    118 }
    keep moving...
  • 相关阅读:
    linux编程之main()函数启动过程【转】
    dlmalloc(一)【转】
    Linux进程调度原理【转】
    Linux内存管理原理【转】
    malloc原理和内存碎片【转】
    Linux MTD系统剖析【转】
    linux驱动开发:用户空间操作LCD显示简单的图片【转】
    LCD驱动分析【转】
    LCD常用接口原理【转】
    LCD之mipi DSI接口驱动调试流程【转】
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3012499.html
Copyright © 2011-2022 走看看