Codeforces Round #438 868A/B/C

来源:互联网 发布:php函数大全 编辑:程序博客网 时间:2024/05/21 09:31

打了这么多次的cf,第一次上分啊,不容易,万事开头难!

第一题、标记一下两个字母,能凑出来,就行

#include<iostream>#include<cstdio>#include<cstring>using namespace std;char kk[5];char str[105][5];int vis[5];int main(){    int n;    int flag;    while(~scanf("%s",&kk))    {        flag=0;        memset(vis,0,sizeof(vis));        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%s",str[i]);            if(str[i][0]==kk[0] && str[i][1]==kk[1])                flag=1;            if(str[i][0]==kk[1])                vis[1]=1;            if(str[i][1]==kk[0])                vis[0]=1;        }        if(flag || (vis[0]==1 && vis[1]==1))            printf("YES\n");        else            printf("NO\n");    }    return 0;}


第二题、一个圆盘被针隔开,只要两个点在一个区间就行。都化成 0 到 11.999999 的 double 类型的数存储即可。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;double a[3];double t1,t2,h,m,s;int judge(){    if(t1>a[0] && t1<a[1] && t2>a[0] && t2<a[1])        return 1;    if(t1>a[1] && t1<a[2] && t2>a[1] && t2<a[2])        return 1;    if( (t2<a[0] && t1<a[0]) || (t2>a[2] && t1>a[2]) || (t1<a[0] && t2>a[2]) || (t2<a[0] && t1>a[2] ) )        return 1;    return 0;}int main(){    while(~scanf("%lf%lf%lf%lf%lf",&h,&m,&s,&t1,&t2))    {        a[2]=(s/60*12);        a[1]=(m/60*12)+a[2]/60;        if(h>=12)            h-=12;        a[0]=h+a[1]/60;        sort(a,a+3);        if(judge())            printf("YES\n");        else            printf("NO\n");    }    return 0;}

第三题、寻找0,1能够互补的就行。充分利用二进制。

#include <iostream>#include <cstdio>#include <set>using namespace std;int res;set <int> ss;int n,k,flag;void Search(int x){    set <int>::iterator it;    it=ss.find(x);    if(it!=ss.end())        flag=1;}void dfs(int x,int t){    if(t==k)        Search(x);    else{        if(x&(1<<t))    dfs(x^(1<<t),t+1);        else{            dfs(x^(1<<t),t+1);  dfs(x,t+1);        }    }}int main(){    int x;    while(~scanf("%d%d",&n,&k))    {        flag=0;        for(int i=0;i<n;i++)        {            res=0;            for(int j=0;j<k;j++)            {                scanf("%d",&x);                res+=(x<<j);            }            ss.insert(res);            if(res==0)   flag=1;        }        if(flag==1)        {            printf("YES\n");            continue;        }        set <int>::iterator it;        for(it=ss.begin();it!=ss.end();it++)        {            dfs(*it,0);        }        if(flag==1)            printf("YES\n");        else            printf("NO\n");    }    return 0;}




原创粉丝点击