首页 > 代码库 > 2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)
2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)
补完题?不存在的。
这么久了,还是一条咸鱼,看一堆乱七八糟的东西,写一堆没用的水题,一点进步都没有,还是那么菜,菜的掉渣。
这个百毒之星初赛A还会写两道最简单的水题,初赛B一点也不会,菜的难过。。。
最近看的dp和kmp,垂死挣扎,一点一点看吧。。。
cf打的还是那么弱,一点进步都没有。。。
好久没写博客了,最近写的都是水题,都没有写博客的必要,但是还是来水一水(;′д`)ゞ,要不就没有写博客的习惯了。
吐槽百毒之星,比赛的时候1005交上去,莫名其妙Output Limit Exceeded,然而晚上在杭电一点没改的又重新交了一次,过了?!过了,了。。。
写1001和1005的智障题解。。。
1001:小C的倍数问题
Time Limit: 2000/1000 MS (Java/Others)
Problem Description
根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数。反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数。
现在给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数。
Input
第一行一个正整数T表示数据组数(1<=T<=20)。
接下来T行,每行一个正整数P(2 < P < 1e9),表示一组询问。
Output
对于每组数据输出一行,每一行一个数表示答案。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int main(){ 5 ll t,n,sum; 6 scanf("%lld",&t); 7 while(t--){ 8 scanf("%lld",&n); 9 sum=0;n--; 10 for(ll i=1;i<=(ll)sqrt(n);i++){ 11 if(n%i==0&&n/i==i)sum++; 12 else if(n%i==0&&n/i!=i)sum+=2; 13 } 14 printf("%lld\n",sum); 15 } 16 return 0; 17 }
该写1005了。。。
1005:今夕何夕
Time Limit: 2000/1000 MS (Java/Others)Problem Description
今天是2017年8月6日,农历闰六月十五。
小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。
小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
Input
第一行为T,表示输入数据组数。
每组数据包含一个日期,格式为YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是个合法的日期
Output
对每组数据输出答案年份,题目保证答案不会超过四位数。
Sample Input
2017-08-06
Sample Output
2023
2023
2024
这个题意好理解,就是有一个坑,闰年有2月29日,要特判一下。用这个蔡勒公式,现学现用。。。
这个题反正写的很不开心,Output Limit Exceeded,(▼へ▼メ),一点不改的再交一遍就过了,可能这个测评机不喜欢我。。。
关于这个蔡勒公式,百度一下有,其他的,传送门:http://blog.csdn.net/areskris/article/details/8661983
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int gg(int y,int m,int d){ //蔡勒公式,看传送门 4 int iweek=0; 5 int yy=0,c=0,mm=0,dd=0; 6 if(m==1||m==2){ 7 c=(y-1)/100; 8 yy=(y-1)%100; 9 mm=m+12; 10 dd=d; 11 } 12 else{ 13 c=y/100; 14 yy=y%100; 15 mm=m; 16 dd=d; 17 } 18 iweek=yy+yy/4+c/4-2*c+26*(mm+1)/10+dd-1; 19 iweek=iweek>=0?(iweek%7):(iweek%7+7); 20 if(iweek==0)iweek=7; 21 return iweek; 22 } 23 int main(){ 24 int t,ans; 25 int y,m,d; 26 char k1,k2; 27 scanf("%d",&t); 28 while(t--){ 29 scanf("%d%c%d%c%d",&y,&k1,&m,&k2,&d); 30 ans=gg(y,m,d); //找出来是星期几。 31 if(m==2&&d==29){ //特判2月29,只找闰年的就可以。 32 for(int i=y+4;i<=9999;i+=4){ //每4年加一次,题目说了答案不会超过4位数,所以9999。 33 if((i%4==0&&i%100!=0)||i%400==0){ //判断闰年。 34 if(gg(i,m,d)==ans){ //判断一下就可以。 35 printf("%d\n",i); 36 break; //因为题意是找最近的一年。 37 } 38 } 39 } 40 } 41 else{ 42 for(int i=y+1;i<=9999;i++){ 43 if(gg(i,m,d)==ans){ //没什么好解释的,大体同上。 44 printf("%d\n",i); 45 break; 46 } 47 } 48 } 49 } 50 return 0; 51 }
我对自己好失望,太菜了,看一个题不会,再看一个题还是不会,写a+b还没有成就感,写稍微难一点的题要改好久才改对。。。
(;′д`)ゞ
加油呗,垃圾。
2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)