Noip2014提高组真题Day1,2 校模拟7.7
?????这就是教练一天开两场模拟赛的原因吗??????
尽管看到这个东西,我今天一天的模拟赛都格外格外格外的小(慌)心(张),然而还是免不了翻了Day2的T1。翻车天注定,工地去打拼。
Day 1
T1: 生活大爆炸版 石头剪刀布
这题应该是被LuoGu放到普及组试炼场里了的吧?
#include<iostream> using namespace std; int a[4300]; int b[4300]; int ansa,ansb; int Ruler[5][5]={2,0,1,1,0, 1,2,0,1,0, 0,1,2,0,1, 0,0,1,2,1, 1,1,0,0,2}; int main(){ //freopen("rps.in","r",stdin); //freopen("rps.out","w",stdout); int n,na,nb; cin>>n>>na>>nb; for(int i=1;i<=na;i++){ cin>>a[i]; } a[na+1]=-1000; for(int i=1;i<=nb;i++){ cin>>b[i]; } b[nb+1]=-1000; int pa,pb; pa=pb=1; for(int i=1;i<=n;i++,pa++,pb++){ if(pa==na+1){ pa=1; } if(pb==nb+1){ pb=1; } //int res=Compare(a[pa],b[pb]); int res=Ruler[a[pa]][b[pb]]; if(res==1){ ansa++; } if(res==0){ ansb++; } // cout<<"A出 "<<a[pa]<<" B出 "<<b[pb]<<" 判定结果 "<<res<<endl; } cout<<ansa<<" "<<ansb<<endl; }
T2: 联合权值
T3: 飞扬的小鸟
Day 2
T1:无线网络发射器选址
暴力模拟,太简单了吧!!
#include<iostream> using namespace std; int Map[2000][2000]; int F[2000][2000]; int ans; int MAXA; const int offset=40; int main(){ int d,n; int x,y,k; cin>>d>>n; for(int i=1;i<=n;i++){ cin>>x>>y>>k; Map[x+offset][y+offset]=k; } for(int i=0+offset;i<129+offset;i++){ for(int j=0+offset;j<129+offset;j++){ for(int l=1;l<=d;l++){ F[i][j]=Map[i+l][j]+Map[i-l][j]+Map[i][j+l]+Map[i][j-l]+Map[i+l][j+l]+Map[i-l][j-l]+Map[i+l][j-l]+Map[i-l][j+l]; } F[i][j]+=Map[i][j]; MAXA=max(MAXA,F[i][j]); } } for(int i=0+offset;i<129+offset;i++){ for(int j=0+offset;j<129+offset;j++){ if(F[i][j]==MAXA){ ans++; } } } cout<<ans<<" "<<MAXA; }
……
(摆出了做T3的阵仗)
为什么会错呢?
还不是因为你LuoGu大凶
啊!原来我只计算了几个边边角,而题目是让你算整块面积的嘛!
人是惰性动物。既然走上了暴力枚举的道路,就不会回头!
#include<iostream> using namespace std; int Map[2000][2000]; int F[2000][2000]; int ans; int MAXA; const int offset=40; int main(){ int d,n; int x,y,k; cin>>d>>n; for(int i=1;i<=n;i++){ cin>>x>>y>>k; Map[x+offset][y+offset]=k; } for(int i=0+offset;i<129+offset;i++){ for(int j=0+offset;j<129+offset;j++){ for(int s=i-d;s<=i+d;s++){ for(int o=j-d;o<=j+d;o++){ F[i][j]+=Map[s][o]; } } MAXA=max(MAXA,F[i][j]); } } for(int i=0+offset;i<129+offset;i++){ for(int j=0+offset;j<129+offset;j++){ if(F[i][j]==MAXA){ ans++; } } } cout<<ans<<" "<<MAXA; }
改完之后,我对脑科和眼科医院产生了极大的兴趣。
T2:寻找道路
我承认做这题的时候我已经心烦意乱了。因为热的冒汗(鬼晓得为什么在空调机房里我会热的冒汗)
写了好久,连样例都算不出来。最后实在受不了,出去洗了把脸,才勉强写出来个20分的莫名暴力。
#include<iostream> #include<vector> using namespace std; const int MAXN=10001; int n,m,x,y,s,t; bool HaveEdge[MAXN]; int Map[MAXN][MAXN]; bool NoWay[MAXN]; vector<int>Fmap[MAXN]; int main(){ //freopen("road.in","r",stdin); //freopen("road.out","w",stdout); cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x>>y; HaveEdge[x]=true; if(Map[x][y]!=1){ Fmap[y].push_back(x); } Map[x][y]=1; } cin>>s>>t; //HaveEdge[s]=true; //HaveEdge[t]=true; for(int i=1;i<=n;i++){ Map[i][i]=0; if(!HaveEdge[i]&&i!=s&&i!=t){ for(int j=0;j<Fmap[i].size();j++){ NoWay[Fmap[i][j]]=true; } } } for(int i=1;i<=n;i++){ // if(NoWay[i]||!HaveEdge[i]){ if(NoWay[i]){ for(int j=1;j<=n;j++){ Map[j][i]=114514; } } for(int j=1;j<=n;j++){ if(i!=j&&Map[i][j]==0){ Map[i][j]=114514; } } } //cout<<Map[s][t]<<endl; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int k=1;k<=n;k++){ Map[i][j]=min(Map[i][j],Map[i][k]+Map[k][j]); } } } //cout<<Map[s][t]<<endl; if(Map[s][t]>=114514){ cout<<-1; } else{ cout<<Map[s][t]; } }
我也是牛逼233一天的考试用两次弗洛伊德。弗洛伊德狂热粉。
由题解易得,这是一道送分题(滑稽)
所以也看了看LuoGu题解。然后仔细一看………………
我!第!一!遍!写!的!是!正!解!!!!!!!
我把正解推了然后重写了个20分的暴力???????
我*智勇双全说的就是我吧???!!?!
T3 : 解方程
听说要上高精度…(高精度厌烦综合征)