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;

    }
} 

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;
}
 

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;
}

D题--待补

原文地址:https://www.cnblogs.com/ctyakwf/p/12184842.html

时间: 2024-10-08 20:44:06

Codeforces Round #612题解的相关文章

Codeforces Round #541 题解

codeforces Round #541 C 题意 给你100个人,让你将它们围成一个圆,使得:"任意相邻的两人身高差的绝对值" 中的最大值 最小 题解 显然的构造方法:先排序,让所有人1 2 报数,报2的出列,排尾变排头接到报 1 的原队列后面 证明: 显然这样的构造方法保证身高差最大为 max{(a[i+2]-a[i]) }(i=1..n,环状,a[i]升序): 我们可以说明对于任意的i,身高差至少为(a[i+2]-a[i]), 如果我们将每个人看成一个点,相邻关系看成一条无向边

CFEducational Codeforces Round 66题解报告

CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第\(k\)小的值 那么问题就变成了 每一个数变成了\([x-mid,x+mid]\)的一段区间,如果有一个位置被覆盖了超过\(k\)次 那么\(mid\)一定合法 类似括号匹配 每次碰到左端点就贡献+1 右端点就统计答案然后-1 维护答案的同时顺便维护位置就好了 #include<cstdio>

codeforces Round#332Div2 题解

codeforces Round#332Div2 AB 签到题 比较激动,纷纷WA了一发. C 把数组h复制给a,然后对a数组排序. 对h和a数组,求前缀和,有多少个位置满足\(\sum a[i] = \sum h[i]\), 就最多能分成多少块. D 我们枚举更短的那条边,这样的边不会太多. 然后求,更长的那条边. E 符合xxx限定条件的图的计数问题.数据范围很状压. 我们用dp[mask][root]表示,集合mask里的点,以root为根,不违背限定条件的方案数. 接下来考虑dp[mas

Codeforces Round #612

Garland 题意 题解 代码 Numbers on Tree 题意 题解 代码 Garland 题目链接 http://codeforces.com/contest/1286/problem/A 题意 给出一串灯泡,灯泡上编号为 1-n 的一个排列,其中一些灯泡掉落. 定义整串的权值为相邻灯泡编号奇偶不同的对数,求放回灯泡后的最小权值. 题解 编号只有奇偶性有用.统计掉落灯泡编号的奇数个数和偶数个数.缺少灯泡的间隙分为四种,奇数间隙(两端为奇数),偶数间隙(两端为偶数),奇偶间隙(两端数字奇

Codeforces Educational Codeforces Round 54 题解

题目链接:https://codeforc.es/contest/1076 A. Minimizing the String 题意:给出一个字符串,最多删掉一个字母,输出操作后字典序最小的字符串. 题解:若存在一个位置 i 满足 a[i] > a[i+1],若不删除 a[i] 则后续操作不可能更优. 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define ull unsigned

Educational Codeforces Round 55 题解

题解 CF1082A [Vasya and Book] 史上最难A题,没有之一 从题意可以看出,翻到目标页只有三种办法 先从\(x\)到\(1\),再从\(1\)到\(y\) 先从\(x\)到\(n\),再从\(n\)到\(y\) 直接从\(x\)到\(y\) 三种的必要条件分别是 \((y-1)\mod d \equiv 0\) \((n-y)\mod d \equiv 0\) \(|x-y|\mod d \equiv 0\) 所以如果上面三种都不满足的话就输出\(-1\) 不然就取最小的输出

Codeforces Round 596 题解

万幸的是终于碰上了一场上分好场. 不幸的是一开始差点不会 A. 万幸的是想了个不那么稳的结论过了 pretest. 不幸的是罚时很高,而且慌得一比. 万幸的是然后半个小时内把 B 和 C 码了. 不幸的是然后就只能看着排名一点一点掉了. 万幸的是最后 A 没被叉掉. 不幸的是我居然没敢去叉人. 万幸的是我就是叉了 10 个人排名也不会上涨超过 5. 不幸的是我每掉一名都会少涨两三分. 万幸的是我没去打隔壁的 ZR. 不幸的是我发现这场 ZR 我一题不会,打了就会掉分-- 2A 没仔细想,但是应该

Codeforces Round #612 (Div. 2) (A-D)

直 接看所有A后面连续P的个数最大值 #include<cstring> #include<cstdio> #include<set> #include<iostream> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, s, t) for (int i = s; i < (int)t; i++) #define fi first #define se sec

Codeforces Round #616 题解

A题 我们注意到如果存在两个奇数,那么就能满足题目条件,所以我们就从头寻找两个奇数,没有的话就是无解 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<vector> #include<string> #include<cstring> #include<map> using namespace st