2016"百度之星" - 初赛(Astar Round2A)1001 All X (模)

来源:互联网 发布:模拟动物的游戏知乎 编辑:程序博客网 时间:2024/05/21 17:57

All X

Accepts: 1281
Submissions: 7580
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description

F(x,m) 代表一个全是由数字x组成的m位数字。请计算,以下式子是否成立:F(x,m) mod k  c

Input

第一行一个整数T,表示T组数据。每组测试数据占一行,包含四个数字x,m,k,c1x91m10100c<k10,000

Output

对于每组数据,输出两行:第一行输出:"Case #i:"。i代表第i组测试数据。第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。

Sample Input

31 3 5 21 3 5 13 5 99 69
Sample Output
Case #1:NoCase #2:YesCase #3:Yes
Hint
对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。
AC代码:
#include<iostream>   #include<cstdlib>  #include<cstdio>  #include<cmath>  #include<cstring>  #include<string>  #include<cstdlib>  #include<iomanip>  #include<vector>  #include<list>  #include<map>  #include<algorithm>  typedef long long LL;  using namespace std; const int maxn=1000000000;char a[maxn];int main(){ LL t,x,m,k,c; int flag=0;scanf("%lld",&t);while(t--){ LL num;scanf("%lld %lld %lld %lld",&x,&m,&k,&c);     num=m%k;  //关键点LL ans=0;for(int i=1;i<=num;i++){ans=(ans*10+x)%k;}//cout<<num<<endl;if(ans%k==c)printf("Case #%lld:\nYes\n",++flag);elseprintf("Case #%lld:\nNo\n",++flag); }return 0; } 
//上面这代码虽然能A,但只是百毒之星的数据比较水。。
//好心博主提醒了我,
//1 5 5 1
//输出的是No....(答案是Yes)
//下面是用快速幂做的,测试过,应该没问题
#include<iostream>   #include<cstdlib>  #include<cstdio>  #include<cmath>  #include<cstring>  #include<string>  #include<cstdlib>  #include<iomanip>  #include<vector>  #include<list>  #include<map>  #include<queue>#include<algorithm>  typedef long long LL;  using namespace std;LL q_mod(LL a,LL b, LL c){LL ans=1;a=a%c;while(b){if(b&1) ans=(ans*a)%c;b>>=1;a=(a*a)%c;}return ans;}int main(){    LL t,x,m,k,c,Ans;int flag=0;scanf("%lld",&t);while(t--){scanf("%lld %lld %lld %lld",&x,&m,&k,&c);     k=k*9;    Ans=((q_mod(10,m,k)+k-1)%k)/9;    k/=9;    Ans=(Ans*x)%k;if(Ans==c)printf("Case #%lld:\nYes\n",++flag);elseprintf("Case #%lld:\nNo\n",++flag); }    return 0;}


1 2
原创粉丝点击