1. 程式人生 > >USACO Training Section 1.1 題解(共4題)

USACO Training Section 1.1 題解(共4題)

int aps hid close 傳送門 new span div 一道

第一題

題目傳送門:你的飛碟在這兒

分析

水題一道,輸入兩個字符串,將它們轉換為數字同時相乘,然後判斷一下它們是不是對於47同余就可以了。

代碼

技術分享圖片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int i,l,a=1,b=1;
 4 string s;
 5 int main(){
 6     cin>>s; l=s.size();
 7     for(i=0;i<l;i++)
 8         a*=(s[i]-64);
 9     cin>>s; l=s.size();
10 for(i=0;i<l;i++) 11 b*=(s[i]-64); 12 if(a%47==b%47) 13 puts("GO"); 14 else puts("STAY"); 15 return 0; 16 }
View Code

第二題

題目傳送門:貪婪的送禮者

分析

在輸入時,我們把給出的錢與退還給送禮者的錢計算出來,累加在每個人賬戶上,最後輸出每個人賬戶即可。

有個小坑點:一件禮物可能送給0個人。

代碼

技術分享圖片
 1 #include<bits/stdc++.h>
 2
using namespace std; 3 int n,i,j,k,m,a,money[15]; 4 string name[15],s,q; 5 int number(string s){ 6 int f=0; 7 for(k=1;k<=n;k++) 8 if(s==name[k]) 9 f=k; 10 return f; 11 } 12 int main(){ 13 scanf("%d\n",&n); 14 for(i=1;i<=n;i++) 15 cin>>name[i];
16 for(i=1;i<=n;i++){ 17 cin>>q>>a>>m; 18 int x,y; 19 if(m==0) 20 continue; 21 x=a/m,y=x*m; 22 money[number(q)]-=y; 23 for(j=1;j<=m;j++){ 24 int f; 25 cin>>s; 26 money[number(s)]+=x; 27 } 28 } 29 for(i=1;i<=n;i++) 30 cout<<name[i]<<" "<<money[i]<<endl; 31 return 0; 32 }
View Code

第三題

題目傳送門:黑色星期五

分析

又是一道水題,只要把年份枚舉一邊,加上判斷閏年,直接AC。

代碼

技術分享圖片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int i,j,k,n,day=1,d[10],m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 4 int main()
 5 {    scanf("%d",&n);
 6     for(i=1900;i<=1899+n;i++)
 7         for(j=1;j<=12;j++){
 8             if((i%100&&i%4==0)||i%400==0)
 9                 m[2]=29;
10             else m[2]=28;
11             for(k=1;k<=m[j];k++,day++)
12                 if(k==13)
13                     d[day%7]++;
14         }
15     printf("%d",d[6]);
16     for(i=0;i<=5;i++)
17         printf(" %d",d[i]);
18     return 0;
19 }
View Code

USACO Training Section 1.1 題解(共4題)