2014-11-1 NOIP模拟赛2
一、题目概览
中文题目名称 |
连连看 |
取数 |
游戏 |
迎接仪式 |
英文题目名称 |
card |
cycle |
game |
welcome |
可执行文件名 |
card |
cycle |
game |
welcome |
输入文件名 |
card.in |
cycle.in |
game.in |
welcome.in |
输出文件名 |
card.out |
cycle.out |
game.out |
welcome.out |
每个测试点时限 |
1秒 |
1秒 |
1秒 |
1秒 |
测试点数目 |
10 |
10 |
10 |
10 |
每个测试点分值 |
10 |
10 |
10 |
10 |
比较方式 |
全文比较 |
全文比较 |
全文比较 |
全文比较 |
题目类型 |
传统 |
传统 |
传统 |
传统 |
二、提交源程序文件名
对于Pascal语言 |
card.pas |
cycle.pas |
game.pas |
welcome.pas |
对于C语言 |
card.c |
cycle.c |
game.c |
welcome.c |
对于C++语言 |
card.cpp |
cycle.cpp |
game.cpp |
welcome.cpp |
三、编译命令(不包含任何优化开关)
对于Pascal语言 |
fpc game.pas |
fpc hide.pas |
fpc sign.pas |
fpc chessman.pas |
对于C语言 |
gcc –o game game.c |
gcc –o hide hide.c |
Gcc –o sign sign.c |
gcc –o chessman chessman.c |
对于C++语言 |
g++-o game game.cpp |
g++-o hide hide.cpp |
g++ -o sign sign.cpp |
g++ -o chessman chessman.cpp |
四、运行内存限制
运行内存上限 |
256M |
256M |
256M |
256M |
注意事项:
1. 文件名(程序名和输入输出文件名)必须使用小写。
2. C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3. 统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
取数(cycle)
时间限制:1S
问题描述
有一个取数的游戏。初始时,给出一个环,环上的每条边上都有一个非负整数。这些整数中至少有一个0。然后,将一枚硬币放在环上的一个节点上。两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下:
(1)选择硬币左边或者右边的一条边,并且边上的数非0;
(2)将这条边上的数减至任意一个非负整数(至少要有所减小);
(3)将硬币移至边的另一端。
如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了。
如下图,描述的是Alice和Bob两人的对弈过程,其中黑色节点表示硬币所在节点。结果图(d)中,轮到Bob走时,硬币两边的边上都是0,所以Alcie获胜。
(a)Alice (b)Bob (c)Alice (d)Bob
现在,你的任务就是根据给出的环、边上的数值以及起点(硬币所在位置),判断先走方是否有必胜的策略。
【输入格式】
第一行一个整数N(N≤20),表示环上的节点数。
第二行N个数,数值不超过30,依次表示N条边上的数值。硬币的起始位置在第一条边与最后一条边之间的节点上。
【输出格式】
仅一行。若存在必胜策略,则输出“YES”,否则输出“NO”。
【样例】
cycle.in cycle.out
4 YES
2 5 3 0
cycle.in cycle.out
3 NO
0 0 0
最后取到数的人获胜
/*
本题由于至少存在一个0,所以其实就是考虑一条链的情况
然后可以得出一个显然的结论,如果取一条边,那么一定要将它的权变为0,然后按链长的奇偶得出答案即可
*/
#include<iostream>
#include<cstdio>
using namespace std;
int a[],n;
int main(){
freopen("cycle.in","r",stdin);
freopen("cycle.out","w",stdout);
scanf("%d",&n);
for(int i=,j=n+;i<=n;i++,j++)scanf("%d",&a[i]),a[j]=a[i];
int l=n,r=n+;
if(a[n]==)l=n+;
if(a[n+]==)r=n;
if(l>r){
printf("NO");
return ;
}
while(a[r+])r++;
while(a[l-])l--;
if((n-l+)%==&&(r-n)%==){
printf("NO");
return ;
}
else printf("YES");
return ;
}
100分
游戏(game)
问题描述
windy学会了一种游戏。
对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。
最开始windy把数字按顺序1,2,3,……,N写一排在纸上。
然后再在这一排下面写上它们对应的数字。
然后又在新的一排下面写上它们对应的数字。
如此反复,直到序列再次变为1,2,3,……,N。
如:
1 2 3 4 5
6
对应的关系为
1->2
2->3 3->1 4->5 5->4 6->6
windy的操作如下
1 2 3 4 5 6
2 3 1 5 4 6
3 1 2 4 5 6
1 2 3 5 4 6
2 3 1 4 5 6
3 1 2 5 4 6
1 2 3 4 5 6
这时,我们就有若干排1到N的排列,上例中有7排。
现在windy想知道,对于所有可能的对应关系,有多少种可能的排数。
输入
输入文件game.in包含一个整数,N。
输出
输出文件game.out包含一个整数,可能的排数。
样例输入
【输入样例一】
3
【输入样例二】
10
样例输出
【输出样例一】
3
【输出样例二】
16
数据规模和约定
30%的数据,满足 1 <= N <=
10 。
100%的数据,满足 1 <= N <=
1000 。 、
迎接仪式(welcome)
【问题描述】
LHX教主要来X市指导OI学习工作了。为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字。一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的大字,但是领队突然发现,另一旁穿着“教”和“主”字文化衫的Orzer却不太和谐。
为了简单描述这个不和谐的队列,我们用“j”替代“教”,“z”替代“主”。而一个“j”与“z”组成的序列则可以描述当前的队列。为了让教主看得尽量舒服,你必须调整队列,使得“jz”子串尽量多。每次调整你可以交换任意位置上的两个人,也就是序列中任意位置上的两个字母。而因为教主马上就来了,时间仅够最多作K次调整(当然可以调整不满K次),所以这个问题交给了你。
【输入格式】
输入文件welcome.in的第1行包含2个正整数N与K,表示了序列长度与最多交换次数。
第2行包含了一个长度为N的字符串,字符串仅由字母“j”与字母“z”组成,描述了这个序列。
【输出格式】
输出文件welcome.out仅包括一个非负整数,为调整最多K次后最后最多能出现多少个“jz”子串。
【样例输入】
5 2
zzzjj
【样例输出】
2
【样例说明】
第1次交换位置1上的z和位置4上的j,变为jzzzj;
第2次交换位置4上的z和位置5上的j,变为jzzjz。
最后的串有2个“jz”子串。
【数据规模】
对于10%的数据,有N≤10;
对于30%的数据,有K≤10;
对于40%的数据,有N≤50;
对于100%的数据,有N≤500,K≤100
/*
dp[i][j][k]表示至第i位为止调换了j个‘j’和k个‘z’所得到的‘jz’串的最大个数, 每次只考虑s[i]和s[i-1]即可,只有'jz''jj''zz''zj'四种情况
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int dp[][][],n,m,ans;
char s[];
int main(){
freopen("welcome.in","r",stdin);
freopen("welcome.out","w",stdout);
scanf("%d%d",&n,&m);
scanf("%s",s+);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
dp[i][j][k]=-0x7fffffff;
dp[][][]=dp[][][]=;
if (s[]=='j')dp[][][]=;
else dp[][][]=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
for(int k=;k<=m;k++){
dp[i][j][k]=dp[i-][j][k];
if(s[i-]=='j'&&s[i]=='z')dp[i][j][k]=max(dp[i][j][k],dp[i-][j][k]+);
if(s[i-]=='j'&&s[i]=='j'&&j)dp[i][j][k]=max(dp[i][j][k],dp[i-][j-][k]+);
if(s[i-]=='z'&&s[i]=='z'&&k)dp[i][j][k]=max(dp[i][j][k],dp[i-][j][k-]+);
if(s[i-]=='z'&&s[i]=='j'&&j&&k)dp[i][j][k]=max(dp[i][j][k],dp[i-][j-][k-]+);
if(j==k)ans=max(ans,dp[i][j][k]);
}
}
}
printf("%d",ans);
}
100分 线性dp
连连看(card)
【问题描述】
有时大型游戏玩腻味了,小Z也会玩玩弱智级的小游戏,比如连连看。但小Z眼力不行,常常得分很低。于是,他找到了你,希望你能帮他找出一种获胜方案。
连连看的游戏规则很简单:玩家可以将 2 个相同图案的牌连接起来,连接线不多于 3 条线段,就可以成功将两个牌消除。将游戏界面上的牌全部消除掉,玩家就胜利了。
【输入】
输入文件card.in的第一行为两个正整数m和n,表示连连看游戏的矩阵大小。
接下来的m行,每行n个英文大写字母(为了计算方便,只用A~E五个字母),表示牌的种类,相同字母表示同种牌。
【输出】
输出文件card.out。
若能获胜,则输出共一行,包括m×n/2个英文大写字母,第i个字母表示第i次消除的牌的种类。若有多解,输出字典顺序最小的解。
若不能获胜,则输出共一行,包括字符串“Game over.”。
【输入输出样例1】
card.in |
card.out |
2 1 A A |
A |
【输入输出样例2】
Card.in |
card.out |
2 1 A B |
Game over. |
【限制】
100%的数据满足:m×n<=12
2014-11-1 NOIP模拟赛2的更多相关文章
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- NOIP模拟赛-2018.11.5
NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
随机推荐
- (转)php 根据url自动生成缩略图并处理高并发问题
分享是一种精神,与技术高低无关! 图片缩略图动态生成- [代码编程] 2011-08-23 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.c ...
- COPY SAP 标准gui状态
[转]如何COPY SAP标准gui状态 1.可以自己建立 2.找到合适的ALV程序,然后找到合适的 gui_statu,进行copy. 但是这个是系统有过自定义开发会方便很多,如果没有,那要找标准程 ...
- MV45AOZZ 销售订单增强点
[转自 http://blog.csdn.net/zhongguomao/article/details/6712580]choose the table VBAP or VBAK ( dependi ...
- API的理解和使用——全局命令
全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...
- android MVP模式思考
在软件开发设计中,有多种软件设计模式,如web开发中经典的MVC, 将后台分为三层:Model层,View层和Controller层,其中,Model主要是数据处理,如数据库,文件,或网络数据等:Vi ...
- python中的编码转换
今天遇到了一个问题,将字符串“\uxxxx\uxxxx”转换成汉字.网上查了很多资料都不行. 后来看到,发现一个函数就OK了. str = str.decode('unicode_escape') 等 ...
- BZOJ 1198 [HNOI2006]军机调度:dfs
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1198 题意: 有n个雇佣军,m个任务. 第i个雇佣军能够参加cnt个任务,分别为temp[ ...
- 【thrift】vc中使用thrift中文字符串乱码问题解决
问题描述: VC中使用Apache thrift时,如果字符串中包含中文,会出现乱码问题,这个问题的原因是由于thrift为了达到跨语言交互而使用了UTF-8格式发送字符串,这点对java或者C#不会 ...
- C++ string的查找函数和npos特殊值
STL中的string有6个查找函数: 1.find() 2.rfind() 从最后一个字符开始往前找. 3.find_first_of() 4.find_not_first_of() 5.find_ ...
- Python3解leetcode Same Tree
问题描述: Given two binary trees, write a function to check if they are the same or not. Two binary tree ...