zoukankan      html  css  js  c++  java
  • 【HDOJ6646】A + B = C(模拟)

    题意

     1<=a,b,c<=1e100000

    思路:

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 typedef unsigned int uint;
      5 typedef unsigned long long ull;
      6 typedef pair<int,int> PII;
      7 typedef pair<ll,ll> Pll;
      8 typedef vector<int> VI;
      9 typedef vector<PII> VII;
     10 #define N  1100000
     11 #define M  4100000
     12 #define fi first
     13 #define se second
     14 #define MP make_pair
     15 #define pi acos(-1)
     16 #define mem(a,b) memset(a,b,sizeof(a))
     17 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
     18 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
     19 #define lowbit(x) x&(-x)
     20 #define Rand (rand()*(1<<16)+rand())
     21 #define id(x) ((x)<=B?(x):m-n/(x)+1)
     22 #define ls p<<1
     23 #define rs p<<1|1
     24 
     25 const ll MOD=1e9+7,inv2=(MOD+1)/2;
     26       double eps=1e-6;
     27       int INF=1e9;
     28 
     29 char a[N],b[N],c[N];
     30 int A[N],B[N],C[N],t[N],flag,la,lb,lc;
     31 
     32 int read()
     33 {
     34    int v=0,f=1;
     35    char c=getchar();
     36    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     37    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     38    return v*f;
     39 }
     40 
     41 void solve1()
     42 {
     43     int na=0,nc=0;
     44     rep(i,1,1e6+1) A[i]=B[i]=C[i]=t[i]=0;
     45     rep(i,1,1e6-la) A[++na]=0;
     46     per(i,la,1) A[++na]=a[i]-'0';
     47     rep(i,1,1e6-lc) C[++nc]=0;
     48     per(i,lc,1) C[++nc]=c[i]-'0';
     49     int p=1;
     50     per(i,1e6,1)
     51     {
     52         if(C[i]>A[i]) break;
     53         if(C[i]<A[i]){p=0; break;}
     54     }
     55     if(!p) return;
     56     rep(i,1,1e6)
     57     {
     58         t[i]=t[i]+C[i]-A[i];
     59         if(t[i]<0)
     60         {
     61             t[i+1]--;
     62             t[i]+=10;
     63         }
     64     }
     65     p=1;
     66     int k=1e6;
     67     while(k>1&&t[k]==0) k--;
     68     per(i,k/2,1) swap(t[i],t[k-i+1]);
     69     rep(i,1,lb)
     70      if((b[i]-'0')!=t[i]){p=0; break;}
     71     if(p)
     72     {
     73         flag=1;
     74         printf("%d %d %d
    ",1000000-la,k-lb,1000000-lc);
     75     }
     76 }
     77 
     78 void solve2()
     79 {
     80     if(flag) return;
     81     rep(i,1,1e6+1) A[i]=B[i]=C[i]=t[i]=0;
     82     int nb=0,nc=0;
     83     rep(i,1,1e6-lb) B[++nb]=0;
     84     per(i,lb,1) B[++nb]=b[i]-'0';
     85     rep(i,1,1e6-lc) C[++nc]=0;
     86     per(i,lc,1) C[++nc]=c[i]-'0';
     87     int p=1;
     88     per(i,1e6,1)
     89     {
     90         if(C[i]>B[i]) break;
     91         if(C[i]<B[i]){p=0; break;}
     92     }
     93     if(!p) return;
     94     rep(i,1,1e6)
     95     {
     96         t[i]=t[i]+C[i]-B[i];
     97         if(t[i]<0)
     98         {
     99             t[i+1]--;
    100             t[i]+=10;
    101         }
    102     }
    103     p=1;
    104     int k=1e6;
    105     while(k>1&&t[k]==0) k--;
    106     per(i,k/2,1) swap(t[i],t[k-i+1]);
    107     rep(i,1,la)
    108      if((a[i]-'0')!=t[i]){p=0; break;}
    109     if(p)
    110     {
    111         flag=1;
    112         printf("%d %d %d
    ",k-la,1000000-lb,1000000-lc);
    113     }
    114 }
    115 
    116 void solve3()
    117 {
    118     if(flag) return;
    119     rep(i,1,1e6+1) A[i]=B[i]=C[i]=t[i]=0;
    120     int na=0,nb=0,nc=0;
    121     rep(i,1,1e6-1-la) A[++na]=0;
    122     per(i,la,1) A[++na]=a[i]-'0';
    123     rep(i,1,1e6-1-lb) B[++nb]=0;
    124     per(i,lb,1) B[++nb]=b[i]-'0';
    125     rep(i,1,1e6-lc) C[++nc]=0;
    126     per(i,lc,1) C[++nc]=c[i]-'0';
    127     rep(i,1,1e6)
    128     {
    129         t[i]=t[i]+A[i]+B[i];
    130         if(t[i]>9)
    131         {
    132             t[i]-=10;
    133             t[i+1]++;
    134         }
    135     }
    136     int p=1;
    137     rep(i,1,1e6+1)
    138      if(t[i]!=c[i]){p=0; break;}
    139     if(p)
    140     {
    141         flag=1;
    142         printf("%d %d %d
    ",1000000-1-la,1000000-1-lb,1000000-lc);
    143     }
    144 }
    145 
    146 int main()
    147 {
    148     //freopen("1.in","r",stdin);
    149     int cas;
    150     scanf("%d",&cas);
    151     while(cas--)
    152     {
    153         scanf("%s",a+1);
    154         scanf("%s",b+1);
    155         scanf("%s",c+1);
    156         la=strlen(a+1),lb=strlen(b+1),lc=strlen(c+1);
    157         //printf("la=%d lb=%d lc=%d
    ",la,lb,lc);
    158         flag=0;
    159         solve1();
    160         solve2();
    161         solve3();
    162         if(!flag) printf("-1
    ");
    163     }
    164 
    165     return 0;
    166 }
  • 相关阅读:
    YII2 Gridview 批量删除
    YII2 的复杂查询的一个例子
    Service.properties参数详解
    Kafka安装
    Zookeeper集群安装
    Kafka partition 副本迁移与broker上下线
    副本和分区状态机
    Controller机制
    replica副本同步机制
    Server端处理fetchRequest请求
  • 原文地址:https://www.cnblogs.com/myx12345/p/11653845.html
Copyright © 2011-2022 走看看