1. 程式人生 > >2017"百度之星"程序設計大賽 - 初賽(A)-1001.小C的倍數問題(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)

2017"百度之星"程序設計大賽 - 初賽(A)-1001.小C的倍數問題(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)

() sum 數據 ont stat kmp 其他 markdown 如果

補完題?不存在的。

這麽久了,還是一條鹹魚,看一堆亂七八糟的東西,寫一堆沒用的水題,一點進步都沒有,還是那麽菜,菜的掉渣。

這個百毒之星初賽A還會寫兩道最簡單的水題,初賽B一點也不會,菜的難過。。。

最近看的dp和kmp,垂死掙紮,一點一點看吧。。。

cf打的還是那麽弱,一點進步都沒有。。。

好久沒寫博客了,最近寫的都是水題,都沒有寫博客的必要,但是還是來水一水(;′д`)ゞ,要不就沒有寫博客的習慣了。

吐槽百毒之星,比賽的時候1005交上去,莫名其妙Output Limit Exceeded,然而晚上在杭電一點沒改的又重新交了一次,過了?!過了,了。。。

寫1001和1005的智障題解。。。

1001:小C的倍數問題

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 32768/32768 K (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

對於每組數據輸出一行,每一行一個數表示答案。

Sample Input 1 10 Sample Output 3 題意一開始怎麽都沒看懂,不知道是我的腦回路和出題人不一樣,還是因為我語文不好。。。還是大佬給我說的題意才理解的。 就是找1到p-1的因數的個數,比如10進制,就是0,1,2,3,4,5,6,7,8,9,哎呀,就是那個意思,想想就理解了。。。 代碼:
 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) Memory Limit: 32768/32768 K (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

3
2017-08-06 2017-08-07 2018-01-01

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)