码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #342 (Div. 2)

时间:2016-02-07 21:20:44      阅读:586      评论:0      收藏:0      [点我收藏+]

标签:

怒A三题、虽然有点水

A. Guest From the Past

题意:就说一个人去喝酒,有n块钱,塑料瓶装的就是a块钱一瓶,玻璃瓶装酒是b块钱一瓶,一个玻璃瓶又可以换c块钱,问最多能喝到多少瓶酒

思路:很经典的模拟问题,类那个猴子吃桃,多少核桃又可以换一个桃那种题,不过这个题目有个坑点,看代码把

 

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 using namespace std;
 5 int main()
 6 {
 7     long long n,a,b,c;
 8     while(cin >> n >> a >> b >> c){
 9         long long maxn=n/a;
10         long long su=0;
11         long long k;
12         while(n>=b){
13             k=n/b;
14             n=n-k*b;
15             su+=k;
16             n=n+k*c;
17         }
18         su+=n/a;                //就是这个坑点,剩下的钱可能可以买几瓶塑料酒 
19         if(maxn>su)    cout << maxn << endl;
20         else        cout << su << endl;
21     }
22 }

 

B. War of the Corporations

题意:给a串和b串和你问a串中有多少个b串

思路:典型的KMP字符串匹配问题

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 using namespace std;
 5 const int qq=1e5+50;
 6 char a[qq],b[qq],next[qq];
 7 long long tot;
 8 void get()
 9 {
10     int j,k;
11     next[0]=-1;j=0;k=-1;
12     while(j<strlen(b)-1){
13         if(k==-1||b[j]==b[k])
14             next[j++]=k++;
15         else
16             k=next[k];
17     }
18 }
19 void KMP()
20 {
21     int i,j;
22     i=j=0;
23     while(i<strlen(a)){
24         if(j==-1||a[i]==b[j]){
25             ++i;++j;
26         }
27         else
28             j=next[j];
29         if(j==strlen(b)){
30             ++tot;
31             j=0;
32         }
33     }
34 }
35 int main()
36 {
37     while(~scanf("%s%s",a,b)){
38         tot=0;
39         get();
40         KMP();
41         printf("%lld\n",tot);
42     }
43 }

 

C. K-special Tables

题意:给一个n和k的,要求第k列的和最大,n*n的矩阵,要求1到n*n所有数都出现,且每一行从左到右要求为递增

思路:找规律把、看样例比较代码就可以看到规律了

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<iostream>
 4 using namespace std;
 5 const int qq=500+50;
 6 int num[qq][qq];
 7 int main()
 8 {
 9     int n,k;
10     while(cin >> n >> k){
11         int sum=0;
12         int ans=1;
13         for(int i=0;i<n;++i)
14             for(int j=0;j<k-1;++j)
15                 num[i][j]=ans++;
16         for(int i=0;i<n;++i)
17             for(int j=k-1;j<n;++j)
18                 num[i][j]=ans++;
19         for(int i=0;i<n;++i)
20             sum+=num[i][k-1];
21         cout << sum << endl;
22         for(int j,i=0;i<n;++i){
23             for(j=0;j<n;++j)
24                 if(j==0)    cout << num[i][j];
25                 else        cout << " " << num[i][j];
26             cout << endl;    
27         }
28     }
29 } 

 

Codeforces Round #342 (Div. 2)

标签:

原文地址:http://www.cnblogs.com/sasuke-/p/5184794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!