2017-9-12 NOIP模拟赛[hkd]
NOIP 2017 全假模拟冲刺
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
/*
(f(n),f(m))=f((n,m))
再用矩阵乘法优化计算
*/
#include<cstdio>
#include<iostream>
#define Mod 1000000007
#define Max 2
using namespace std;
struct Martix_Data {
long long data[Max][Max];
void Prepare(){
data[][]=;
data[][]=;
data[][]=;
data[][]=;
}
Martix_Data operator * (const Martix_Data now) const {
Martix_Data res;
for (int i=;i<Max;i++)
for (int j=;j<Max;j++) {
res.data[i][j]=;
for (int k=;k<Max;k++)
res.data[i][j]=(res.data[i][j]+data[i][k]*now.data[k][j])%Mod;
}
return res;
}
};
Martix_Data operator ^ (Martix_Data &now, long long P) {
Martix_Data res;
res.Prepare ();
res.data[][]=;
while(P){
if (P&)
res=res*now;
now=now*now;
P>>=;
}
return res;
}
long long N;
long long gcd(long long x,long long y){
if(y==)return x;
return gcd(y,x%y);
}
int main () {
//scanf("%lld",&N);
freopen("spfa.in","r",stdin);
freopen("spfa.out","w",stdout);
long long n,m;
cin>>n>>m;
N=gcd(n,m);
if(N==||N==){
printf("");
return ;
}
Martix_Data Answer;
Answer.Prepare();
Answer=Answer^(N-);
cout<<Answer.data[][];
return ;
}
100分
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 就可以满足要求。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,T;
int main(){
freopen("small.in","r",stdin);
freopen("small.out","w",stdout);
scanf("%d",&T);
while(T--){
vector<int>q;
scanf("%d",&n);
int x;
for(int i=;i<=n;i++){
scanf("%d",&x);x+=i;
q.push_back(x);
}
sort(q.begin(),q.end());
q.erase(unique(q.begin(),q.end()),q.end());
int len=q.size();
if(len==n){
printf("Happy\n");
continue;
}
printf("Sad\n");
printf("%d\n",n-len);
}
}
65分
/*
不难证明a[i]+i是一个常数
如果a[i]+i==a[j]+j那么这就是一组不合法解
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,T;
int qread(){
int i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>=''){i=i*+ch-'';ch=getchar();}
return i;
}
int main(){
freopen("small.in","r",stdin);
freopen("small.out","w",stdout);
scanf("%d",&T);
while(T--){
vector<int>q;
n=qread();
int x;
for(int i=;i<=n;i++){
x=qread();x+=i;
q.push_back(x);
}
sort(q.begin(),q.end());
q.erase(unique(q.begin(),q.end()),q.end());
int len=q.size();
if(len==n){
printf("Happy\n");
continue;
}
printf("Sad\n");
printf("%d\n",n-len);
}
}
100分
T3 huaji.jpg
滑稽们在愉快地做游戏,xxy 身为在跳楼梯这一极限运动领域已经登峰造极的人来
说,跳楼梯已经满足不了她了,她想对滑稽们搞些大新闻。
她用比香港记者跑得还快的速度来到了滑稽树下,对着滑稽们大喊:“整个城乡结
合部敢对我用这个表情的人不超过三个。”滑稽们感到很气恼,但良好的素养让他们决定
不和 xxy 这个粗鲁的人一般计较,xxy 接着喊;“南方好还是北方好?”。滑稽们再也忍
不住了,决定用跳舞的方式来计算出给她来几分钟的禁言套餐。
滑稽们有三种跳舞的方式,分别是 5,五和⑤。每次 5 可以储存一部分的能量,为
五做准备,储存的能量为当前滑稽们的个数,如果每次储存之前滑稽们就有能量,就把之
前的能量清空。每次五可以产生新的滑稽,每储存一点能量就可以产生一个新的滑稽,但
产生新的滑稽不需要消耗能量。每次⑤可以把两个滑稽融合成一个滑稽,并结出一个滑稽
果。
滑稽们其实心中已经决定了要给 xxy 一个 n 分钟的禁言套餐,跳舞只是走走形式,
所以滑稽们不想消耗太多的体力,每种舞都会消耗一点的体力,所以,单纯的滑稽们把这
个问题交给了你,请你在 1.5s 内给出答案,否则滑稽们就会和你在滑稽树前做游♂戏。
一个滑稽可以禁言一分钟。
输入格式:
第一行包含一个整数:n(1<=n<=10^6)
输出格式:
第一行包括一个整数:ans,表示最小的体力。
样例输入:
233
样例输出:
17
于 对于 100%据 的数据 n<=10^6
/*
三种操作:复制,粘贴,退格
我们知道只复制不粘贴是没有任何意义的,所以复制粘贴看作是一步
在1000000范围内,退格的使用次数不会超过40次,复制粘贴只需要建图跑一遍spfa,求出dis[n]
*/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
const int p[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int n,pre[N],dis[N],q[N+],head,tail;
bool vis[N];
#define v (u*p[i])
#define vv (u-1)
void spfa(){
memset(dis,,sizeof(dis));
dis[]=;q[tail=]=;head=;
while(head!=tail){
int u=q[++head];vis[u]=;
if(head==N)head=;
for (int i=;i<;++i){
if(v>n+) break;
if(v<n+&&dis[v]>dis[u]+p[i]){
dis[v]=dis[u]+p[i];
if(!vis[v]){
vis[v]=;q[++tail]=v;
if(tail==N)tail=;
}
}
}
if(u>&&dis[vv]>dis[u]+){
dis[vv]=dis[u]+;
if(!vis[vv]){
vis[vv]=;q[++tail]=vv;
if(tail==N)tail=;
}
}
}
}
int main()
{
freopen("huaji.in","r",stdin);
freopen("huaji.out","w",stdout);
scanf("%d",&n);
spfa();printf("%d\n",dis[n]);
return ;
}
(0)100分 spfa
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,dp[],lit;
int main()
{
freopen("huaji.in","r",stdin);
freopen("huaji.out","w",stdout);
cin>>n;
memset(dp,/,sizeof(dp)),dp[]=;
for(int i=,v,base;i<=n+;++i)
{
base=dp[i];
for(v=;true;++v)
if(dp[i+v]+v<=base) base=dp[i+v]+v;
else break;
dp[i]=base,++base;
for(v=;i+v*i<=n+;++v)
dp[i+v*i]=min(dp[i+v*i],base+v);
}
cout<<dp[n];
return ;
}
100分 线段树(myj)
2017-9-12 NOIP模拟赛[hkd]的更多相关文章
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 2018.02.12 noip模拟赛T2
二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得 ...
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)
期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 2017-9-22 NOIP模拟赛[xxy][数论]
XXY 的 的 NOIP 模拟赛 4 4 —— 数学专场 A Description定义 f(x)表示 x 的约数和,例:f(12)=1+2+3+4+6+12=28给出 x,y,求Σf(i),i∈[x ...
- NOIP模拟赛 6.29
2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
随机推荐
- JAVA Exception处理
原文地址:http://blog.csdn.net/hguisu/article/details/6155636 1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用 ...
- iOS开发的10个奇袭
1.关于关键字volatile 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这 ...
- JAVA各版本更新特性1-8
JAVA各版本更新特性1-8 原文地址 Java Versions, Features and History This article gives you a highlight of import ...
- EntityFramework codefirst
一.Entity Framework 迁移命令(get-help EntityFramework) Enable-Migrations 启用迁移 Add-Migration 为挂起的Model变化添加 ...
- CodeChef - ANDMIN —— 线段树 (结点最多被修改的次数)
题目链接:https://vjudge.net/problem/CodeChef-ANDMIN Read problems statements in Mandarin Chinese, Russia ...
- LNMP搭建随笔
LNMP(即Linux+Nginx+MYSQL+PHP)是目前非常热门的动态网站部署架构,一般是指: Linux:如RHEL.Centos.Debian.Fedora.Ubuntu等系统. Nginx ...
- 分享知识-快乐自己:Struts2文件上传及文件下载
1)Struts2单文件上传 action:类文件 package com.mlq.action; import com.opensymphony.xwork2.ActionSupport; impo ...
- (转)Linux内核本身和进程的区别 内核线程、用户进程、用户线程
转自:http://blog.csdn.net/adudurant/article/details/23135661 这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一 ...
- SoundHound Inc. Programming Contest 2018
A - F Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement You are give ...
- poj 2069 Super Star——模拟退火(收敛)
题目:http://poj.org/problem?id=2069 不是随机走,而是每次向最远的点逼近.而且也不是向该点逼近随意值,而是按那个比例:这样就总是接受,但答案还是要取min更新. 不知那个 ...