Codeforces Round #342 (Div. 2)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #342 (Div. 2)相关的知识,希望对你有一定的参考价值。

怒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)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #342 (Div. 2) B. War of the Corporations(贪心)

Codeforces Round #342 (Div. 2) A. Guest From the Past(贪心)

Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)

Codeforces Round #342 (Div. 2) C. K-special Tables(想法题)

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)