转圈游戏

传送门

Solution

快速幂

Code

//By Menteur_Hxy
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;
typedef long long LL;LL read() {LL x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}LL n,m,k,ans;LL qpow(LL a,LL b,LL MOD) {LL res=1;while(b) {if(b&1) res=res*a%MOD;a=a*a%MOD; b>>=1;}return res;
}int main() {n=read(),m=read(),k=read(),ans=read();(ans+=m*qpow(10,k,n)%n)%=n;printf("%lld\n",ans);return 0;
}

火柴排队

传送门

Solution

建立映射关系,求逆序对个数

Code

//By Menteur_Hxy
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
using namespace std;
typedef long long LL;LL read() {LL x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const LL N=100010,MOD=99999997;
int n;
int to[N],C[N];
LL ans;
struct Dat{LL id,da;}A[N],B[N];struct BIT{LL da[N];BIT() {memset(da,0,sizeof(da));}void upd(int x,int k) {for(;x<=N;x+=(x&-x)) da[x]+=k;}LL qry(int x) {LL res=0;for(;x>0;x-=(x&-x)) res+=da[x];return res;}
}T;bool cmp(Dat a,Dat b) {return a.da<b.da;}int main() {n=read();F(i,1,n) A[i].id=i,A[i].da=read();F(i,1,n) B[i].id=i,B[i].da=read();sort(A+1,A+1+n,cmp);sort(B+1,B+1+n,cmp);F(i,1,n) C[B[i].id]=A[i].id;R(i,1,n) {ans+=T.qry(C[i]-1);T.upd(C[i],1);}printf("%lld",ans%MOD);//忘%wa一次QAQreturn 0;
}

货车运输

传送门

Solution

建最大生成树,对询问找lca,暴力

Code

//By Menteur_Hxy
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
#define E(i,u) for(register int i=head[u],v;i;i=T[i].nxt)
using namespace std;
typedef long long LL;LL read() {LL x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=10010,M=50010,INF=0x3f3f3f3f;
int n,m,q,cnt;
int fa[N],f[N][33],dis[N],head[N],dep[N],vis[N];
struct Edg{int fr,to,cst,nxt;}E[M],T[N<<1];bool cmp(Edg a,Edg b) {return a.cst>b.cst;}
int getf(int x) {return fa[x]==x?x:fa[x]=getf(fa[x]);}void dfs(int u,int pre) {vis[u]=1;E(i,u) if((v=T[i].to)!=pre) {//T,E不分QAQdep[v]=dep[u]+1;f[v][0]=u;dis[v]=T[i].cst;dfs(v,u);}
}int getm(int x,int lca) {int res=INF;while(x!=lca) {res=min(res,dis[x]);x=f[x][0];}return res;
}int lca(int x,int y) { int l=x,r=y;if(dep[x]<dep[y]) swap(x,y);int nd=dep[x]-dep[y];for(int i=0;nd;nd>>=1,i++) if(nd&1) x=f[x][i];if(x!=y) {R(i,0,32) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];x=f[x][0];}return min(getm(l,x),getm(r,x));
}int main() {n=read(),m=read();F(i,1,m) {int a=read(),b=read(),c=read();E[i]=(Edg){a,b,c};}sort(E+1,E+1+m,cmp);F(i,1,n) fa[i]=i;F(i,1,m) {int fu=getf(E[i].fr),fv=getf(E[i].to);if(fu==fv) continue; fa[fu]=fv;int a=E[i].fr,b=E[i].to,c=E[i].cst;T[++cnt]=(Edg){a,b,c,head[a]}; head[a]=cnt;T[++cnt]=(Edg){b,a,c,head[b]}; head[b]=cnt;if(cnt==((n-1)<<1)) break;}F(i,1,n) if(!vis[i]) dfs(i,0);//可能有多棵树for(register int j=1;(1<<j)<=n;j++) F(i,1,n) if(f[i][j-1]) f[i][j]=f[f[i][j-1]][j-1];q=read();while(q--) {int x=read(),y=read();if(getf(x)!=getf(y)) puts("-1");else printf("%d\n",lca(x,y));}return 0;
}

积木大赛

传送门

Solution

显然是差分后把正值加起来

Code

//By Menteur_Hxy
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
using namespace std;
typedef long long LL;int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=100010;
int n;
int da[N];
LL ans;int main() {n=read();F(i,1,n) da[i]=read();R(i,1,n) da[i]=da[i]-da[i-1];F(i,1,n) if(da[i]>0) ans+=da[i];printf("%lld",ans);return 0;
}   

花匠

传送门

Solution

分(xian)析(ran)可知第一个数一定要有
分别讨论第一个数是波峰还是波谷

Code

//By Menteur_Hxy
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=100010;
int n,opt,t1,t2;
int da[N];int main() {n=read();F(i,1,n) da[i]=read();F(i,1,n) {if(da[i]>da[i-1]&&opt==0) t1++,opt=1;else if(da[i]<da[i-1]&&opt==1) t1++,opt=0;}opt=0;da[0]=da[1]+1;F(i,1,n) {if(da[i]>da[i-1]&&opt==1) t2++,opt=0;else if(da[i]<da[i-1]&&opt==0) t2++,opt=1;}printf("%d",max(t1,t2));return 0;
}   

华容道

传送门

Solution

60-80分:bfs
正解回头再说

Code

60-80分

//By Menteur_Hxy
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=40;
int mv[5]={0,1,0,-1,0};
int n,m,q,ex,ey,sx,sy,tx,ty,ans,now;
int vis[N][N][N][N];
bool map[N][N];
struct P{int x0,y0,x1,y1,dep;P(int a0=0,int b0=0,int a1=0,int b1=0,int deep=0) {x0=a0,y0=b0,x1=a1,y1=b1,dep=deep;}
};
queue <P> Q;void bfs() {while(!Q.empty()) Q.pop();Q.push(P(ex,ey,sx,sy,0)); while(!Q.empty()) {P u=Q.front(); Q.pop();if(vis[u.x0][u.y0][u.x1][u.y1]==now) continue;vis[u.x0][u.y0][u.x1][u.y1]=now;// cout<<u.x0<<" "<<u.y0<<" "<<u.x1<<" "<<u.y1<<" "<<u.dep<<endl;if(u.x1==tx&&u.y1==ty) {ans=u.dep;return ;}if(u.x0==u.x1&&abs(u.y1-u.y0)==1) Q.push(P(u.x1,u.y1,u.x0,u.y0,u.dep+1));if(u.y0==u.y1&&abs(u.x1-u.x0)==1)Q.push(P(u.x1,u.y1,u.x0,u.y0,u.dep+1));F(i,0,3) {int x=u.x0+mv[i],y=u.y0+mv[i+1];if(!map[x][y]||(x==u.x1&&y==u.y1)) continue;Q.push(P(x,y,u.x1,u.y1,u.dep+1));}}
}int main() {n=read(),m=read(),q=read();F(i,1,n) F(j,1,m) map[i][j]=read();for(now=1;now<=q;now++) {scanf("%d %d %d %d %d %d",&ex,&ey,&sx,&sy,&tx,&ty);// printf("%d %d %d %d %d %d\n",ex,ey,sx,sy,tx,ty);ans=-1; bfs();printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9502496.html

Noip 2013 练习相关推荐

  1. [NOIP 2013提高组]转圈游戏 题解

    这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...

  2. NOIP 2013 提高组 货车运输

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  3. NOIP 2013 普及组初赛试题

    第 1 题 一个 32 位整型变量占用(A)个字节. A. 4 B. 8 C. 32 D. 128 常识题,每个32 位整型变量占4个字节 第 2 题 二进制数 11.01 在十进制下是(A). A. ...

  4. [NOIp 2013]货车运输

    Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  5. NOIP 2013 day1

    tags: 模拟 快速幂 逆序对 树状数组 归并排序 最小生成树 lca 倍增 categories: 信息学竞赛 总结 tex live 2017.iso 转圈游戏 火柴排队 货车运输 转圈游戏 s ...

  6. 水题 逆序对 NOIP 2013 火柴排队

    题目如下 题目描述 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ,其中 a ...

  7. 「NOIP 2013」 货车运输

    题目链接 戳我 \(Solution\) 这一道题直接用\(kruskal\)重构树就好了,这里就不详细解释\(kruskal\)重构树了,如果不会直接去网上搜就好了.接下来讲讲详细过程. 首先构建\ ...

  8. NOIP 2013 day2

    tags: 模拟 贪心 搜索 动态规划 categories: 信息学竞赛 总结 积木大赛 花匠 华容道 积木大赛 Solution 发现如果一段先单调上升然后在单调下降, 那么这一块的代价是最高的减 ...

  9. NOIP 2013 货车运输

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

最新文章

  1. 这些 IDEA 的优化设置赶紧安排起来,效率提升不是一点点!
  2. tensorflow随笔-条件语句-tf.cond
  3. spring jms同时使用queue和持久topic订阅
  4. java匹配出某单词除外_java正则匹配 指定内容以外的 内容
  5. C++ int (*s[10])(int) 表示什么?
  6. php 文字水印如何居中,php文字水印和php图片水印实现代码(二种加水印方法)
  7. 掌握SpringAOP
  8. Mac OS X安装之硬盘和光盘引导总结
  9. LINUX-VIM编辑器常用命令大全(超全)
  10. markdown模板(个人使用)
  11. java实现小姐姐做我女朋友好么抖音表白神器
  12. mysql_assoc函数_PHP:MySQL函数mysql_fetch_assoc()的用法
  13. mac SCp上传文件到阿里云服务器centos
  14. MindMaster思维导图及亿图图示会员 超值获取途径
  15. 谈谈像素以及微信小程序的 rpx
  16. shiro权限拦截失效
  17. 英特尔高管晒照片不小心泄密
  18. 基于jsp+servlet+mysql网上蛋糕店
  19. 今天谁也别想阻止我好好学习!「CDR 6·18特惠倒计时2天!」
  20. 多个word合并成一个word(新版)

热门文章

  1. JVM调优:运行参数,内存模型,mat、jps、jstat、jmap、jstack、jvisualvm工具的使用
  2. Spark常规性能调优二:RDD 优化
  3. Linux RAID1和RAID5的区别
  4. golang中go mod使用第三方包
  5. k8s 使用helm部署dashboard
  6. Linux centos 6.7设置MySQL为开机启动
  7. Linux 命令:pwd、touch、ll、wget
  8. Spring MVC Hibernate验证器使用示例
  9. redis命令操作(1)
  10. 单片机串行收发电路制作记录