9.30 noip模拟试题
2016-09-30 20:03
351 查看
时限均为1s,内存 256MB
1、某种密码(password.*)
关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY。若KEY=∑▒〖Ai*Bi〗,则密文就是原文的一组合法密码。
现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文。
【输入数据】
第一行两个数N,KEY,意义同题目描述;
第二行N个数表示原文A,意义同题目描述。
【输出数据】
一个数ANS,表示对于原文A和KEY,有多少组可行的密文B。
【输入样例】
3 2
1 1 2
【输出样例】
2
【样例说明】
密文110,1*1+1*1+0*2=2
密文001,0*1+0*1+1*2=2
一共两组可行的密文。
【数据约定】
60%数据满足N<=25
100%数据满足N<=40,-maxlongint<=∑▒Ai<=maxlongint
暴力+hash
View Code
1、某种密码(password.*)
关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY。若KEY=∑▒〖Ai*Bi〗,则密文就是原文的一组合法密码。
现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文。
【输入数据】
第一行两个数N,KEY,意义同题目描述;
第二行N个数表示原文A,意义同题目描述。
【输出数据】
一个数ANS,表示对于原文A和KEY,有多少组可行的密文B。
【输入样例】
3 2
1 1 2
【输出样例】
2
【样例说明】
密文110,1*1+1*1+0*2=2
密文001,0*1+0*1+1*2=2
一共两组可行的密文。
【数据约定】
60%数据满足N<=25
100%数据满足N<=40,-maxlongint<=∑▒Ai<=maxlongint
暴力+hash
/*本来能A的 但写wa了 这种题又没法拍 哎QAQ*/ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 1010 using namespace std; int n,m,k,f[maxn][maxn],dis[maxn][maxn]; int x1,x2,y1,y2,ans,step; struct node{ int x,y,s; }; int xx[4]={0,0,1,-1}; int yy[4]={1,-1,0,0}; queue<node>q; void Bfs(){ while(!q.empty()){ node t=q.front();q.pop(); dis[t.x][t.y]=t.s; for(int i=0;i<4;i++){ int nx=t.x+xx[i]; int ny=t.y+yy[i]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&f[nx][ny]==0){ f[nx][ny]=1;dis[nx][ny]=t.s+1; q.push((node){nx,ny,t.s+1}); } } } } int Judge(int S){ if(dis[x1][y1]<S)return -1;//这里没考虑到 memset(f,0,sizeof(f)); f[x1][y1]=1; while(!q.empty())q.pop(); q.push((node){x1,y1,0}); while(!q.empty()){ node t=q.front();q.pop(); if(t.x==x2&&t.y==y2) return t.s;//开始wa的时候是返回01 并且直接改 for(int i=0;i<4;i++){ int nx=t.x+xx[i]; int ny=t.y+yy[i]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&f[nx][ny]==0&&dis[nx][ny]>=S){ f[nx][ny]=1; q.push((node){nx,ny,t.s+1}); } } } return -1; } int main() { freopen("escape.in","r",stdin); freopen("escape.out","w",stdout); scanf("%d%d%d",&k,&n,&m); scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1++;x2++;y1++;y2++; int x,y; memset(dis,127/3,sizeof(dis)); for(int i=1;i<=k;i++){ scanf("%d%d",&x,&y); x++;y++; q.push((node){x,y,0}); f[x][y]=1;dis[x][y]=0; } Bfs(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) printf("%d ",dis[i][j]); printf("\n"); } int l=0,r=maxn*maxn; while(l<=r){ int mid=(l+r)/2; int tmp=Judge(mid); if(tmp!=-1){ l=mid+1;ans=mid; step=tmp; } else r=mid-1; } printf("%d %d\n",ans,step); return 0; }
View Code
相关文章推荐
- 10.23 noip模拟试题
- NOIP2011-普及组复赛模拟试题-第二题-买票
- 11.14 noip模拟试题
- jzoj 3076. 【备战NOIP2012图论专项模拟试题】位图
- CCF-NOIP-2018 提高组(复赛) 模拟试题(一)
- CCF-NOIP-2018 提高组(复赛) 模拟试题(七)
- 9.26 noip模拟试题
- NOIP2012 模拟试题二 腾讯大战360
- 9.20 noip模拟试题
- (NOIP2015)复赛模拟试题 vijos1165 火烧赤壁
- 【备战NOIP2012图论专项模拟试题】位图
- 3076. 【备战NOIP2012图论专项模拟试题】位图 (Standard IO)
- 冲刺NOIP2011 模拟试题(七)
- 【备战NOIP2012图论专项模拟试题】外星人入侵
- 3077. 【备战NOIP2012图论专项模拟试题】外星人入侵 (Standard IO)
- 【图-最小生成树】NOIP2010 模拟试题 新的开始
- 10.3 noip模拟试题
- 10.11 noip模拟试题
- 3078. 【备战NOIP2012图论专项模拟试题】无线通讯网 (Standard IO)
- 9.21 noip模拟试题