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只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...
随机推荐
- IOS开发之纯代码界面--基本控件使用篇 ┊
http://www.cocoachina.com/bbs/read.php?tid=131516
- mysql主从同步(4)-Slave延迟状态监控
mysql主从同步(4)-Slave延迟状态监控 转自:http://www.cnblogs.com/kevingrace/p/5685511.html 之前部署了mysql主从同步环境(Mysql ...
- video.js不能控制本地视频或者音频播放时长
问题: 把视频放到本地,然后对视频进行测试,想要控制视频或者音频的播放时长,没办法做到,每次拉动进度条,都会使得本地视频重新播放 原因: 所有浏览器默认js无法访问本地地址,也就是说js不能对本地文件 ...
- JavaScript小结
语法小结 /** * Created by M.C on 2017/5/26. */ /*弹框*/ //var message = "Hello world"; //alert(m ...
- 重温吕鑫MFC教学视频(一)
重温吕鑫MFC教学视频(一)1. picture控件的使用,可以显示icon和bitmap2. WM_Create窗口的创建3. 创建的销毁消息及区别WM_SYSCOMMAND WM_CLOSE WM ...
- 华人开创NTP网络授时服务器成功投运世界级超大工程港珠澳大桥
华人开创NTP网络授时服务器成功投运世界级超大工程港珠澳大桥 本文由北京华人开创公司提供请勿转载 2017年12月中旬,我华人开创生产研发的NTP网络授时服务器成功投运世界级超大工程港珠澳大桥,为这个 ...
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
Java8内存模型—永久代(PermGen)和元空间(Metaspace) 查看原文点击传送门:http://www.cnblogs.com/paddix/p/5309550.html 提示:本文做了 ...
- strstr()与find()
- Mysql之左连接右连接内连接——示例 (转)
下面是两张表 表stu 表tech 1.右连接 当使用右连接语句查询时,返回结果如下: 1 SELECT stu.id,stu.name,stu.classe_name,tech.id,tech.na ...
- Bom部分
Bom部分 browser object model(浏览器对象模型)将浏览器中的各个组件封装成对象,我们可以使用这些对象来操作浏览器的一些动作.封装的规则基于ECMAScriptBom的组成--— ...