NOIP 2013 解题报告

NOIP 2013 解题报告noip2013

1.

#include 
    #include 
    #include 
    using namespace std; int n,m,k,x; long long mul(long long x,long long y,long long mod) { if(y==0) return 0; if(y==1) return x%mod; long long res; res=mul(x,y>>1,mod); if((y&1)!=0) return(res+res+x)%mod; else return(res+res)%mod; } long long powermod(long long a,long long b,long long mod) { long long base=a,res=1; while(b!=0) { if(b&1!=0) res=mul(res,base,mod); base=mul(base,base,mod); b>>=1; } return res; } int main() { freopen("circle.in","r",stdin); freopen("circle.out","w",stdout); scanf("%d%d%d%d",&n,&m,&k,&x); int ans=(x+mul(m,powermod(10,k,n),n))%n; printf("%d\n",ans); return 0; }

2.

#include 
    #include 
    #include 
    using namespace std; #define MAXN  #define MOD  struct node { int v,t; }a[MAXN],b[MAXN]; short int cmp(node x,node y) { return x.v 
  
    int n,c[MAXN],ans= 
   0; 
   int t[MAXN]; 
   int lowbit( 
   int x) { 
    
   return x&(-x);} 
   void Add( 
   int x) { 
   for( 
   int i=x;i<=n;i+=lowbit(i)) ++t[i]; } 
   int Sum( 
   int x) { 
   int rec= 
   0; 
   for( ;x;x-=lowbit(x)) rec+=t[x]; 
   return rec; } 
   int main() { freopen( 
   "match.in", 
   "r",stdin); freopen( 
   "match.out", 
   "w",stdout); 
   scanf( 
   "%d",&n); 
   for( 
   int i= 
   1;i<=n;++i) { 
    
   scanf( 
   "%d",&a[i].v);a[i].t=i;} 
   for( 
   int i= 
   1;i<=n;++i) { 
    
   scanf( 
   "%d",&b[i].v);b[i].t=i;} sort(a+ 
   1,a+n+ 
   1,cmp); sort(b+ 
   1,b+n+ 
   1,cmp); 
   for( 
   int i= 
   1;i<=n;++i) c[a[i].t]=b[i].t; 
   for( 
   int i=n;i>= 
   1;i--) { ans+=Sum(c[i]); Add(c[i]); ans%=MOD; } 
   printf( 
   "%d\n",ans); 
   return 
   0; } 
  
#include 
    #include 
    #include 
    using namespace std; #define inf 0x7fffffff #define N 10010 #define M  int n,m,q,ne; int head[N]; struct data { int to,next,v; }e[M*2]; void add(int u,int v,int w) { ne++, e[ne].to=v, e[ne].v=w, e[ne].next=head[u], head[u]=ne; } void spfa(int x,int y) { int q[N],dis[N],t=0,w=1; int now,i; short int vis[N]; memset(vis,0,sizeof(vis)); memset(dis,-1,sizeof(dis)); q[0]=x, vis[x]=1, dis[x]=inf; while(t!=w) { now=q[t],t++; if(t==n) t=0; i=head[now]; while(i) { if(dis[e[i].to] 
  
    if(!vis[e[i].to]) { vis[e[i].to]= 
   1, 
   q[w]=e[i].to, w++; 
   if(w==n) w= 
   0; } } i=e[i]. 
   next; } vis[now]= 
   0; } 
   printf( 
   "%d\n",dis[ 
   y]); } 
   int main() { freopen( 
   "truck.in", 
   "r",stdin); freopen( 
   "truck.out", 
   "w",stdout); scanf( 
   "%d%d",&n,& 
   m); 
   for( 
   int i= 
   1;i<= 
   m;i++) { 
   int 
   x, 
   y,z; scanf( 
   "%d%d%d",& 
   x,& 
   y,&z); add( 
   x, 
   y,z);add( 
   y, 
   x,z); } scanf( 
   "%d",& 
   q); 
   while( 
   q--) { 
   int 
   x, 
   y; scanf( 
   "%d%d",& 
   x,& 
   y); spfa( 
   x, 
   y); } 
   return 
   0; } 
  

60分做法

#include 
    #include 
    #include 
    using namespace std; #define inf 0x7fffffff #define N 10010 #define M  int n,m,q,ne; int head[N],father[N]; struct data1 { int x,y,v; }ed[M]; struct data2 { int to,next,v; }e[M*2]; int find(int x) { 
  return x==father[x]?father[x]:father[x]=find(father[x]);} short int cmp(data1 a,data1 b) { 
  return a.v>b.v;} void add(int u,int v,int w) { ne++, e[ne].to=v, e[ne].v=w, e[ne].next=head[u], head[u]=ne; } void spfa(int x,int y) { int q[N],dis[N],t=0,w=1; int now,i; short int vis[N]; memset(vis,0,sizeof(vis)); memset(dis,-1,sizeof(dis)); q[0]=x; vis[x]=1; dis[x]=inf; while(t!=w) { now=q[t],t++; if(t==n) t=0; i=head[now]; while(i) { if(dis[e[i].to] 
  
    if(!vis[e[i].to]) { vis[e[i].to]= 
   1, 
   q[w]=e[i].to, w++; 
   if(w==n) w= 
   0; } } i=e[i]. 
   next; } vis[now]= 
   0; } 
   printf( 
   "%d\n",dis[ 
   y]); } 
   int main() { freopen( 
   "truck.in", 
   "r",stdin); freopen( 
   "truck.out", 
   "w",stdout); scanf( 
   "%d%d",&n,& 
   m); 
   for( 
   int i= 
   1;i<= 
   m;++i) {scanf( 
   "%d%d%d",&ed[i]. 
   x,&ed[i]. 
   y,&ed[i].v);} 
   sort(ed+ 
   1,ed+ 
   m+ 
   1,cmp); 
   for( 
   int i= 
   1;i<=n;++i) father[i]=i; 
   for( 
   int i= 
   1;i<= 
   m;++i) { 
   int 
   x=ed[i]. 
   x, 
   y=ed[i]. 
   y,v=ed[i].v; 
   if(find( 
   x)!=find( 
   y)) { father[find( 
   x)]=find( 
   y); add( 
   x, 
   y,v);add( 
   y, 
   x,v); } } scanf( 
   "%d",& 
   q); 
   for( 
   int i= 
   1;i<= 
   q;++i) { 
   int 
   x, 
   y; scanf( 
   "%d%d",& 
   x,& 
   y); spfa( 
   x, 
   y); } 
   return 
   0; } 
  

AC

#include 
    #include 
    #include 
    using namespace std; #define inf 0x7fffffff #define N 10010 #define M 50010 int n,m,q,cnt,tot,deep[N],head[N],f[N],fa[N][17],d[N][17]; short int vis[N]; struct edge { int x,y,v; }a[M]; struct e { int next,to,v; }e[M*2]; int find(int x) { 
  return f[x]==x?x:f[x]=find(f[x]);} bool cmp(edge a,edge b) { 
  return a.v>b.v;} void add(int u,int v,int w) { e[++cnt].to=v; e[cnt].next=head[u]; head[u]=cnt; e[cnt].v=w; } void dfs(int x) { vis[x]=1; for(int i=1;i<=16;++i) { if(deep[x]<(1< 
  
    break; fa[x][i]=fa[fa[x][i- 
   1]][i- 
   1]; d[x][i]=min(d[x][i- 
   1],d[fa[x][i- 
   1]][i- 
   1]); } 
   for( 
   int i=head[x];i;i=e[i].next) { 
   if(vis[e[i].to]) 
   continue; fa[e[i].to][ 
   0]=x; d[e[i].to][ 
   0]=e[i].v; deep[e[i].to]=deep[x]+ 
   1; dfs(e[i].to); } } 
   int lca( 
   int x, 
   int y) { 
   if(deep[x] 
   
     int t=deep[x]-deep[y]; 
    for( 
    int i= 
    0;i<= 
    16;++i) 
    if(( 
    1< 
    
      for( 
     int i= 
     16;i>= 
     0;i--) { 
     if(fa[x][i]!=fa[y][i]) {x=fa[x][i];y=fa[y][i];} } 
     if(x==y) 
     return x; 
     return fa[x][ 
     0]; } 
     int ask( 
     int x, 
     int f) { 
     int ans=inf; 
     int t=deep[x]-deep[f]; 
     for( 
     int i= 
     0;i<= 
     16;++i) { 
     if(t&( 
     1< 
     
       return ans; } 
      int main() { freopen( 
      "truck.in", 
      "r",stdin); freopen( 
      "truck.out", 
      "w",stdout); 
      memset(d,inf, 
      sizeof(d)); 
      scanf( 
      "%d%d",&n,&m); 
      for( 
      int i= 
      1;i<=n;++i) f[i]=i; 
      for( 
      int i= 
      1;i<=m;++i) 
      scanf( 
      "%d%d%d",&a[i].x,&a[i].y,&a[i].v); sort(a+ 
      1,a+m+ 
      1,cmp); 
      for( 
      int i= 
      1;i<=m;++i) { 
      int x=a[i].x,y=a[i].y; 
      int p=find(a[i].x),q=find(a[i].y); 
      if(p!=q) { f[p]=q; add(x,y,a[i].v); add(y,x,a[i].v); tot++; 
      if(tot==n- 
      1) 
      break; } } 
      for( 
      int i= 
      1;i<=n;++i) 
      if(!vis[i]) dfs(i); 
      for( 
      scanf( 
      "%d",&q);q;--q) { 
      int x,y; 
      scanf( 
      "%d%d",&x,&y); 
      if(find(x)!=find(y)) { 
       
      printf( 
      "-1\n"); 
      continue;} 
      else { 
      int t=lca(x,y); 
      printf( 
      "%d\n",min(ask(x,t),ask(y,t))); } } 
      return 
      0; } 
      
     
    
  

4.

#include 
    #include 
    #include 
    using namespace std; int n,x1=0,x2=0; long long ans=0; int main() { freopen("block.in","r",stdin); freopen("block.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&x1); if(x1>x2) ans+=x1-x2; x2=x1; } printf("%I64d\n",ans); return 0; }

5.

#include 
    #include 
    #include 
    using namespace std; #define N  int n,a[N],ans; int main() { freopen("flower.in","r",stdin); freopen("flower.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); short int flag=0;ans=1; for(int i=1;i<=n-1;++i) { if(a[i+1]>=a[i]&&flag!=1) flag=1,ans++; if(a[i+1]<=a[i]&&flag!=2) flag=2,ans++; } printf("%d\n",ans); return 0; }
#include 
    #include 
    #include 
    using namespace std; int n,m,p; short int mp[31][31]; short int mark[31][31][31][31]; int xx[4]={ 
  0,0,1,-1},yy[4]={ 
  1,-1,0,0}; struct data { int x,y,kx,ky; int step; }q[]; bool jud(int x,int y,int kx,int ky) { if(x<1||y<1||x>n||y>m||!mp[x][y]||!mp[kx][ky])return 0; if(mark[x][y][kx][ky])return 0; mark[x][y][kx][ky]=1; return 1; } void search() { memset(mark,0,sizeof(mark)); int t=0,w=0; int ex,ey,x,y,kx,ky; scanf("%d%d%d%d%d%d",&q[0].kx,&q[0].ky,&q[0].x,&q[0].y,&ex,&ey); if(ex==q[0].x&&ey==q[0].y){ 
  printf("0\n");return;} mark[q[0].x][q[0].y][q[0].kx][q[0].ky]=1; while(t<=w) { for(int i=0;i<4;++i) { x=q[t].x,y=q[t].y; kx=q[t].kx+xx[i],ky=q[t].ky+yy[i]; if(x==kx&&y==ky){ 
  x=q[t].kx;y=q[t].ky;} if(jud(x,y,kx,ky)) { w++; q[w].x=x;q[w].y=y; q[w].kx=kx;q[w].ky=ky; q[w].step=q[t].step+1; if(x==ex&&y==ey){ 
  printf("%d\n",q[w].step);return;} } } t++; } printf("-1\n"); return; } int main() { freopen("puzzle.in","r",stdin); freopen("puzzle.out","w",stdout); scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",&mp[i][j]); for(int i=1;i<=p;++i) { search(); } return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218482.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:09
下一篇 2026年3月18日 上午7:09


相关推荐

  • 6 个接私活的网站,你有技术就有钱!

    6 个接私活的网站,你有技术就有钱!公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 大家好 我是发哥 很高兴跟大家再次见面 上周我在 GitHubDaily 公众号上发布了一篇文章 分享靠写

    2025年10月24日
    12
  • 快速关机工具

    快速关机工具最近有很多人说在 Win7 系统中

    2026年3月16日
    3
  • vscode html注释快捷键_宇宙最强vscode教程(基础篇)

    vscode html注释快捷键_宇宙最强vscode教程(基础篇)本文主要介绍vscode在工作中常用的快捷键及插件,目标在于提高工作效率本文的快捷键是基于mac的,windows下的快捷键放在括号里Cmd+Shift+P(winCtrl+Shift+P)零、快速入门有经验的可以跳过快速入门或者大致浏览一遍1.命令面板命令面板是vscode快捷键的主要交互界面,可以使用f1或者Cmd+Shift+P(winCtrl+Shift+P)打开。在命令…

    2022年6月9日
    52
  • print和println的区别

    print和println的区别其实两者就打印来说的话 是没有什么区别的 但是要注意的一点就是 print 打印出来的内容是不能够自动换行的 而 println 可以 虽然概念很简单 但是两者运用到不同的场景下却有不同的作用 比如打印带 三角形 如果使用 println 的话是不能够打印出来的 打印出来的结果是每一行都只有一颗 但是使用 print 可以实现

    2026年3月18日
    2
  • string和stringbuffer和stringbuilder的性能(Java是什么意思)

    【学习背景】主要是想通过OpenJDK提供的JMH工具测试下String、StringBuilder及StringBuffer字符串拼接的效率如何~关于JMH的介绍及具体使用,我的这篇博文中有介绍:Java–☀️面试官:LinkedList真的比ArrayList添加元素快?❤️‍本文通过OpenJDKJMH带你揭开真相《⭐建议收藏⭐》当然,除了主要验证三者的字符串拼接效率之外,还会对三者做一些区别分析及常见面试问题总结,希望加深自己对这三者的认知,分享出来,也希望能帮助到有需要的小伙伴~

    2022年4月11日
    37
  • 数字图像处理(19): 边缘检测算子(Roberts算子、Prewitt算子、Sobel算子 和 Laplacian算子)

    数字图像处理(19): 边缘检测算子(Roberts算子、Prewitt算子、Sobel算子 和 Laplacian算子)目录 1 边缘检测的基本原理 2 边缘检测算子分类 3 梯度 3 1 图像梯度 3 2 梯度算子 4Roberts 算子 4 1 基本原理 4 2 代码示例 5Prewitt 算子 5 1 基本原理 5 2 代码示例 6Sobel 算子 6 1 基本原理 6 2 代码示例 7Laplacian 算子 7 1 基本原理 7 2 代码示例 8 小结 8

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号