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 : 解方程

听说要上高精度…(高精度厌烦综合征)

原文地址:https://www.cnblogs.com/Uninstalllingyi/p/11147448.html