NOIP 2017 全假模拟冲刺

                                              hkd

题目名称

Spfa

走楼梯缩小版

滑稽

题目类型

传统

传统

传统

可执行文件名

spfa

small

huaji

输入文件名

spfa.in

small.in

huaji.in

输出文件名

spfa.out

small.out

huaji.out

每个测试点时限

1.0s

0.2s

1.5s

内存限制

256 MB

128 MB

128 MB

测试点数目

10

20

50

每个测试点分值

10

5

2

注意事项

  1. 文件名(输入和输出文件名) 必须是英文小写。
  2. 若无说明,对比方式均为忽略行末空格及文末回车的全文比较。
  3. C/C++中函数main()的返回值必须是int,程序正常结束的返回值必须是0。
  4. 评测环境为cena  注意:windows下long long输入输出请使用 %I64d。
  5. 编译时不打开任何优化选项。

6.不用把题目粘到txt里面,题目里没有题解。

另:题目难度与题目顺序无关!

T1 Spfa

题目描述

B 国在耗资百亿元之后终于研究出了新式武器——连环阵(Zenith Protected Linked Hybrid Zone)。传说中,连环阵是一种永不停滞的自发性智能武器。但经过 A 国间谍的侦察发现,连环阵其实是由 M 个编号为 1,2,…,M 的独立武器组成的。最初,1号武器发挥着攻击作用,其他武器都处在无敌自卫状态。以后,一旦第 i(1<=i< M)号武器被消灭,1 秒种以后第 i+1 号武器就自动从无敌自卫状态变成攻击状态。当第 M 号武器被消灭以后,这个造价昂贵的连环阵就被摧毁了。

为了彻底打击 B 国科学家,A 国军事部长打算用最廉价的武器——炸弹来消灭连环阵。经过长时间的精密探测,A 国科学家们掌握了连环阵中 M 个武器的平面坐标,然后确定了 n 个炸弹的平面坐标并且安放了炸弹。每个炸弹持续爆炸时间为 5 分钟。在引爆时间内,每枚炸弹都可以在瞬间消灭离它平面距离不超过 k 的、处在攻击状态的 B 国武器。和连环阵类似,最初 a1 号炸弹持续引爆 5 分钟时间,然后 a2 号炸弹持续引爆 5 分钟时间,接着 a3 号炸弹引爆……以此类推,直到连环阵被摧毁。

显然,不同的序列 a1、a2、a3...消灭连环阵的效果也不同。好的序列可以在仅使用较少炸弹的情况下就将连环阵摧毁;坏的序列可能在使用完所有炸弹后仍无法将连环阵摧毁。现在,请你决定一个最优序列 a1、a2、a3…使得在第 ax 号炸弹引爆的时间内连环阵被摧毁。这里的 x 应当尽量小。

输入格式:

第一行包含两个整数:n 和 m

输出格式:

一行包含一个整数 x,表示斐波那契数列的第 n 项和第 m 项的最大公约数对1000000007取模后的结果。

样例输入:

4 7

样例输出:

1

对于20%的数据 1<=n,m<=2000000

对于50%的数据 1<=n,m<=200000000

对于100%的数据 1<=n,m<=10^18

/*
矩阵乘法
注意斐波那契数列性质
gcd(f[n],f[m])==f(gcd(n,m));
*/
#include<cstdio>
#include<cstring> #define ll long long
#define mod 1000000007 using namespace std;
ll t[][],ans[][],r[][]; ll gcd(ll a,ll b)
{
return !b?a:gcd(b,a%b);
} void mul(ll a[][],ll b[][])
{
memset(r,,sizeof(r));
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
r[i][j]+=a[i][k]*b[k][j],r[i][j]%=mod;
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=r[i][j];
} int main()
{
freopen("spfa.in","r",stdin);
freopen("spfa.out","w",stdout);
ll a,b;
scanf("%I64d%I64d",&a,&b);
ll p=gcd(a,b);
t[][]=t[][]=t[][]=;;
ans[][]=ans[][]=;
if(p==||p==) {printf("");return ;}
p-=;
while(p)
{
if(p&) mul(ans,t);
mul(t,t); p>>=;
}
printf("%I64d",ans[][]);
}

T2 楼梯缩小版

每一个阳光明媚的午后,xxy 总是欢快地在楼梯上跳来跳去,两具 hkd 的尸体躺在楼梯下面,却影响不了 xxy 继续跳楼梯的想法。每次想到这个画面,xxy 总是激动地双手猛拍轮椅,仿佛要站起来一样。

由于xxy拍轮椅太过用力,所以xxy的轮椅被拍烂了,xxy掉到地上摔成了n个小的xxy,xxy们惊喜的发现楼梯刚好有n个台阶,但是xxy们在每个xxy楼梯的高度上产生了纠纷,xxy们的智慧是不一定相同的,她们认为自己上方的台阶上的xxy不能不如自己聪明,但由于xxy摔倒的时候是没有规律的,所以小的xxy们初始的位置是不一定满足他们的要求的,所以每个xxy可以送给前方与她相邻的xxy1点的智慧而交换位置。

现在给出xxy们初始的智慧,求能否通过交换来满足xxy们的要求。

如果满足,请输出“Happy”,否则输出“Sad”,并输出捶死几个小xxy可以满足xxy们的要求。

输入格式:

一个整数T,表示有T组数据。(T<=10)。

第一行包含一个整数:n(1<=n<=2*10^5)

第二行包括n个整数,第i个数表示第i个xxy的智慧。

后一个xxy排在前一个xxy的前面

输出格式

一行包含一字符串 “Happy”,或“Sad”。

如果第一行输出“Sad”,第二行一个整数,表示捶死几个小xxy可以满足xxy们的要求。

样例输入:

1

2

9 8

样例输出:

Sad

1

样例解释

不管怎么交换总是满足不了xxy们要求,而只要随便捶死一个xxy就可以满足要求。

 

 

/*
可以发现a[i]+i==a[j]+j时,i,j等价 要打死一个
所以将a[i]+i记录后
先排序再去重 就能得出答案
*/
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int a[],n,t;
int main()
{
freopen("small.in","r",stdin);
freopen("small.out","w",stdout);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%d",&a[i]),a[i]+=i;
sort(a,a+n);
int t=unique(a,a+n)-a;
if(t==n){printf("Happy");}
else printf("Sad\n"),printf("%d",n-t);
}
}

T3 huaji.jpg

滑稽们在愉快地做游戏,xxy身为在跳楼梯这一极限运动领域已经登峰造极的人来说,跳楼梯已经满足不了她了,她想对滑稽们搞些大新闻。

她用比香港记者跑得还快的速度来到了滑稽树下,对着滑稽们大喊:“整个城乡结合部敢对我用这个表情的人不超过三个。”滑稽们感到很气恼,但良好的素养让他们决定不和xxy这个粗鲁的人一般计较,xxy接着喊;“南方好还是北方好?”。滑稽们再也忍不住了,决定用跳舞的方式来计算出给她来几分钟的禁言套餐。

滑稽们有三种跳舞的方式,分别是5,五和⑤。每次5可以储存一部分的能量,为五做准备,储存的能量为当前滑稽们的个数,如果每次储存之前滑稽们就有能量,就把之前的能量清空。每次五可以产生新的滑稽,每储存一点能量就可以产生一个新的滑稽,但产生新的滑稽不需要消耗能量。每次⑤可以把两个滑稽融合成一个滑稽,并结出一个滑稽果。

滑稽们其实心中已经决定了要给xxy一个n分钟的禁言套餐,跳舞只是走走形式,所以滑稽们不想消耗太多的体力,每种舞都会消耗一点的体力,所以,单纯的滑稽们把这个问题交给了你,请你在1.5s内给出答案,否则滑稽们就会和你在滑稽树前做游♂戏。

一个滑稽可以禁言一分钟。

输入格式:

第一行包含一个整数:n(1<=n<=10^6)

输出格式:

第一行包括一个整数:ans,表示最小的体力。

样例输入:

233

样例输出:

17

 

对于100%的数据 n<=10^6。

/*
好题,图论模型的转化(可以dp但我不会23333)
开始是1,可以复制粘贴,可以消除
那么久把1向它的倍数连边权为倍数的边。但发现变边太多,所以考虑 i->i*k
如果k不是素数 那么i->k就不必连边,因为这条边可以由另外的替代
再把 当前数跟它减一连边,表示删除。
通打标找规律可发现,素数只需要前十几个。
当然多打些素数表也可以,有备无患......
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 1000100 using namespace std;
int n,m,cost,cnt,lim;
int d[N],prime[N]={,,,,,,,,,,,,,};
int inq[N],q[N]; void spfa(int u)
{
int head=,tail=;
memset(d,/,sizeof d);
d[u]=;inq[u]=,q[tail++]=u;
while(head!=tail)
{
int now=q[head++];inq[now]=;
if(head==N) head=;
for(int j=;j<=lim && now*prime[j]<n+;j++)
{
int v=now*prime[j];cost=prime[j];
if(d[v]>d[now]+cost)
{
d[v]=d[now]+cost;
if(!inq[v])
{
inq[v]=;q[tail++]=v;
}
if(tail==N) tail=;
}
}
int v=now-;cost=;
if(d[v]>d[now]+cost)
{
d[v]=d[now]+cost;
if(!inq[v])
{
inq[v]=;q[tail++]=v;
}
if(tail==N) tail=;
}
}
} int main()
{
freopen("huaji.in","r",stdin);
freopen("huaji.out","w",stdout);
lim=;scanf("%d",&n);
spfa();
printf("%d\n",d[n]);
}

9.12NOIP模拟题的更多相关文章

  1. 10.12NOIP模拟题(2)

    /* 有谁知道这道题结论是怎么来的? 晚上问问学数学的孩子23333 */ #include<iostream> #include<cstdio> #include<cs ...

  2. 10.12NOIP模拟题(1)

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...

  3. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  4. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  5. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  6. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  7. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  8. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

  9. cdoj 25 点球大战(penalty) 模拟题

    点球大战(penalty) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...

随机推荐

  1. 剑指offer---以O(1)时间删除链表节点

    问题:删除链表节点 要求:以O(1)时间 对于删除指定索引的链表元素大家都很熟悉,思路一般是从头遍历链表直到指定索引位置删除元素,然后维护一下指针即可,时间复杂度O(n).代码如下: // 删除pos ...

  2. <MyBatis>入门七 缓存机制

    缓存机制 MyBatis包含强大的查询缓存特性,它可以非常方便的定制和配置.缓存可以极大的提升查询效率. MyBatis默认定义了两级缓存:一级缓存和二级缓存 1.默认情况下,只有一级缓存(sqlSe ...

  3. vue-cli npm install 失败

    1.$ npm install -g vue-cli 2.vue init webpack sell (sell 是项目) 3.然后就是自动下载模板,根据提示输入 4.cd cell => np ...

  4. swing中的按钮事件

    package pack2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax ...

  5. Billboard (HDU 2795)

    Billboard (HDU 2795) Hdu 2795 注意到每个广告的长度是1,因此可以将每这一张广告牌当成一个数列表示,每个初始值为w.使用线段树维护这个数列,每次查询为找到这个数列第一个大于 ...

  6. 猎豹CEO傅盛:与周鸿祎、雷军、马化腾、马云的的相爱相杀

    百度百科:傅盛,男,1978年3月6日出生在江西景德镇,毕业于山东工商学院信息管理与信息系统专业. 2003年加入3721公司.2005年加入奇虎360,带领团队打造了安全类软件360安全卫士.200 ...

  7. [置顶] Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...

  8. 【BZOJ3238】差异(后缀数组,单调栈)

    题意: 思路:显然len(t[i])+len(t[j])这部分的和是一定的 那么问题就在于如何快速求出两两之间lcp之和 考虑将它们排名后用SA可以很方便的求出lcp,且对答案没有影响,因为形式都是数 ...

  9. Linux下汇编语言学习笔记73 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  10. kendo中需要kendo.default.min.css

    kendo中需要kendo.default.min.css,这个默认是没有加入头文件的,还是需要手动加入一下 <link href="~/Scripts/kendo/styles/ke ...