[待补完]CODE FESTIVAL 2017 Final (Parallel) A,B,C(搜索)
来源:互联网 发布:sql 选取时间段 编辑:程序博客网 时间:2024/06/10 09:49
比赛地址
A - AKIBA
xjb写
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <vector>#include <map>#include <algorithm>#include <queue>using namespace std;char in[100];int main(){ int i,j; char rigi[100] = "AKIHABARA"; while(~scanf("%s",in)){ int len = strlen(in); int p = 0; bool flag = true; for(i=0;i<len;i++){ while(rigi[p] =='A' && rigi[p]!=in[i]){ p++; } if(rigi[p] != in[i]){ flag = false; break; } p++; } if(p!=8 && p!=9){ flag = false; } if(flag){ printf("YES\n"); }else{ printf("NO\n"); } } return 0;}
B - Palindrome-phobia
xjb写
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <vector>#include <map>#include <algorithm>#include <queue>using namespace std;const int maxn = 1e5+10;char in[maxn];int cnt[5];int main(){ int i,j,len; while(~scanf("%s",in)){ len = strlen(in); memset(cnt, 0, sizeof(cnt)); for(i=0;i<len;i++){ ++cnt[in[i] - 'a']; } int a3 = cnt[0]; int b3 = cnt[1]; int c3 = cnt[2]; int cut = min(a3, min(b3,c3)); bool flag = true; for(i=0;i<3;i++){ cnt[i] -= cut; if(cnt[i] > 1){ flag = false; break; } } if(flag){ printf("YES\n"); }else{ printf("NO\n"); } } return 0;}
C - Time Gap
主人公高桥君(以下简称总嘟嘟),她所在的地方此时为0点。有n个人在不同的地方,每个地方的时间都不一样,每个人的时间表示为di(0<=di<=12)表示总嘟嘟和第i个人的时差。
每个人的时间既可以写成d,也可以写成24-d(如4可以表示为20,但0和12就是自身)。现在定义一个s,s表示n+1个人中任意两个人之间的时差的最小值。我们的任务是确定di的表示(究竟表示为di还是24-di),然后使s值最大。
官方题解讲的很不错,还画了图。
一开始会想到每个人都两种表示法表示一下,算s的最大值。然而肯定会超时,本题di的范围输入使0~12,因此可以看每一个时间点:
1、如果有一个人时间是该时间点,那么搜索这个人不变和变成24-di
2、如果有两个人时间是该时间点,那么肯定是一个人时间不变,一个人变为24-di
3、如果有三人及以上的时间是该时间点,那么答案显然是0
搜搜搜。。。。我搜索写的好垃圾。。。
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <vector>#include <map>#include <algorithm>#include <queue>using namespace std;const int maxn = 100;const int inf = 0x3f3f3f3f;int save[maxn];int ji[maxn], ou[maxn];int myClock[maxn];int res;void dfs(int index, bool check){ if(index > 12){ return; } if(check){ int i; int sum = 1; int nowMin = inf; for(i=0;i<24;i++){ if(myClock[i] == 1 && i!=0){ nowMin = min(sum, nowMin); sum = 1; }else if(myClock[i] == 0){ ++sum; }else if(myClock[i] > 1){ nowMin = 0; sum = 1; } } nowMin = min(sum, nowMin); res = max(res, nowMin); } if(myClock[index] == 1){ dfs(index+1, true); ++myClock[24-index]; --myClock[index]; dfs(index+1,true); ++myClock[index]; --myClock[24 - index]; }else if(myClock[index] == 2){ ++myClock[24-index]; --myClock[index]; dfs(index+1,true); --myClock[24-index]; ++myClock[index]; }else if(myClock[index] >2){ res = max(res, 0); }else{ dfs(index+1,false); }}int main(){ int n,i; while(~scanf("%d",&n)){ memset(myClock, 0, sizeof(myClock)); for(i=1;i<=n;i++){ scanf("%d",&save[i]); ++myClock[save[i]]; } myClock[0] += 1; res = 0; dfs(1,false); printf("%d\n",res); } return 0;}
阅读全文
0 0
- [待补完]CODE FESTIVAL 2017 Final (Parallel) A,B,C(搜索)
- [DP]Atcoder CODE FESTIVAL 2017 Final (Parallel) D
- CODE FESTIVAL 2017 qual C- A-B-C 总结
- CODE FESTIVAL 2017 qual B:C
- CODE FESTIVAL 2017 qual A C
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual B
- CODE FESTIVAL 2017 qual A
- Atcoder CODE FESTIVAL 2017 Final 简要题解
- CODE FESTIVAL 2017 qual C
- CODE FESTIVAL 2017 qual C C
- 【二分图染色】AtCoder CODE FESTIVAL 2017(qual B)C[3 Steps]题解
- Oracle并行处理 /*+ parallel(A 8) parallel(B 8) parallel(C 8) parallel(D 8) */
- Atcoder CODE FESTIVAL 2017 qual C D
- [Atcoder CODE FESTIVAL 2017 qual C]D
- 【AtCoder CODE FESTIVAL 2017 qual C】D
- [构造] CODE FESTIVAL 2016 Grand Final G. FESTIVAL
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)【A,B,C,D】
- java的关系运算符
- 杭电2017新生赛1009-最大收益
- 谷歌浏览器开发调式工具devTools最新教程(完整版)
- java的逻辑运算符
- 数据保护 data protection
- [待补完]CODE FESTIVAL 2017 Final (Parallel) A,B,C(搜索)
- 杭电2017新生赛1006-稿件整理
- java8
- 杭电2017新生赛1005-整数的Alvin值
- 动态规划-3.1.1矩阵连乘问题之穷举法
- C语言
- DAY5之Python复习内容:函数(部分)
- 公网与内网
- PHP中的一些小算法