三道水题。
题目链接:点击打开链接
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;
}