Codeforces Round #394 (Div. 2)(A. Dasha and Stairs,B. Dasha and friends,C. Dasha and Password)

来源:互联网 发布:python snmpgetbulk 编辑:程序博客网 时间:2024/05/20 14:27

题目链接
因为技术问题,这round排名崩了不算分,那就先来更新ABC题吧

A. Dasha and Stairs
很多人被hacked应该是没有考虑a、b同时为0的情况,我也没注意啊

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int maxn = 100050;typedef long long int ll;int san[250],ke[250];int main(){    int a,b;    cin>>a>>b;    int ok = 1;    if(abs(a-b)>1)ok = 0;    else ok = 1;    if(a==0 && b==0)ok = 0;    if(ok)printf("YES\n");    else printf("NO\n");    return 0;}

B. Dasha and friends
这题数据太弱了,以至于可以用枚举来解决,是一道很好的思路题,官方还没更题解,也还没看大神的代码,两个人起点的距离范围肯定在[-L,L],通过距离修正坐标,然后排序再进行匹配,很蠢的方法,不过数据这么小这样做能过
先贴我AC的代码

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100050;typedef long long int ll;int san[250],ke[250];int main(){    int n,L;    cin>>n>>L;    for(int i=0;i<n;++i)cin>>ke[i];    for(int i=0;i<n;++i)cin>>san[i];    sort(ke,ke+n);    sort(san,san+n);    int ok = 0,t = 0,juli = maxn;    for(juli = -L;juli <= L;++juli)    {        int a[250];        for(int i=0;i<n;++i)a[i] = (ke[i] + juli) % L;        sort(a,a+n);            ok = 1;        for(int i=0;i<n;++i)        {        //  printf("%d ",a[i]);            if(a[i]!=san[i]){                ok=0;//break;            }        }        if(ok){printf("YES\n");return 0;}    }     printf("NO\n");    return 0;}

C. Dasha and Password
直接开数组存,每组存下三个值,n组字符串,每组拿到字符,数字,符号需要的最小次数,数据这么弱直接三重循环枚举更新答案

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <queue>using namespace std;const int maxn = 1000050;typedef long long int ll;char s[70][150];int mval[70][3];int main(){//  freopen("in.txt","r",stdin);    int n,m;    scanf("%d %d",&n,&m);    for(int i=0;i<n;++i)    scanf("%s",s[i]);    for(int i=0;i<70;++i)        mval[i][0]= mval[i][1]= mval[i][2] = maxn;    for(int i=0;i<n;++i)    {        for(int j=0;j<m;++j)        {        if(s[i][j]=='#' || s[i][j]=='*' || s[i][j]=='&')            mval[i][2] = min( min(j,m-j),mval[i][2]);        else if(s[i][j]<='9' && s[i][j]>='0')            mval[i][0] = min( min(j,m-j),mval[i][0]);        else if(s[i][j]<='z' && s[i][j]>='a')            mval[i][1] = min( min(j,m-j),mval[i][1]);        }    }//  for(int i=0;i<n;++i)//  printf("%d %d %d\n",mval[i][0],mval[i][1],mval[i][2]);    int ans = 1e9;    for(int i=0;i<n;++i)    {        for(int j=0;j<n;++j)        {            if(i==j)continue;            for(int k=0;k<n;++k)            {                if(i==k || j==k)continue;                ans = min(ans,mval[i][0]+mval[j][1]+mval[k][2]);                ans = min(ans,mval[i][0]+mval[j][2]+mval[k][1]);                ans = min(ans,mval[i][1]+mval[j][0]+mval[k][2]);                ans = min(ans,mval[i][1]+mval[j][2]+mval[k][0]);                ans = min(ans,mval[i][2]+mval[j][0]+mval[k][1]);                ans = min(ans,mval[i][2]+mval[j][1]+mval[k][0]);            }        }    }    printf("%d\n",ans);    return 0;}
0 0