题意略。

这道题目的出题者竟然被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. Web前端学习(1):上网的过程与网页的本质

    "众里寻他千百度"--但是在信息化时代,我们只需要动动手指百度一下,google一下,便可以在网络上寻得我们想要查找的信息.我们或许都知道要如何在网上获得自己所需信息,但是上网的过 ...

  2. CCF系列之I’m stuck!(201312-5)

    试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', ...

  3. junit4初体验

    OK,现在我们正式开始junit4系列的整理.前面的junit38作为4的补充知道就好了,实际编码中我们以4为主.这里先来一把junit的初体验,同时也让我们来一步一步的了解下TDD的好处. ORM大 ...

  4. 国内不谈java

    今天晚上在整理电脑,不知道怎么回事,电脑里面放着一篇文章.打开一看写的挺好的,现在就贴出来,望共勉.   国内不谈java--会有千万人跳出来和你争嘴的.越是如此,我越是不忍心不说出来,越是不不忍心看 ...

  5. Apache Shiro java安全框架

    什么是Apache Shiro? Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为 ...

  6. join on用法

    内连接和外连接 内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录 内连接 内连接查询返回满足条件的所有记录,默认情况下没有指定任 ...

  7. WMS—启动过程

    基于Android 6.0源码, 分析WMS的启动过程. 一. 概述 Surface:代表画布 WMS: 添加window的过程主要功能是添加Surface,管理所有的Surface布局,以及Z轴排序 ...

  8. NodeJs实现他人项目实例

    1.简单实例,参考 https://github.com/alsotang/node-lessons/tree/master/lesson2 2.express一个新项目 ,但出现警告 发现少了nod ...

  9. TensorFlow-相关 API(学习笔记 )

    1.tf.nn.conv2d conv2d( input, filter, strides, padding, use_cudnn_on_gpu=True, data_format='NHWC', n ...

  10. Java 解压zip压缩包

    因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容. 因此需要先对上传的zip包进行解压.以下直接提供代码供参考: 1.第一个方法是用于解压z ...