zoukankan      html  css  js  c++  java
  • F

    字符串hash:  base设置为10

    枚举'='可能出现的位置,从1/2处开始到大概1/3处结束,当然大概的1/3不用计算,直接到最后就行,因为本题必然有解,输出直接结束即可。

    根据'='号位置,'+'最多有四种位置,因为 等式的和位数确定,有进位和不进位,左和右,最多2X2,然后剪掉j的非法位置(这里没计算除了len=3以外的j有无非法位置的可能,剪了再说)

    比较需要注意的地方是等式中非个位数字不能以'0'开头,开始只以为不以'0'开头即可,WA在了 1+0=0 ,改了j后又WA了0+0=0

    代码

      1 #include <iostream>
      2 #include <cmath>
      3 #include <algorithm>
      4 #include <vector>
      5 #include <cstring>
      6 #include <queue>
      7 #include <map>
      8 using namespace std;
      9 
     10 typedef long long ll;
     11 map< ll ,ll > done;
     12 map<ll ,int > mp;
     13 const ll MOD=1e9+7;
     14 const int maxLen=1e6+3;
     15 char s[maxLen];
     16 ll P[maxLen];
     17 ll sum[maxLen];
     18 
     19 template<class T>
     20 inline bool scan_d(T &ret){
     21     char c; int sgn;
     22     if(c=getchar(),c==EOF) return 0;//EOF
     23     while(c!='-'&&(c<'0'||c>'9')) c=getchar();
     24     sgn=(c=='-')?-1:1;
     25     ret=(c=='-')?0:(c-'0');
     26     while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
     27     ret*=sgn;
     28     return 1;
     29 }
     30 
     31 inline void out(int x){
     32     if(x>9) out(x/10);
     33     putchar(x%10+'0');
     34 }
     35 
     36 ll gcd(ll a,ll b){
     37     return b==0?a:gcd(b,a%b);
     38 }
     39 
     40 ll Qpow(ll a,ll n){
     41     ll ret=1;
     42     ll tmp=a%MOD;
     43     while(n){
     44         if(n&1) ret=(ret*tmp)%MOD;
     45         tmp=(tmp*tmp)%MOD;
     46         n>>=1;
     47     }
     48     return ret;
     49 }
     50 
     51 ll getF(ll t){
     52     if(t==1) return mp[t]=1;
     53     if(mp.count(t)) return mp[t];
     54     mp[t]=Qpow(2,t-1);
     55     for(int i=2;i*i<=t;++i){
     56         if(t%i==0){
     57             mp[t]=(mp[t]-getF(i)+MOD)%MOD;
     58             if(i*i!=t) mp[t]=(mp[t]-getF(t/i)+MOD)%MOD;
     59         }
     60     }
     61     return mp[t]=(mp[t]-getF(1)+MOD)%MOD;
     62 }
     63 
     64 int main()
     65 {
     66     P[0]=1;
     67     for(int i=1;i<maxLen;++i){
     68         P[i]=P[i-1]*10%MOD;
     69     }
     70     scanf("%s",s+1);
     71     int len=strlen(s+1);
     72     sum[0]=0;
     73     for(int i=1;i<=len;++i){
     74         sum[i]=(sum[i-1]*10+s[i]-'0')%MOD;
     75     }
     76     //for(int i=1;i<=len;++i)
     77     //    printf("%d : %I64d
    ",i,sum[i]);
     78     int flag=0;
     79     for(int i=len/2;i<len;++i){
     80         if(s[i+1]=='0'&&len-i>1) continue;
     81         int sumlen=len-i;
     82         for(int j:{sumlen,sumlen-1,i-sumlen,i-sumlen+1}){
     83             if(j>=i||j<1) continue;
     84             if(s[j+1]=='0'&&i-j>1) continue;
     85 
     86         //printf("i : %d   j : %d
    ",i,j);
     87             ll a=(sum[j]-sum[0]*P[j]%MOD+MOD)%MOD;
     88             ll b=(sum[i]-sum[j]*P[i-j]%MOD+MOD)%MOD;
     89             ll c=(sum[len]-sum[i]*P[len-i]%MOD+MOD)%MOD;
     90             if((a+b)%MOD==c%MOD){
     91                 for(int k=1;k<=j;++k)
     92                     putchar(s[k]);
     93                 putchar('+');
     94                 for(int k=j+1;k<=i;++k)
     95                     putchar(s[k]);
     96                 putchar('=');
     97                 for(int k=i+1;k<=len;++k)
     98                     putchar(s[k]);
     99                 puts("");
    100                 flag=1;
    101                 break;
    102             }
    103         }
    104         if(flag) break;
    105     }
    106     return 0;
    107 }
    View Code
  • 相关阅读:
    Mybatis获取插入记录的自增长ID
    mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap
    <c:if test="value ne, eq, lt, gt,...."> 用法
    大话设计模式之----状态模式
    php文件加锁 lock_sh ,lock_ex
    in_array 判断问题的疑惑解决。
    我是一只IT小小鸟观后感
    《世界是数字的》
    我是一只IT小小鸟
    解压缩
  • 原文地址:https://www.cnblogs.com/Kiritsugu/p/9321192.html
Copyright © 2011-2022 走看看