A water problem
Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
Two planets named Haha and Xixi in the universe and they were created with the universe beginning.
There is 73 days in Xixi a year and 137 days in Haha a year.
Now you know the days N after Big Bang, you need to answer whether it is the first day in a year about the two planets.
There is 73 days in Xixi a year and 137 days in Haha a year.
Now you know the days N after Big Bang, you need to answer whether it is the first day in a year about the two planets.
Input
There are several test cases(about
5
huge test cases).
For each test, we have a line with an only integer N(0≤N) , the length of N is up to 10000000 .
For each test, we have a line with an only integer N(0≤N) , the length of N is up to 10000000 .
Output
For the i-th test case, output Case #i: , then output "YES" or "NO" for the answer.
Sample Input
10001 0 333
Sample Output
Case #1: YES Case #2: YES Case #3: NO题意
一个星球一年是73天,另一个是137天,问给定的天数之后,是否是二者新年的第一天。简言之,就是求两个的最小公倍数,显然73和137互质,所以最小公倍数就是10001,直接取余判断。N的长度非常大,用高精按位除即可。字符串的输入遇到点问题,导致TLE了若干次,也算是收获了。代码
#include <iostream> #include <cstdio> using namespace std; #define N 10000005 int lena; char ss[N]; int check(string s) { int x=0,y,c=10001; lena=s.size(); if(lena==1&&s[0]=='0') return 0;//0显然是的 if(lena<5) return 1; //10000以内除了0外,没有其他符合要求的数 for(int i=0;i<lena;i++) //如果超过五位,则逐位计算 { y=s[i]-48; x=(x*10+y)%c; } return x; } int main() { int t=1; while(scanf("%s",ss)!=EOF) { if(!check(ss))cout<<"Case #"<<t<<": YES"<<endl; else cout<<"Case #"<<t<<": NO"<<endl; t++; } return 0; }