题意略。

这道题目的出题者竟然被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的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. Asp.net mvc 中Action 方法的执行(一)

    [toc] 在 Aps.net mvc 应用中对请求的处理最终都是转换为对某个 Controller 中的某个 Action 方法的调用,因此,要对一个请求进行处理,第一步,需要根据请求解析出对应的 ...

  2. zTree中父节点禁用,子节点可以用

    参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...

  3. 修真院java后端工程师学习课程--任务1(day four)

    今天学习的是spring框架,内容主要有: spring的概念,主要是做什么的: Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversio ...

  4. DOS、Mac 和 Unix 文件格式[转]

    DOS.Mac 和 Unix 文件格式 相信很多朋友都碰到过这三种文件格式的互换问题,今日又碰到这个问题,忽然想寻根问底,于是整理了本文档. 文件格式区别   我们先看看这三个家伙有啥区别.很久以前, ...

  5. tone() 和 IRremote 冲突的解决办法

    tone()函数冲突 http://www.geek-workshop.com/thread-4037-1-1.html 可以自制函数newtone() void newtone(byte toneP ...

  6. CentOS如何把deb转为rpm

    说明:可以转换,但不一定可用,可以根据报错提示,安装需要的依赖. 1 安装alien工具,下载地址http://ftp.de.debian.org/debian/pool/main/a/alien/ ...

  7. Linux上常用软件安装和总结

    Linux总结: 以前只顾着撸码,Linux这些一般都是运维玩的,然后也没怎么折腾过,每次上线也都只是发布下,最多也就是启停服务器.最近闲来无事就玩了玩Linux,还挺好的. 这里做一个总结来结束Li ...

  8. CSS--使用方式

    创建CSS有三种方式: 外部样式表, 内部样式表和内联样式. 外部样式表 先建立外部样式表文件(.css),然后在网页文件的<head>内使用<link>链接.这种方式将样式文 ...

  9. UTF8编码

    UTF-8是Unicode的实现方式之一. UTF-8最大的一个特点,就是它是一种变长的编码方式.它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度. UTF-8的编码规则很简单,只有二 ...

  10. 添加FTP用户(vsftpd)

    1.环境:ftp为vsftp. 用户名为test.默认路径为/home/test 2.新建用户(当前是root用户) 运行命令:"useradd -d /home/test test&quo ...