noip历届签到题题解.docx
- 文档编号:2093325
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:12
- 大小:16.70KB
noip历届签到题题解.docx
《noip历届签到题题解.docx》由会员分享,可在线阅读,更多相关《noip历届签到题题解.docx(12页珍藏版)》请在冰豆网上搜索。
noip历届签到题题解
noip历届签到题题解
石头剪刀布//2014
联合权值
无线网络发射器
寻找道路
石头剪刀布
打表,找出对应关系。
#include
#include
usingnamespacestd;
constintm[5][5]={
0,0,1,1,0,
1,0,0,1,0,
0,1,0,0,1,
0,0,1,0,1,
1,1,0,0,0,
};
inta[205],b[205];
intmain()
{
intn,na,nb;
scanf("%d%d%d",&n,&na,&nb);
for(inti=0;i scanf("%d",&a[i]); for(inti=0;i scanf("%d",&b[i]); intsa=0,sb=0; for(inti=0;i { sa=sa+m[a[i%na]][b[i%nb]]; sb=sb+m[b[i%nb]][a[i%na]]; } printf("%d%d",sa,sb); return(0); } 联合权值 #include #include #include #include usingnamespacestd; longlongn,p,k,w[200010]; boolvis[200010]; vector voiddfs(intx,intlast1,intlast2) { vis[x]=1; longlongt=0,t2=0,t3=0,t4=0; for(inti=0;i { inty=edge[x][i]; if(! vis[y]) { vis[y]=1; if(last1! =0) { k=(k+w[y]*w[last1])%10007; p=max(p,w[y]*w[last1]); } t2+=t*w[y];t+=w[y]; if(w[y]>=t3) { t4=t3;t3=w[y]; } if(w[y] dfs(y,x,last1); } } p=max(t3*t4,p);k=(k+t2)%10007; } intmain() { cin>>n; for(inti=1;i { intu,v; cin>>u>>v; edge[u].push_back(v); edge[v].push_back(u); } for(inti=1;i<=n;i++)cin>>w[i]; dfs(1,0,0); cout< return0; } 有关图的问题,到时候再解决。 无线网络发射器 #include #include usingnamespacestd; intmap[200][200]; intd,n,x,y,a,fa; intmain() { longlongans=0; scanf("%d%d",&d,&n); for(inti=0;i { scanf("%d%d%d",&x,&y,&a); map[x][y]=a; } for(inti=0;i<=128;i++) for(intj=0;j<=128;j++) { longlongt=0; for(intu=i-d;u<=i+d;u++) for(intv=j-d;v<=j+d;v++) if(u>=0&&u<=128&&v>=0&&v<=128) t=t+map[u][v]; if(ans { ans=t; fa=1; } else if(t==ans) fa=fa+1; } printf("%d%lld",fa,ans); return(0); 暴力搜索,不解释。 寻找道路 先反向,搜出所有与终点相连接的点 然后再删除所有已加边,正向再加一遍边 搜一遍,只要有点的出边的出点为false(不与终点连通),它就为false(刚开始只要它与终点连通就true) 然后再SPFAtrue的点 就ok了 DFS想直接搜出来符合条件的貌似不行...... #include #include #include #include usingnamespacestd; constintINF=999999; intn,m,s,t,g[20000],tot,dis[20000],q[20000],a[200100],b[200100]; boolvis[20000],used[20000],inq[20000]; structedge { intt; intnext; }e[500000]; voidaddedge(inta,intb) { tot+=1; e[tot].t=b; e[tot].next=g[a]; g[a]=tot; } voiddfss(intx) { if(used[x])return; used[x]=true; for(inti=g[x];i;i=e[i].next) { if(! used[e[i].t])dfss(e[i].t); } } voidSPFA() { memset(dis,INF,sizeof(dis)); inthead=0,tail=1; dis[s]=0; q[tail]=s; inq[s]=true; while(head! =tail) { head+=1; head=((head-1)%20000)+1; intx=q[head]; inq[x]=false; for(inti=g[x];i;i=e[i].next) { if(dis[e[i].t]>dis[x]+1&&vis[e[i].t])//SPFA只走vis=true的点 { dis[e[i].t]=dis[x]+1; if(! inq[e[i].t]) { tail+=1; tail=((tail-1)%20000)+1; q[tail]=e[i].t; inq[e[i].t]=true; } } } } } intmain() { scanf("%d%d",&n,&m); for(inti=1;i<=m;i++) { scanf("%d%d",&a[i],&b[i]); addedge(b[i],a[i]); } scanf("%d%d",&s,&t); dfss(t);//先反向搜一遍,与终点不连通的不会被走到 if(! used[s]) printf("-1"); else { memset(e,0,sizeof(e)); memset(g,0,sizeof(g)); tot=0; for(inti=1;i<=m;i++) addedge(a[i],b[i]);//再正向+边,判断,若其有一个边的终点不与终点连通,即不符合,FALSE for(inti=1;i<=n;i++) { if(used[i])vis[i]=true; for(intj=g[i];j;j=e[j].next) if(! used[e[j].t])vis[i]=false; } SPFA();//SPFA只走vis=true的点 printf("%d",dis[t]); } return0; } 转圈游戏//2013 火柴排队 积木大赛 花匠 转圈#include #include usingnamespacestd; intn,m,k,x; longlongpower(inta,intb,intmod) { if(b==0)return1; longlongt=power(a,b/2,mod); t=(t*t)%mod; if(b%2) return(t*a)%mod; else return(t); } intmain() { scanf("%d%d%d%d",&n,&m,&k,&x); longlongleft=power(10,k,n)*m; left%=n; printf("%d\n",(x+left)%n); return(0); } 游戏 快速幂。 火柴排队 #include #include #include usingnamespacestd; intd[1000001]; longlongans=0; voidstablesort(int*a,intl,intmid,intr) { inti=l,j=mid+1,k=l; while(i<=mid&&j<=r) if(a[i]<=a[j])d[k++]=a[i++]; else{d[k++]=a[j++];ans+=mid+1-i;ans=ans%99999997;} while(i<=mid) d[k++]=a[i++]; while(j<=r) d[k++]=a[j++]; for(intq=l;q<=r;q++)a[q]=d[q]; } voidmerge(int*a,intl,intr) { if(l { intmid=(l+r)/2; merge(a,l,mid); merge(a,mid+1,r); stablesort(a,l,mid,r); } } intn,c[1000001]; structdata{ intxx,yy;}a[1000001],b[1000001]; inlineintcmp(constvoid*a,co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- noip 历届 签到 题解
![提示](https://static.bdocx.com/images/bang_tan.gif)