• 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
    ",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 } 
  • 相关阅读:
    POJ 2892 Tunnel Warfare(树状数组+二分)
    POJ 2886 Who Gets the Most Candies?(树状数组+二分)
    POJ 2492 A Bug's Life(并查集)
    POJ 1182 食物链(并查集)
    POJ 1703 Find them, Catch them(种类并查集)
    TC SRM 582 DIV 2
    函数
    shell进阶--流程
    计划任务 at,cron
    kill命令
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5184794.html
Copyright © 2020-2023  润新知