zoukankan      html  css  js  c++  java
  • pipioj 1295: 一元多项式乘法

    http://www.pipioj.online/problem.php?id=1295

      1 #define bug(x) cout<<#x<<" is "<<x<<endl
      2 #define IO std::ios::sync_with_stdio(0)
      3 #include<bits/stdc++.h>
      4 using namespace std;
      5 #define ll long long
      6 const int N=3e5+10;
      7 typedef struct LinkNode{
      8     int co;
      9     int ex;
     10     LinkNode *next;
     11 }LinkNode,*LinkList;
     12 void attach(int co,int ex,LinkNode *&r){
     13     LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
     14     p->co=co;
     15     p->ex=ex;
     16     p->next=NULL;
     17     r->next=p;
     18     r=p;
     19 }
     20 LinkList mutiply(LinkList L1,LinkList L2){
     21     LinkNode *front=(LinkNode *)malloc(sizeof(LinkNode));
     22     LinkNode *rear=front;
     23     front->next=NULL;
     24     LinkNode *r1=L1->next;
     25     LinkNode *r2=L2->next;
     26     while(r1){
     27         rear=front;
     28         while(r2){
     29             int co=r1->co*r2->co;
     30             int ex=r1->ex+r2->ex;
     31             while(rear->next&&ex>rear->next->ex){
     32                 rear=rear->next;
     33             }
     34             if(rear->next&&ex==rear->next->ex){
     35                 if(co+rear->co==0){
     36                     LinkNode *p=rear->next;
     37                     rear->next=p->next;
     38                     free(p);
     39                 }
     40                 else{
     41                     rear->next->co+=co;
     42                 }
     43             }
     44             else{
     45                 if(co!=0){
     46                     LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
     47                     p->co=co;
     48                     p->ex=ex;
     49                     p->next=rear->next;
     50                     rear->next=p;
     51                     rear=rear->next;
     52                 }
     53             }
     54             r2=r2->next;
     55         }
     56         r1=r1->next;
     57         r2=L2->next;
     58     }
     59     return front;
     60 }
     61 struct node{
     62     int x,y;
     63 }a[N],b[N];
     64 bool cmp(node p,node q){
     65     return p.y<q.y;
     66 }
     67 int work(node p[],int n1){
     68     sort(p+1,p+1+n1,cmp);
     69     int g1=0,n2=0;
     70     for(int i=1;i<=n1;i++){
     71         if(i==n1){
     72             p[++n2].y=p[i].y;
     73             p[n2].x=g1+p[i].x;
     74             break;
     75         }
     76         if(p[i+1].y==p[i].y){
     77             g1+=p[i].x;
     78         }
     79         else{
     80             p[++n2].y=p[i].y;
     81             p[n2].x=g1+p[i].x;
     82             g1=0;
     83         }
     84     }
     85     return n2;
     86 }
     87 void print(LinkNode *p){
     88     if(p->next)print(p->next);
     89     cout<<p->co<<" "<<p->ex<<" ";
     90 }
     91 int n,m;
     92 int main(){
     93     IO;
     94     LinkList L1,L2;
     95     L1=(LinkList)malloc(sizeof(LinkNode));
     96     L2=(LinkList)malloc(sizeof(LinkNode));
     97     L1->next=NULL;
     98     L2->next=NULL;
     99     LinkNode *r1=L1,*r2=L2;
    100     cin>>n;
    101     for(int i=1;i<=n;i++){
    102         cin>>a[i].x>>a[i].y;
    103     }
    104     int n1=0,n2=0;
    105     n1=work(a,n);
    106     for(int i=1;i<=n1;i++){
    107         attach(a[i].x,a[i].y,r1);
    108     }
    109     cin>>m;
    110     for(int i=1;i<=m;i++){
    111         cin>>b[i].x>>b[i].y;
    112     }
    113     n2=work(b,m);
    114     for(int i=1;i<=n2;i++){
    115         attach(b[i].x,b[i].y,r2);
    116     }
    117     LinkList L3=mutiply(L1,L2);
    118     L3=L3->next;
    119     if(!L3)cout<<"0 0";
    120     else print(L3);
    121 }
    122 /*
    123 3
    124 1 3 2 2 4 3
    125 3
    126 1 7 2 6 3 5
    127 */

     更新:

      1 #define bug(x) cout<<#x<<" is "<<x<<endl
      2 #define IO std::ios::sync_with_stdio(0)
      3 #include<bits/stdc++.h>
      4 using namespace std;
      5 #define ll long long
      6 const int N=3e5+10;
      7 typedef struct LinkNode{
      8     int co;
      9     int ex;
     10     LinkNode *next;
     11 }LinkNode,*LinkList;
     12 void attach(int co,int ex,LinkNode *&r){
     13     LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
     14     p->co=co;
     15     p->ex=ex;
     16     p->next=NULL;
     17     r->next=p;
     18     r=p;
     19 }
     20 LinkList mutiply(LinkList L1,LinkList L2){
     21     LinkNode *front=(LinkNode *)malloc(sizeof(LinkNode));
     22     LinkNode *rear=front;
     23     front->next=NULL;
     24     LinkNode *r1=L1->next;
     25     LinkNode *r2=L2->next;
     26     while(r1){
     27         while(r2){
     28             int co=r1->co*r2->co;
     29             int ex=r1->ex+r2->ex;
     30             attach(co,ex,rear);
     31             r2=r2->next;
     32         }
     33         r1=r1->next;
     34         r2=L2->next;
     35     }
     36     return front;
     37 }
     38 struct node{
     39     int x,y;
     40 }a[N],b[N],c[N];
     41 bool cmp(node p,node q){
     42     return p.y<q.y;
     43 }
     44 int work(node p[],int n1){
     45     sort(p+1,p+1+n1,cmp);
     46     int g1=0,n2=0;
     47     for(int i=1;i<=n1;i++){
     48         if(i==n1){
     49             p[++n2].y=p[i].y;
     50             p[n2].x=g1+p[i].x;
     51             break;
     52         }
     53         if(p[i+1].y==p[i].y){
     54             g1+=p[i].x;
     55         }
     56         else{
     57             p[++n2].y=p[i].y;
     58             p[n2].x=g1+p[i].x;
     59             g1=0;
     60         }
     61     }
     62     return n2;
     63 }
     64 int n,m;
     65 int main(){
     66     IO;
     67     LinkList L1,L2;
     68     L1=(LinkList)malloc(sizeof(LinkNode));
     69     L2=(LinkList)malloc(sizeof(LinkNode));
     70     L1->next=NULL;
     71     L2->next=NULL;
     72     LinkNode *r1=L1,*r2=L2;
     73     cin>>n;
     74     for(int i=1;i<=n;i++){
     75         cin>>a[i].x>>a[i].y;
     76     }
     77     int n1=0,n2=0,n3=0,n4=0,f=0;
     78     n1=work(a,n);
     79     for(int i=1;i<=n1;i++){
     80         attach(a[i].x,a[i].y,r1);
     81     }
     82     cin>>m;
     83     for(int i=1;i<=m;i++){
     84         cin>>b[i].x>>b[i].y;
     85     }
     86     n2=work(b,m);
     87     for(int i=1;i<=n2;i++){
     88         attach(b[i].x,b[i].y,r2);
     89     }
     90     LinkList L3=mutiply(L1,L2);
     91     L3=L3->next;
     92     while(L3){
     93         c[++n3].x=L3->co;
     94         c[n3].y=L3->ex;
     95         L3=L3->next;
     96     }
     97     n4=work(c,n3);
     98     for(int i=n4;i>1;i--){
     99         if(c[i].x==0)continue;
    100         f=1;
    101         cout<<c[i].x<<" "<<c[i].y<<" ";
    102     }
    103     if(c[1].x!=0)cout<<c[1].x<<" "<<c[1].y,f=1;
    104     if(!f)cout<<"0 0";
    105 }
    106 /*
    107 3
    108 1 3 2 2 4 3
    109 3
    110 1 7 2 6 3 5
    111 
    112 2
    113 3 2
    114 3 2
    115 2
    116 0 2
    117 0 1
    118 */
  • 相关阅读:
    ant-pro兄弟组件传参dva数据应用
    ant-design-pro 的EditableProTable表格验证调用
    使用ant-design-pro 的EditableProTable赋值报错
    EditableProTable使用+自定义封装
    由浅入深CAS
    Spring Cloud之Feign 转发请求头(header参数)
    线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式
    接口的幂等性
    Feign 调用丢失Header的解决方案
    springboot测试类测试时注入的对象为null
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/13770076.html
Copyright © 2011-2022 走看看