USACO Training Section 1.1 题解(共4题)

第一题

题目传送门:你的飞碟在这儿

分析

水题一道,输入两个字符串,将它们转换为数字同时相乘,然后判断一下它们是不是对于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

猜你喜欢

转载自www.cnblogs.com/xiaoziyao/p/10294702.html
今日推荐