Codeforces Round #438 A+B+C Contest 868

来源:互联网 发布:手机远程服务器软件 编辑:程序博客网 时间:2024/04/30 09:25

三道水题。

题目链接:点击打开链接


A:一看到n<=100 直接暴力

#include <iostream>#include <map>#include <set>#include <string>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector>using namespace std;typedef long long ll;const int maxn=110;string t,a[maxn];int main(){    cin>>t;    int n;    cin>>n;    for(int i=1;i<=n;i++){        cin>>a[i];    }    bool f=false;    for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            string tmp=a[i]+a[j];            if(tmp.find(t)!=-1){                f=true;                break;            }        }if(f) break;    }    if(f) printf("YES\n");    else printf("NO\n");return 0;}

B:将钟表上的时针分针秒针所指的位置转化成度数,然后枚举各种情况。
/*2017年10月6日10点56分AC*/#include <iostream>#include <map>#include <set>#include <string>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector>using namespace std;typedef long long ll;int main(){    int h,m,s,t1,t2;    scanf("%d%d%d%d%d",&h,&m,&s,&t1,&t2);    double dh,dm,ds,dt1,dt2;    dt1=t1%12*30.0;    dt2=t2%12*30.0;    ds=s%60*6.0;    dm=m%60*6.0+s*0.1;    dh=h%12*30.0+dm*1.0/12;    //printf("%lf %lf %lf \n",dh,dm,ds);    double a[3],b[2];    a[0]=ds;    a[1]=dm;    a[2]=dh;    b[0]=dt1;    b[1]=dt2;    sort(a,a+3);    sort(b,b+2);    if(b[0]>a[0]&&b[1]<a[1]||b[0]>a[1]&&b[1]<a[2]||b[0]>a[2]&&b[1]>a[2]||b[0]<a[0]&&b[1]>a[2]||b[1]<a[0]||b[0]>a[2]) printf("YES");    else printf("NO\n");return 0;}

C:一道脑筋急转弯,代码参考自:http://www.voidcn.com/article/p-cwboylbk-boa.html
      思路就是把输入的每一行看成二进制数,如果存在满足要求的题目,那么一定有两行相与之后的值为0.那么我们就去找这样的两个二进制数字,直接暴力会T,有个技巧,因为K最大为4,那么我们只要把每一种二进制k出现与否存在b[16],出现一次b[k]++,然后在暴力2^2k找是否存在这样两个二进制相与为0即可。
#include <iostream>#include <map>#include <set>#include <string>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector>using namespace std;typedef long long ll;const int maxn=1e5+10;int a[maxn][5],b[16];int main(){    int n,k;    scanf("%d%d",&n,&k);    memset(b,0,sizeof(b));    for(int i=0;i<n;i++){            int num=0;        for(int j=0;j<k;j++){            scanf("%d",&a[i][j]);            num|=a[i][j]<<(k-1-j);        }        b[num]++;    }    bool f=false;    for(int i=0;i<(1<<k);i++){        //printf("%d\n",b[i]);        for(int j=0;j<(1<<k);j++){            //printf("%d\n",b[i]&b[j]);            if((i&j)==0&&b[i]&&b[j]){                //printf("YES\n");                f=true;            }        }    }    if(f)        printf("YES\n");    else        printf("NO\n");return 0;}



原创粉丝点击