参考:http://blog.csdn.net/Little_boy_z/article/details/78162622
题解:
还比较有意思的一题,就是给出时分秒,给出人要走的两个时间点(任何一个都可以作为起点和终点,可以顺时针也可以逆时针),问是否可以顺利走完(不碰到时分秒的针)
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
int a,b,c,d,e;
int f[100];
int main()
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
a*=5,d*=5,e*=5;
a%=60;
d%=60;
e%=60;
f[a]++;
f[b]++;
f[c]++;
if(d>e) swap(d,e);
int ans=0;
for(int i=d;i<e;i++)ans+=f[i];
if(ans%3==0)puts("YES");
else puts("NO");
return 0;
}
参考:http://blog.csdn.net/overload1997/article/details/78162872
题意:有n道题目,k个参加队伍,对于每个题目参加的队伍可能知道这个题目也可能不知道这个题目,你想要找到一个关于这n道题的非空子集,每个参加队伍知道的题目不超过总数的一半。问是否能找到这么个子集。
思路:这题还挺有意思的,首先你会先到如果存在一道题是全部队伍都不知道,那么答案肯定是yes,否则不存在选一道题的情况,然后如果选两道题,那么答案为yes的最坏的情况就是每个队伍都知道一道题,然后你会发现如果两道题解决不了的话三道题四道题也同样解决不了,所以最坏的就是选两道题,所以每次判一下两道题能不能满足条件就好了。下面给代
#include<set>
#include<map>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
typedef long long LL;
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 20
typedef long long LL;
int vis[maxn];
int main(){
int n, k;
scanf("%d%d", &n, &k);
bool jud = false;
while (n--){
int status = 0;
for (int i = 0; i < k; i++){
int x;
scanf("%d", &x);
if (x)
status |= 1 << i;
}
vis[status] = 1;
for (int i = 0; i < (1 << k); i++){
if (status&i)
continue;
if (vis[i])
jud = true;
}
}
if (jud)
puts("YES");
else
puts("NO");
}