CF 1110 D/E

Posted

tags:

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

?????????out   cto   memset   ??????   cst   ??????   fine   queue   eof   

CF 1110 D. Jongmah

??????????????????????(n)???????????????????????????????????????????(a_i,(1leq a_ileq m))?????????????????????????????????????((??????3,4,5))??????????????????????????????????((??????7,7,7))??????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????A??????????????????????????? (TAT???

???????????????(DP)?????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????????????????????????????????????????(2)???????????????????????????(3)????????????????????????????????????????????????????????????????????????(f[i][j][k])??????(DP)????????????(i)???????????????(i-1)??????????????????????????????(j)?????????(i)??????????????????????????????(k)???????????????????????????

?????????

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define N 1000005

using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}

int n,m;
int f[N][3][3],sum[N];
int main() {
    n=Get(),m=Get();
    int a;
    for(int i=1;i<=n;i++) {
        a=Get();
        sum[a]++;
    }
    memset(f,-0x3f,sizeof(f));
    f[2][0][0]=0;
    for(int i=2;i<m;i++) {
        for(int j=0;j<3;j++) {
            for(int k=0;k<3;k++) {
                if(f[i][j][k]<0) continue ;
                for(int q=0;q<3;q++) {
                    if(sum[i+1]<q) break;
                    if(sum[i]<k+q) break;
                    if(sum[i-1]<j+k+q) break;
                    f[i+1][k][q]=max(f[i+1][k][q],f[i][j][k]+(sum[i-1]-j-k-q)/3+q);
                }
            }
        }
    }
    int ans=0;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            ans=max(ans,f[m][i][j]+(sum[m]-j)/3+(sum[m-1]-i-j)/3);
    cout<<ans;
    return 0;
}

???????????????????????????????????????(DP)?????????????????????????????????????????????????????????????????????????????????????????????


CF 1110 E. Magic Stones

????????????????????????????????????(n)?????????(c)???(t)???????????????(c)????????????????????????????????????????????????(i(2leq ileq n-1))????????????(c_i)??????(c_{i-1}+c_{i+1}-c_i)???

?????????????????????????????????????????????A?????????

?????????(d_i=c_{i+1}-c_i(1leq i leq n-1))????????????????????????(c_i)?????????????????????????????????(d_{i-1})???(d_i)???

??????????????????????????????(d)??????????????????????????????????????????????????????????????????(c_1==t_1)???

?????????

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define N 200005

using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}

int n;
int c[N],t[N];
int dc[N],dt[N];
int main() {
    n=Get();
    for(int i=1;i<=n;i++) c[i]=Get();
    for(int i=1;i<=n;i++) t[i]=Get();
    for(int i=1;i<n;i++) dc[i]=c[i+1]-c[i];
    for(int i=1;i<n;i++) dt[i]=t[i+1]-t[i];
    if(c[1]!=t[1]) {cout<<"No";return 0;}
    sort(dc+1,dc+n);
    sort(dt+1,dt+n);
    for(int i=0;i<=n;i++) {
        if(dc[i]!=dt[i]) {cout<<"No";return 0;}
    }
    cout<<"Yes";
    return 0;
}

以上是关于CF 1110 D/E的主要内容,如果未能解决你的问题,请参考以下文章

CF1110E Magic Stones

CF1110E Magic Stones

CF1110E Magic Stones - 差分

cf1110E 思维

CF global1 D / CF1110D Jongmah

CF1110D Jongmah