题目名称

日历游戏

最大公约数

密码

英文代号

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. C# 窗体间传值方法大汇总(转)

    第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public strin ...

  2. python自动开发之(django)第十九天

    一.路由系统,URL 1.函数及类 函数:url(r'^index/', views.index), 类:url(r'^home/', views.Home.as_view()), 2.顺序 url( ...

  3. 如何让同一个字段在不同的view中显示不同的内容

    many2one 字段默认显示 对象的name字段, 但也可以定义name_get方法显示不同的内容 如res.partner 对象可以根据 context 内容是否显示 客户的地址,职位,email ...

  4. QLineEdit

    The QLineEdit widget is a one-line text editor. Header: #include <QLineEdit> qmake: QT += widg ...

  5. 应用SecureCRT(发送接收文件)

    使用 SecureCRT 和 cz. sz,可以从 Linux 服务器上下载/上传文件. Linux 上要安装 lszrz 包 (1)编译安装root 账号登陆后,依次执行以下命令 cd /tmp w ...

  6. DB2中的系统表SYSIBM.SYSDUMMY1

    ORACLE中有一张系统数据库表DUAL用来访问系统的相关信息 SELECT SYSDATE FROM DUAL;  --返回当前系统日期 ------------------------------ ...

  7. COJ 0970 WZJ的数据结构(负三十)树分治

    WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...

  8. Android实现OCR扫描识别数字图片之图片扫描识别

    [Android实例] Android实现OCR扫描识别数字图片之图片扫描识别 Android可以识别和扫描二维码,但是识别字符串呢? google提供了以下解决方案用的是原来HP的相关资料. 可以吧 ...

  9. [Sequence Alignment Methods] Cross-Recurrent Plot (CRP)

    A recurrence plot (RP) is a straightforward way to visualize characteristics of similar system state ...

  10. hdu 4607 Park Visit (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先如果k小于等于直径长度,那么答案为k−1.如果k大于直径长度,设直径长度为r,那么答案为r− ...