• Codeforces Round #612题解


    A题

    只需要找到A中后面跟的最长的p串是几个即可

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    int main(){
        int t;
            cin>>t; 
            string s;
            int n;
            int i;
            while(t--){
            cin>>n;
            cin>>s;
            int ans=0;
            int cnt=0;
            for(i=n-1;i>=0;i--){
                if(s[i]=='P')
                cnt++;
                else{
                    ans=max(ans,cnt);
                    cnt=0;
                }
            }
            cout<<ans<<endl;
            
        }
    } 
    View Code

    B题

    关键点是发现如果确定两个,那么第三个即可推出,看题要仔细,要认真发掘题目性质

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=10010;
    map<string,int> m1;
    string s[N];
    int main(){
        int i,j;
        int n,k;
        cin>>n>>k;
        for(i=0;i<n;i++){
            cin>>s[i];
            m1[s[i]]+=1;
        }
        int num=0;
        for(i=0;i<n;i++){
            for(j=i+1;j<n;j++){
                int t;
                string res="";
                for(t=0;t<k;t++){
                    if(s[i][t]==s[j][t])
                    res+=s[i][t];
                    else{
                         res+=(236-s[i][t]-s[j][t]);
                    }
                }
                if(m1[res])
                num++;
            }
        }
        cout<<num/3<<endl;
    }
     
    View Code

    C题

    动态规划,常用的在前i个中求最小或最大,根据经验,可以按照题目性质来列状态,例如本题可以观察得出,有奇数偶数的区别,所以可以将这两个设为两维,另需添一维表述当前位置的状态

    此类动态规划题常见且套路清晰。

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<cstdio>
    using namespace std;
    const int N=105;
    int f[N][N][N][2];
    int a[N];
    int main(){
        int i;
        int n;
        cin>>n;
        for(i=1;i<=n;i++)
        cin>>a[i];
        memset(f,0x3f,sizeof f);
        int num1,num2;
        if(n%2){
            num1=n/2+1;
            num2=n/2;
        }
        else{
            num1=num2=n/2;
        }
        int j,k;
        f[0][0][0][0]=f[0][0][0][1]=0;
        for(i=1;i<=n;i++){
           for(j=0;j<=num1;j++){
             for(k=0;k<=num2;k++){
                 if(a[i]==0){
                     if(k>0) 
                     f[i][j][k][0]=min(f[i-1][j][k-1][0],f[i-1][j][k-1][1]+1);
                     if(j>0) 
                     f[i][j][k][1]=min(f[i-1][j-1][k][1],f[i-1][j-1][k][0]+1);
                 }
                 else{
                     if(a[i]%2){
                         if(j>0) f[i][j][k][1]=min(f[i-1][j-1][k][1],f[i-1][j-1][k][0]+1);
                     }
                     else{
                         if(k>0) f[i][j][k][0]=min(f[i-1][j][k-1][0],f[i-1][j][k-1][1]+1);
                     }
                 }
             }    
           }
        } 
        cout<<min(f[n][num1][num2][1],f[n][num1][num2][0])<<endl;
    }
     
     
    View Code

    D题--待补

  • 相关阅读:
    OpenCV-Python 模板匹配 | 三十一
    OpenCV-Python 傅里叶变换 | 三十
    OpenCV-Python 直方图-3:二维直方图 | 二十八
    OpenCV-Python 直方图-4:直方图反投影 | 二十九
    角谷猜想
    C# Notepad++ 环境配置
    C++ Notepad++ 环境配置
    字符串内无重复字符的最长子串长度
    计算给定字符串的无重复字符的最长子串长度
    黑色星期五
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12184842.html
Copyright © 2020-2023  润新知