NOIP2017普及组题
提高组死亡选手来AK普及(耗时两天)。
T1
#include<bits/stdc++.h>
using namespace std;
int A,B,C;
int main()
{
cin>>A>>B>>C;
cout<<(A*+B*+C*)/<<"\n";
return ;
}
T2
无脑找答案
#include<bits/stdc++.h>
using namespace std;
int N,Q,a[],b,x,t;
int main()
{
cin>>N>>Q;
for(int i=;i<=N;i++)cin>>a[i];
sort(a+,a+N+);
while(Q--){
cin>>b>>x;
t=pow(,b);
int ans=-;
for(int i=;i<=N;i++)
if(a[i]%t==x){
ans=a[i];
break;
}
cout<<ans<<"\n";
}
return ;
}
T3
连边,取一个有颜色的块,
1.四周有颜色的块 相同连0 不同连1
2.与他距离为2的块 相同连2 不同连3
3.这一点忘了就少一半分,四周没有颜色的块要连2,否则有好多都会误判成“-1”
然后跑SPFA,没了
#include<bits/stdc++.h>
using namespace std;
int N,M,color[][],last[],cnt,
x,y,z,d1[]={,-,,},d2[]={,,-,},dis[];
int D1[]={,,,-,,,-,-},D2[]={,-,,,,-,,-};
bool vis[];
queue <int> q;
struct Edge{
int other,pre,val;
}e[];
void connect(int x,int y,int z){
e[++cnt]=(Edge){y,last[x],z};
last[x]=cnt;
}
int main()
{
cin>>M>>N;
for(int i=;i<=N;i++){
cin>>x>>y>>z;
color[x][y]=z+; //0 nah 1 red 2 yellow
}
for(int i=;i<=M;i++)
for(int j=;j<=M;j++)
if(color[i][j]){
for(int k=;k<=;k++){
int tx=i+d1[k],ty=j+d2[k];
if(tx<||tx>M||ty<||ty>M)continue;
// printf("[%d,%d]\n",tx,ty);
if(color[tx][ty]){
int v=;
if(color[tx][ty]==color[i][j])v=;
// printf("(%d,%d)->(%d,%d)cost=%d\n",i,j,tx,ty,v);
connect((i-)*M+j,(tx-)*M+ty,v);
}
else {
connect((i-)*M+j,(tx-)*M+ty,);// printf("z(%d,%d)->(%d,%d)cost=%d\n",i,j,tx,ty,2);
}
}
for(int l=;l<=;l++){
int lx=i+D1[l],ly=j+D2[l];
if(lx<&&lx>M&&ly<&&ly>M)continue;
if(lx==i&&ly==j)continue;
if(!color[lx][ly])continue;
int v=;
if(color[i][j]==color[lx][ly])v=;
// printf("(%d,%d)->(%d,%d)cost=%d\n",i,j,lx,ly,v);
connect((i-)*M+j,(lx-)*M+ly,v);
}
}
memset(dis,0x3f,sizeof dis);
vis[]=,dis[]=;
q.push();
while(!q.empty()){
int u=q.front();
vis[u]=,q.pop();
for(int i=last[u];i;i=e[i].pre){
int v=e[i].other;
if(dis[v]>dis[u]+e[i].val){
dis[v]=dis[u]+e[i].val;
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
if(dis[M*M]==dis[])puts("-1");
else printf("%d\n",dis[M*M]);
return ;
}
T4
二分答案+DP
朴素DP N^2 我们很容易的看出可以拿单调队列优化
#include<bits/stdc++.h>
#define MAXN 500005
#define INF 0x7f7f7f7f
using namespace std;
int read(){
int x=,t=;char c=getchar();
while(c<''||c>''){if(c=='-')t=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*t;
}
int N,D,K,x[MAXN],c[MAXN],f[MAXN];
pair <int,int> q[MAXN];
bool Judge(int L){
memset(f,,sizeof f);
int a=D-L,b=D+L,head=,tail=-,cur=;
if(a<=)a=;
for(int i=;i<=N;i++){
for(cur;cur<i&&x[cur]<=x[i]-a;cur++){
while(head<=tail&&q[tail].first<f[cur])tail--;
if(f[cur]<=-INF)continue;
q[++tail].first=f[cur],q[tail].second=x[cur];
}
while(head<=tail&&x[i]-q[head].second>b)head++;
if(head<=tail)f[i]=q[head].first+c[i];
else f[i]=-INF;
if(f[i]>=K)return ;
}
return ;
}
int main()
{
N=read(),D=read(),K=read();
for(int i=;i<=N;i++)x[i]=read(),c[i]=read();
if(!Judge(x[N]))puts("-1");
else{
int l=,r=x[N];
while(l<r){
int mid=l+r>>;
if(Judge(mid))r=mid;
else l=mid+;
}
printf("%d\n",l);
}
return ;
}
NOIP2017普及组题的更多相关文章
- [NOIP2017 普及组]跳房子 【题解】
题目背景 NOIP2017 普及组 T4 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 \(n ...
- [NOIP2017普及组]跳房子(二分,单调队列优化dp)
[NOIP2017普及组]跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 nn 个格子, ...
- 「LOJ 6373」NOIP2017 普及组题目大融合
NOIP2017 普及组题目大融合 每个读者需要有某个后缀的书,可以暴力map,复杂度\(o(9*nlog(n))\),也可以反串建trie树,复杂度\(o(9*n)\). 故可以求出需要的最少的RM ...
- P3956 [NOIP2017 普及组] 棋盘
P3956 [NOIP2017 普及组] 棋盘 题目 题目描述 有一个 m×m 的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你 ...
- NOIP2017普及组比赛总结
期中考总结&NOIP2017总结 2017年11月11日,我第二次参加NOIP普及组复赛.上一年,我的得分是250分,只拿到了二等奖.我便把目标定为拿到一等奖,考到300分以上. 早上8点多, ...
- NOIP2017普及组解题报告
刚参加完NOIP2017普及,只考了210,于是心生不爽,写下了这篇解题报告...(逃 第一次写博,望dalao们多多指导啊(膜 第一题score,学完helloworld的人也应该都会吧,之前好多人 ...
- NOIP2017普及组初赛试题及答案
普及组C++语言试题 一.单项选择题(共 20 题,每题 1.5 分,共计 30 分:每题有且仅有一个正确选项) 1.在 8 位二进制补码中,10101011 表示的数是十进制下的( ). A. 43 ...
- NOIP2017普及组T2题解
还是神奇的链接 上面依然是题目. 这道题依然很简单,比起2015年的普及组t2好像还是更水一些. 不过这道题能讲的比第一题多. 我们一起来看一下吧! 这一题,我们首先将书的编号全部读入,存在一个数组里 ...
- noip2017普及组
过了这么久才来写博客,也是我这么一段时间都很低迷吧.... 老实来说,今年应该是要打提高组的...可还是打了普及组... 其实最猥琐的还是我连普及都写挂了,作为一个学了两年的人,图论,进阶dp都写过的 ...
随机推荐
- oracle 11g not in 与not exists 那个高效?
网络上很多谣言是后面跟小表用not in,后面跟大表用not exists,难道真的是这样子的嘛? 情况下面测试: 1.先用小表测试(1000条记录和一张8万条记录的表): SQL> creat ...
- sqlserver 恢复模式及避免日志爆满的方法
recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...
- 路飞学城Python-Day4(practise)
#1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex','eric','rain']# li = ['alex','eric','rain']# print('_'.j ...
- NodeJS学习笔记 (1)资源压缩-zlib(ok)
原文: https://github.com/chyingp/nodejs-learning-guide/blob/master/README.md 自己的跟进学习: 概览 做过web性能优化的同学, ...
- [APIO2016]Gap
题目:UOJ#206. 题目大意:由于过于冗长,不好解释,所以详见原题. 解题思路:这是一道交互题. 对于第一问,很容易解决.由于数列严格递增,所以不会出现相等的情况. 首先调用MinMax(0,10 ...
- java读取excel文件内容
1.导入依赖JAR包 <!-- jxl 操作excel --> <dependency> <groupId>org.jxls</groupId> < ...
- jstack命令dump线程信息
jstack命令dump线程信息 D:\Java\jdk1.8.0_05\bin>jstack.exe 6540 > dump17 6540为java 线程pid: 出来的dump17文件 ...
- Android SQLite 简单使用演示样例
SQLite简单介绍 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也很的强大. 袖珍型的SQLite能够支持高达2TB大小的数据库, ...
- nj05---模块
概念:模块(Module)和包(Package)是Node.js最重要的支柱.在浏览器JavaScript中,脚本模块的拆分和组合通常使用HTML的script标签来实现,Node.js提供了requ ...
- 威胁报告:mDNS 反射式 DDoS 攻击
威胁报告:mDNS 反射式 DDoS 攻击 转自:https://www.akamai.com/cn/zh/about/our-thinking/threat-advisories/akamai-md ...