一、题目概览

中文题目名称

连连看

取数

游戏

迎接仪式

英文题目名称

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的更多相关文章

  1. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  2. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

  3. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  4. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  5. NOIP模拟赛-2018.11.5

    NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...

  6. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  9. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  10. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

随机推荐

  1. (转)php 根据url自动生成缩略图并处理高并发问题

    分享是一种精神,与技术高低无关!   图片缩略图动态生成- [代码编程] 2011-08-23 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.c ...

  2. COPY SAP 标准gui状态

    [转]如何COPY SAP标准gui状态 1.可以自己建立 2.找到合适的ALV程序,然后找到合适的 gui_statu,进行copy. 但是这个是系统有过自定义开发会方便很多,如果没有,那要找标准程 ...

  3. MV45AOZZ 销售订单增强点

    [转自 http://blog.csdn.net/zhongguomao/article/details/6712580]choose the table VBAP or VBAK ( dependi ...

  4. API的理解和使用——全局命令

    全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...

  5. android MVP模式思考

    在软件开发设计中,有多种软件设计模式,如web开发中经典的MVC, 将后台分为三层:Model层,View层和Controller层,其中,Model主要是数据处理,如数据库,文件,或网络数据等:Vi ...

  6. python中的编码转换

    今天遇到了一个问题,将字符串“\uxxxx\uxxxx”转换成汉字.网上查了很多资料都不行. 后来看到,发现一个函数就OK了. str = str.decode('unicode_escape') 等 ...

  7. BZOJ 1198 [HNOI2006]军机调度:dfs

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1198 题意: 有n个雇佣军,m个任务. 第i个雇佣军能够参加cnt个任务,分别为temp[ ...

  8. 【thrift】vc中使用thrift中文字符串乱码问题解决

    问题描述: VC中使用Apache thrift时,如果字符串中包含中文,会出现乱码问题,这个问题的原因是由于thrift为了达到跨语言交互而使用了UTF-8格式发送字符串,这点对java或者C#不会 ...

  9. C++ string的查找函数和npos特殊值

    STL中的string有6个查找函数: 1.find() 2.rfind() 从最后一个字符开始往前找. 3.find_first_of() 4.find_not_first_of() 5.find_ ...

  10. Python3解leetcode Same Tree

    问题描述: Given two binary trees, write a function to check if they are the same or not. Two binary tree ...