题目名称

日历游戏

最大公约数

密码

英文代号

calendar

gcd

pasuwado

输入文件名

calendar.in

gcd.in

pasuwado.in

输出文件名

calendar.out

gcd.out

pasuwado.out

时限

1秒

1秒

1秒

空间限制

128M

256M

256M

测试点数目

20

10

10

测试点分值

5

10

10

是否有部分分

附加文件

题目类型

传统

传统

传统

是否有SPJ

注意:最终测试时,所有编译命令均不打开任何优化开关。

请独立完成题目,不要讨论,不得使用搜索引擎。

 

 


  1. 1.     日历游戏

【问题描述】

moreD和moreD的宠物CD正在玩一个日历游戏,开始时,他们从1900年1月1日到2012年12月22日(你懂的……)选一个日期开始,依次按照如下规则之一向后跳日期:

  1. 跳到日历上的下一天。
  2. 跳到日历上的下个月的同一天(如果不存在,则不能这么做)。

要是谁正好到达2012年12月22日那么他就赢了,如果到达这天之后的日期那他就输了——原因你也懂的。

每次都是moreD先走的。

现在,给你一个日期,请问moreD一定能赢吗?

【输入】

输入共T行,每行三个整数,Y、M、D,分别表示年、月、日。日期在1900年1月1日到2012年12月22日之间(包含两端)。

T并不在输入数据当中。

【输出】

要是moreD一定能赢,输出一行YES,否则输出NO。

【输入输出样例一】

calendar.in

calendar.out

2012 12 20

NO

1956 3 26

【输入输出样例二】

calendar.in

calendar.out

2012 12 21

YES

 

【数据描述】

对于50%的数据,是1949年1月1日后的日期。 T <= 5

对于100%的数据,是1900年1月1日后的日期。T <= 10

/*
一看题目是博弈就懵了....
其实可以转化成好理解的
每个状态获胜的条件是后面的某一个状态不合法
而失败则是后面的每个状态都合法
然后搜一下就好了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,f[][][];
int M[]={,,,,,,,,,,,,};
int Judge(int x){
return x%==||(x%==&&x%);
}
void Get1(int &a,int &b,int &c){
int sum=M[b];
if(b==)sum+=Judge(a);
if(c>sum){
c=;b++;
}
if(b>){
b=;a++;
}
}
void Get2(int &a,int &b,int &c){
if(b>){
b=;a++;
}
int sum=M[b];
if(b==)sum+=Judge(a);
if(c>sum){
a=;return;
}
}
int Canot(int a,int b,int c){
if(a==&&b==&&c>)return ;
if(a>)return ;
return ;
}
int Dfs(int a,int b,int c){
if(a==&&b==&&c==)return f[a][b][c]=;
if(f[a][b][c]!=-)return f[a][b][c];
if(Canot(a,b,c))return f[a][b][c]=;
int x,y,z;
x=a,y=b,z=c;
z++;Get1(x,y,z);
if(!Dfs(x,y,z))return f[a][b][c]=;
x=a,y=b,z=c;
y++;Get2(x,y,z);
if(!Dfs(x,y,z))return f[a][b][c]=;
return f[a][b][c]=;
}
int main()
{
freopen("calendar.in","r",stdin);
freopen("calendar.out","w",stdout);
int a,b,c;
memset(f,-,sizeof(f));
while(~scanf("%d%d%d",&a,&b,&c)){
if(Dfs(a,b,c))printf("YES\n");
else printf("NO\n");
}
return ;
}

2.最大公约数

【问题描述】

话说CD比较欠扁,他表示在课室的日子没有教主在旁边打他的日子太寂寞了,所以这一晚,他终于来到了电脑室被打。由于CD是大家的宠物,于是大家都来打CD了。电脑室里有n个人,第i个人希望打CD ai下。但是太多人打CD,他又会不爽,于是他规定只能有K个人打到他,并且为了公平起见,最终K个人打他的次数都必须是相同的,CD规定这个次数就是这K个人希望打他的次数的最大公约数。为什么是最大公约数呢?因为他觉得被打的次数是GCD的话他才会变成Glad CD。之前说了,CD比较欠扁,于是CD希望,K个人打他的次数的和最大。你能告诉他他最后总共会被打多少下么?

【输入格式】

第一行两个正整数n,k。

第二行n个正整数,表示每个人希望打CD多少下。

【输出格式】

输出一个正整数表示CD会被打多少下。

【样例输入输出】

gcd.in

gcd.out

3 1

1 2 3

3

【数据说明】

对于30%的数据,保证k≤n≤20。

对于50%的数据,保证输入中所有数小于5000。

对于100%的数据,保证输入中所有数小于500000,k≤n。

暴力30:

/*
简单的做法没想到....
暴力n*n*ndp
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 5210
using namespace std;
int n,m,a[maxn],f[maxn][maxn],ans;
int Gcd(int x,int y){
return !y?x:Gcd(y,x%y);
}
int main()
{
freopen("gcd.in","r",stdin);
freopen("gcd.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n);
for(int i=;i<=n;i++)
for(int j=;j<=i;j++){
for(int k=j-;k<i;k++)
f[i][j]=max(f[i][j],Gcd(f[k][j-],a[i]));
if(j==m)ans=max(ans,f[i][j]);
}
printf("%d\n",ans*m);
return ;
}

正解nlnn:

/*
正解直接枚举答案
然后扫一遍这个的倍数有几个
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 500010
#define ll long long
using namespace std;
int n,m,x,c[maxn],ans;
int init(){
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
int main()
{
freopen("gcd.in","r",stdin);
freopen("gcd.out","w",stdout);
n=init();m=init();
for(int i=;i<=n;i++){
x=init();
c[x]++;
}
for(int i=;i>=;i--){
int s=;
for(int j=i;j<=;j+=i)
s+=c[j];
if(s>=m){
ans=i;break;
}
}
cout<<(ll)ans*m;
return ;
}

3.密码

【问题描述】

哪里有压迫,哪里就有反抗。

moreD的宠物在法庭的帮助下终于反抗了。作为一只聪明的宠物,他打算把魔法使moreD的魔法书盗去,夺取moreD的魔法能力。但moreD怎么会让自己的魔法书轻易地被盗取?moreD在魔法书上设置了一个密码锁,密码锁上有一个问题。

施以斯卧铺魔法吧,你有M次机会,如此将得完美密码。

然后是一串小写字母串。

moreD的宠物斯卧铺魔法就是施法时的字符串其中相邻两位交换。

而moreD对于完美密码的定义自然是最小字典序了。

请帮助moreD的宠物,想出密码吧。

【输入格式】

第一行一个整数M,表示操作次数。

第二行一串小写字母组成的字符串S,如题目所示。

【输出格式】

输出完美密码。

【输入样例】

3

dcba

【输出样例】

adcb

【数据范围】

对于30%的数据|S|≤10

对于60%的数据|S|≤3,000

对于100%的数据8≤|S|≤100,000 M≤(|S|-8)^2+2

【后记】

宠物最终战胜了moreD,和自己的宠物快乐地生活着。

【样例解释】

先对第3,4两位施法,字符串变成dcab,然后对第2,3两位施法,字符串变成dacb,最后对第1,2两位施法,字符串变成adcb。

/*
贪心 枚举每个位置最小的字母 如果步数还够 就过来
不够的话就放过
暴力的话n*n 用数据结构优化
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
#define ll long long
using namespace std;
ll n,len,fir[],nex[maxn],t[maxn];
char s[maxn];
void Add(ll pos,ll data){
while(pos<len){
t[pos]+=data;
pos+=pos&(-pos);
}
}
ll find(ll pos){
ll r=;
while(pos){
r+=t[pos];
pos-=pos&(-pos);
}
return r;
}
int main()
{
freopen("pasuwado.in","r",stdin);
freopen("pasuwado.out","w",stdout);
scanf("%lld%s",&n,s+);
len=strlen(s+);
for(int i=;i<=len;i++)Add(i,);
for(int i=len;i>=;i--){
nex[i]=fir[s[i]-'a'+];
fir[s[i]-'a'+]=i;
}
for(int i=;i<=len;i++){
for(int j=;j<=;j++){
ll pos=fir[j];
if(pos==)continue;
ll sum=find(pos-);
if(n>=sum){
n-=sum;
Add(pos,-);
printf("%c",j+'a'-);
fir[j]=nex[pos];
break;
}
}
}
return ;
}

9.7noip模拟试题的更多相关文章

  1. 模拟试题C

    模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...

  2. 模拟试题B

    模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...

  3. 模拟试题A

    模拟试题A 一.单项选择题(2′*12=24′) 1.下面各种坐标变换中,会产生变换前后维度的改变的是( ) A)建模变换 B)观察变换 C)投影变换 D)视口变换 2.下列描述深度缓冲消隐算法的特点 ...

  4. CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案

    前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐, ...

  5. 11.9 noip模拟试题

    NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...

  6. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

  7. 9.29noip模拟试题

    环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...

  8. 9.20 noip模拟试题

      Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...

  9. 9.16noip模拟试题

    题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重).早苗的 ...

随机推荐

  1. JS 获取各个宽度和高度

    IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...

  2. readline函数分析

    函数功能:提示用户输入命令,并读取命令/****************************************************************************/ /* ...

  3. 45 Useful JavaScript Tips, Tricks and Best Practices(有用的JavaScript技巧,技巧和最佳实践)

    As you know, JavaScript is the number one programming language in the world, the language of the web ...

  4. 开始LXC,DOCKER,VAGRANT,COREOS之旅

    很有兴趣哟. 有人说会重构互联基质,可能言重. 但,无疑在未来几年内,DOCKER和COREOS这样的更新布置模式会流行.

  5. splay模板

    点操作: splay树可以一个一个的插入结点,这样的splay树是有序树,结点权值大于左儿子小于右儿子 这样就是点操作 区间操作: 还有就是可以自己建树,这样的splay树就不是按权值的有序树,它不满 ...

  6. UVA-10735 - Euler Circuit(混合欧拉回路输出)

    题意:给你一个图,有N个点,M条边,这M条边有的是单向的,有的是双向的. 问你能否找出一条欧拉回路,使得每条边都只经过一次! 分析: 下面转自别人的题解: 把该图的无向边随便定向,然后计算每个点的入度 ...

  7. 数学(矩阵乘法):HDU 4565 So Easy!

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. select的使用(二)

    多表查询 /*基本连接*/ select a.Name,b.Name from T_Employee a,T_Department b where a.DepartmentId=b.Id /*内连接, ...

  9. [转]stringstream的用法

    使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中, ...

  10. C基本语句测试