◇赛时-IV◇ CODE FESTIVAL 2017 Final


□唠叨□



①……浓浓的 Festival 气氛

②看到这个比赛比较特别,我就看了一看……看到粉粉的界面突然开心,所以就做了一下 `(*∩_∩*)′

③没想到这是大佬才能做的比赛 QwQ

④我发现我读题读了20多分钟……


□题目&解析□

◇居然有水题◇A - AKIBA

  • 【Atcoder CF2017 Final A】
  • 【翻译】

    你得到了一个长度小于等于50的字符串S。

    高桥(某主人物)能够在这个字符串S的任何位置插入'A'任意多次,请问他是否能将S变为“AKIHABARA”。是输出YES,否则输出NO。
  • 【解析】

    对于这种字符串匹配问题,我们可以储存原字符串匹配到的位置i,和目标字符串匹配到的位置j。

    这道题有一种特殊判断——当目标串中有'A'未匹配时,可以忽略,因为高桥可以在那里插入一个'A'。判断掉这种特殊情况后,我们可以继续匹配,直到发现无法匹配,或者最后原串或者目标串没有匹配完,就说明匹配失败了。

    但是注意如果目标串末尾还有A没有匹配的话是算匹配成功的(在末尾一直加'A')。
  • 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const string goal="AKIHABARA";
int main()
{
string str;
cin>>str;
int len=str.length();
bool right=true;
int i=0,j=0;
for(;i<len && j<9;)
{
if(str[i]==goal[j]) {i++,j++;continue;}
if(goal[j]=='A') {j++;continue;}
right=false;
break;
}
while(j<9 && goal[j]=='A') j++;
if(i<len || j<9) right=false;
printf("%s\n",right? "YES":"NO");
return 0;
}

◇找规律◇ B - Palindrome-phobia

  • 【Atcoder CF2017 Final B】
  • 【翻译】

    Snuke有一个只包含 'a','b','c' 的字符串S。

    但是他有“回文恐惧症”,他想要改变一下字符串S中一些字母的顺序,使得S中不包含任何一个长度超过(大于)1的回文串。判断这是否可能。
  • 【解析】

    说实话这道题我是自创了一大堆数据然后暴力找的规律……

    也没有什么特别严格的证明(希望dalao们能帮我解释一下为什么下面这个规律是对的),规律就是下面:

字符串中出现最多的字母的次数不能比其他两个字母各自出现的次数大超过1

例:a出现3次,b出现2次,c出现1次,3-2≤1,但是 3-1 > 1 ,所以是不行的

因此先统计一遍a~c出现的次数存入tot[],再对tot[]排序,判断上述规律是否成立。

  • 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
string str;
cin>>str;
int len=str.length(),tot[3]={};
for(int i=0;i<len;i++)
tot[str[i]-'a']++;
sort(tot,tot+3);
if(tot[2]-tot[0]>1 || tot[2]-tot[1]>1) printf("NO\n");
else printf("YES\n");
return 0;
}

◇大暴力◇ C - Time Gap

  • 【Atcoder CF2017 Final C】
  • 【翻译】

    来自世界各地的 N+1 名选手参加了 Code Festifal XXXX ,包括 Takahashi。

    Takahashi 调查并计算出第i名选手所在城市与他自己所在城市的时差_i。时差如下定义:对于城市A和城市B,当A为0点时,B为b点,此时时差为 min(b,24-b)(24小时制)。例如,当 Takahashi 所在城市为0点时,第i名选手所在城市的时间要么是 D_i,要么是 24-D_i。

    记S为 Takahashi 所在城市为0点时,每两个城市间的时差的最小值。

    求出尽可能大的S。
  • 【解析】

    输入后先把 Takahashi 所在城市为0点加上。(至于为什么……看第三组样例)

    然后特判一下٩(๑>◡<๑)۶ :当城市数量超过24个时,也就包含了0~23时所有的时间,且有两个城市时间相同(抽屉原理,共24个整点,当城市数量超过24个时,必有两个城市时间相同)。因此这种情况答案为0。

    对于每个城市有2个时间可取,因为要使最小值最大,所以就不能使两个城市的时间相等。很容易想到搜索大暴力(因为当N+1>24的情况已经特判了,所以N≤24时,时间复杂度就特别低)。

    用bool数组 u[] 记录已经决策过的城市的时间,避免重复!然后每次判断 D_i 在 u[] 中是否存在,不存在就在 u[] 中标记,并进行下一个城市的决策,返回后回溯。同样,对于 24-D_i 也进行此类操作,但是注意当 D_i=12 时 D_i=24-D_i ,会重复,应排除。

    最后统计答案。记得将答案储存变量初始化为0,因为当必然有两个城市时间相同时,无法得到期望的答案,在搜索完毕时并没有对答案进行更新,这就会导致最后输出的答案出问题。但是这种情况答案总是为0,所以将答案变量初始化为0是很聪明的做法。
  • 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 50
int n,t[MAXN+5],ans=0;
bool u[25];
void dfs(int x)
{
if(x==n)
{
int Min=1e8,last=0;
for(int i=1;i<24;i++)
if(u[i])
{
Min=min(Min,i-last);
last=i;
}
Min=min(Min,24-last);
ans=max(ans,Min);
return;
}
if(!u[t[x]])
{u[t[x]]=true;dfs(x+1);u[t[x]]=false;}
if(t[x]!=(24-t[x])%24 && !u[24-t[x]])
{u[24-t[x]]=true;dfs(x+1);u[24-t[x]]=false;}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&t[i]);
t[n++]=0;
if(n>24) {printf("0\n");return 0;}
dfs(0);
printf("%d\n",ans);
return 0;
}

woc 后面不会做了 ( ̄へ ̄)

The End

Thanks for reading!

- Lucky_Glass

【赛时总结】 ◇赛时·IV◇ CODE FESTIVAL 2017 Final的更多相关文章

  1. @atcoder - CODE FESTIVAL 2017 Final - J@ Tree MST

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点,第 i 点有一个点权 Xi,再给定一棵边带权的树 ...

  2. 【AtCoder】CODE FESTIVAL 2017 Final

    A - AKIBA 模拟即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair ...

  3. CODE FESTIVAL 2017 Final题解

    传送门 \(A\) 咕咕 const int N=55; const char to[]={"AKIHABARA"}; char s[N];int n; int main(){ s ...

  4. CODE FESTIVAL 2017 qual B B - Problem Set【水题,stl map】

    CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: ...

  5. CODE FESTIVAL 2017 qual B C - 3 Steps【二分图】

    CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少 ...

  6. [AtCoder Code Festival 2017 QualB D/At3575] 101 to 010 - dp

    [Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 11 ...

  7. CODE FESTIVAL 2017 qual B

    昨晚因为有点事就去忙了,没打后悔啊 A - XXFESTIVAL Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem ...

  8. 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数

    蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...

  9. AtCoder Code Festival 2017 Team Relay J - Indifferent

    题目大意:共$2n$个价格$p_i$.两人轮流取.你每次取最大的,对方每次随机取.问你取的期望和是多少. 题解:从小到大排序,$\sum\limits_{i=0}^{2n-1} \frac{i*p_i ...

随机推荐

  1. 变量&数据类型

    php标记:四种php标记       1.<?php echo 'hello';?>       2.<? echo 'hello'; ?> //短标记       3.&l ...

  2. HDU 2255 ——奔小康赚大钱——————【KM算法裸题】

    奔小康赚大钱 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. 在项目引用里添加上对Microsoft Word 11.0 object library的引用

    private void button1_Click(object sender, System.EventArgs e) { //调用打开文件对话框获取要打开的文件WORD文件,RTF文件,文本文件 ...

  4. <jsp:javabean>动作标签实例

    <jsp:javabean>动作标签实例 之后补齐基础知识 scope属性 该属性指定了所创建Bean实例的存取范围,省略该属性时的值为page.<jsp:useBean>标识 ...

  5. Spring cloud微服务 Hystrix熔断器学习教程

    以下demo代码:https://github.com/wades2/HystrixtDemo 官网定义:Hystrix是一个延迟容错库.在分布式环境中,许多服务依赖项中的一些不可避免地会失败.Hys ...

  6. WinRAR(WinZip)压缩与解压实现(C#版Window平台)

    本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用). 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命 ...

  7. IE浏览器在线更新GitHub客户端

    在IE中输入网址:http://github-windows.s3.amazonaws.com/GitHub.application

  8. CRM的划分

          CRM提供完整的客户生命周期管理解决方案,帮助您管理各项与客户有关的事件,包括市场.销售以及客户支持等方面,优化事件处理流程,从而赢得更多客户,并提高客户满意度.   按企业经营类型划分 ...

  9. Android基础Activity篇——其他隐式Intent

    1.使用隐式Intent调用浏览器 修改FirstActivity中的按钮点击事件代码. Intent intent=new Intent(Intent.ACTION_VIEW); intent.se ...

  10. Prestashop-1.6.1.6-zh_CN (Openlogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: prestashop1.6.1.6 commercial content management ecommerce open-source 简体中文 ...