CodeForces 820C
题意略。
这道题目的出题者竟然被hack了!?
我的思路是:在游戏开始时,为了尽量少地用字母,我应该尽量选取计算机输出的前a个字母中已经使用过的字母。但是为了使电脑也尽量少用字母,我添加的这b个字母应该是一样的,
这样我才能给电脑留出更多的使用已经出现过的字母的空间。
假设现在计算机已经走完了它的一步,现在轮到我了,现在字符串总长度为i。
当a > b时,我添加字母的范围是[i - (a - b) + 1,i]这(a - b)个字母(连续添加b个一样的),这样可以发现出现了长度为2 * (a + b)的循环节,我们把这(a - b)种循环节构造出来,储存在数组中。
当a > b时,我只用添加b个str[i]这个字符就行了。这样它的循环节也是2 * (a + b)的。
详见代码:
#include<bits/stdc++.h>
#define maxn 100
using namespace std; char str[][maxn];
int visit[maxn];
int len,tot,kind,a,b,l,r; void prepare(){
tot = (a <= b ? a + : * a - b);
len = ((a + b)<<);
if(b >= a){
kind = ;
for(int i = ;i <= a;++i) str[][i] = 'a' + i - ;
for(int i = a + ;i <= a + b;++i) str[][i] = str[][a];
for(int i = a + b;i > b;--i) visit[str[][i] - 'a'] = ;
for(int i = a + b + ,j = ;i <= * a + b;++i){
while(visit[j]) ++j;
str[][i] = 'a' + j;
visit[j] = ;
}
for(int i = a + b + a + ;i <= a + b + a + b;++i)
str[][i] = str[][a + b + a];
for(int i = * (a + b) + ;i <= * (a + b);++i)
str[][i] = str[][i - * (a + b)];
str[][ * (a + b) + ] = '\0';
}
else{
kind = a - b;
for(int k = ;k <= a - b;++k){
memset(visit,,sizeof(visit));
for(int i = ;i <= a;++i) str[k][i] = 'a' + i - ;
for(int i = a + ;i <= a + b;++i) str[k][i] = str[k][k + b];
for(int i = a + b;i > b;--i) visit[str[k][i] - 'a'] = ;
for(int i = a + b + ,j = ;i <= * a + b;++i){
while(visit[j]) ++j;
str[k][i] = 'a' + j;
visit[j] = ;
}
for(int i = a + b + a + ;i <= a + b + a + b;++i)
str[k][i] = str[k][a + b + a];
for(int i = * (a + b) + ;i <= * (a + b);++i)
str[k][i] = str[k][i - * (a + b)];
str[k][ * (a + b) + ] = '\0';
}
}
} int main(){
scanf("%d%d%d%d",&a,&b,&l,&r);
prepare();
if(r - l >= len) printf("%d\n",tot);
else{
r = (r - ) % len + ;
l = (l - ) % len + ;
if(r < l) r += len;
int ans = maxn;
memset(visit,,sizeof(visit));
for(int k = ;k <= kind;++k){
int temp = ;
memset(visit,,sizeof(visit));
for(int i = l;i <= r;++i){
if(visit[str[k][i] - 'a'] == ){
++temp;
visit[str[k][i] - 'a'] = ;
}
}
ans = min(temp,ans);
}
printf("%d\n",ans);
}
return ;
}
CodeForces 820C的更多相关文章
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
- CodeForces - 148D Bag of mice
http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...
随机推荐
- web组件开发入门
本文是学习慕课网阿当大话西游之WEB组件后的一个总结. 组件的分类 1 框架组件:依赖于某种框架的组件 2 定制组件:根据公司业务定制的组件 3 独立组件:不依赖框架的组件 定义和加载组件 解决css ...
- 【开发技术】json
json(JavaScript Object Notation) JavaScript对象符号是一种结构化轻量级的数据传输格式,很多场合替代XML文件格式 JSON格式化校验:http://www.b ...
- mysql 性能优化常见命令
mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show ful ...
- 记录linux tty的一次软锁排查
本过程参照了某大侠的https://github.com/w-simon/debug/blob/master/tty_lock_cause_sytemd_hung , 当第二次出现的时候,还是排查了一 ...
- sass和compass实战 读书笔记(一)
sass优势: 不做重复的工作 一 消除样式表冗余(通过变量赋值的方式) 1. 通过变量来复用属性值 2. 使用嵌套来快速写出多层级的选择器 3. 通过混合器来复用一段样式 4. 使用选择器继承来避 ...
- Linux指令--nl
原文出处:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件 ...
- mysql数据库安装注意事项:
mysql数据库安装注意事项: https://jingyan.baidu.com/article/642c9d34aa809a644a46f717.html(安装教程) 注意语言设置为gbk可以解决 ...
- 获取android手机屏幕的宽高、density
public static String getDisplayMetrics(Context cx) { String str = ""; DisplayMetrics dm = ...
- RadioButton与监听
public class MainActivity extends Activity implements OnCheckedChangeListener { <RadioGroup andro ...
- zabbix监控的基础概念、工作原理及架构
一.什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题.是一个基于WE ...