CodeForces 490C Hacking Cypher
来源:互联网 发布:网络投资平台最赚钱 编辑:程序博客网 时间:2024/05/21 06:25
给一个数字串,和两个整数a,b。
问能否将该串分成两部分,其前后两部分分别被这两个整数整除。
解法:
根据同余定理,从前往后扫一遍数字串,可以得到各个前缀模a的余数A[i]。再从后往前扫一遍,可以得到各个后缀模b的余数B[i]。然后再扫一遍每一个位置i,看是否有A[i]=B[i+1]=0。
注意,由于不能有前缀0且拆分后得到的数必须大于0,因此在判定A[i]=B[i+1]=0的时候,还需加上s[i+1]!='0'的条件。
#include<bits/stdc++.h>using namespace std;typedef __int64 LL;char s[1000005];LL A[1000005],B[1000005];int main(){ LL a,b; int i,j; cin>>s>>a>>b; int l=strlen(s); LL p; A[0]=(s[0]-'0')%a; for(i=1;i<l;++i) A[i]=(A[i-1]*10+s[i]-'0')%a; B[l-1]=(s[l-1]-'0')%b; for(i=l-2,p=1;i>=0;--i){ p=p*10%b; B[i]=(B[i+1]+(s[i]-'0')*p)%b; } bool flag=0; for(i=0;i<l;++i) if(A[i]==0&&i+1<l&&s[i+1]!='0'&&B[i+1]==0){ flag=1;break; } if(flag){ puts("YES"); for(j=0;j<=i;++j) printf("%c",s[j]); puts(""); puts(s+i+1); } else puts("NO"); return 0;}
0 0
- CodeForces 490C Hacking Cypher
- CodeForces 490C - Hacking Cypher
- codeforces 490C Hacking Cypher
- CodeForces 490C Hacking Cypher
- 【CODEFORCES】 C. Hacking Cypher
- Codeforces 490C Hacking Cypher(暴力)
- [CodeForces 490C]Hacking Cypher[math]
- Codeforces 490C Hacking Cypher 暴力
- codeforces 490-C. Hacking Cypher(暴力)
- Codeforces 490C Hacking Cypher【前缀模+后缀模+暴力】
- codeforces 490C Hacking Cypher(大数逆向取模)
- Hacking Cypher(CF--490C
- 【Codefroces 490 C Hacking Cypher】+ dp
- C. Hacking Cypher
- Codeforces Round #279 (Div. 2)C. Hacking Cypher
- Codeforces Round #279 (Div. 2) C. Hacking Cypher
- Codeforces Round #279 (Div. 2) C. Hacking Cypher
- Codeforces Round #279 (Div. 2)C. Hacking Cypher
- 为什么要使用NSURLSession
- 使用Dropzone上传图片及回显示例
- 从中国移动走出去的咪咕能成功吗?
- 关于程序员的面试你怎么看待
- 双重检查锁实现的单例模式
- CodeForces 490C Hacking Cypher
- hdu5301-multi-university contest 2 -1002
- OCR文字识别HTTP restapi接口设计
- select change的用法
- 操作系统原理
- tcpdump非常实用的抓包实例
- 第一天
- C/C++表达式求值顺序
- POJ 3087:Shuffle'm Up