CSP認證-第四次培訓(2019.9.11)

B題 碰撞的小球

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

簡單模擬題。具體思路詳見註釋。node

#include <bits/stdc++.h>
using namespace std;
struct node
{ 
 
   
    int pos,d;//球的位置,方向
}a[110];
int n,t,l,tmp;
int main()
{ 
 
   
    ios::sync_with_stdio(false);
    cin>>n>>l>>t;
    for(int i=1;i<=n;i++)
    { 
 
   
        cin>>a[i].pos;
        a[i].d=1;//初始方向均向右,每秒位置加上d(d只能等於1或-1)
    }
    for(int i=1;i<=t;i++)//遍歷時間
    { 
 
   
        for(int j=1;j<=n;j++)//遍歷單個小球,處理碰牆狀況
        { 
 
   
            tmp=a[j].pos+a[j].d;
            if(tmp==l||tmp==0){ 
 
   a[j].pos=tmp;a[j].d=(-a[j].d);}//碰到牆,反向
            else a[j].pos+=a[j].d;//未碰牆,按原方向移動一個單位長度
        }
        for(int j=1;j<=n;j++)//遍歷尋找兩個相同位置的小球,處理兩球相撞狀況
            for(int k=j+1;k<=n;k++)
            { 
 
   
                if(a[j].pos==a[k].pos)//兩球相撞,兩球均反向
                { 
 
   
                    a[j].d=(-a[j].d);
                    a[k].d=(-a[k].d);
                }
            }
    }
    for(int i=1;i<=n;i++)
        i==n?printf("%d\n",a[i].pos):printf("%d ",a[i].pos);
    return 0;
}

D題 消除類遊戲

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
數據很小,直接暴力。ios

100分 AC代碼:c++

#include <cstdio>
#include <iostream>
using namespace std;
bool vis[40][40];
int n,m,x1,x2,y1,y2,tmp,a[40][40];
int main()
{ 
 
   
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        { 
 
   
            tmp=0;x1=x2=i;//記得初始化x一、x2(x一、x2爲豎行能夠消去的區間)
            for(int k=i;k<=n;k++)
            { 
 
   
                if(a[k][j]==a[i][j]){ 
 
   x2=k;tmp++;}
                else break;
            }
            for(int k=i-1;k>=1;k--)
            { 
 
   
                if(a[k][j]==a[i][j]){ 
 
   x1=k;tmp++;}
                else break;
            }
            if(tmp>=3)
            { 
 
   
                for(int k=x1;k<=x2;k++)
                    vis[k][j]=1;
            }
            tmp=0;y1=y2=j;//記得初始化y一、y2(y一、y2爲橫行能夠消去的區間)
            for(int k=j;k<=m;k++)
            { 
 
   
                if(a[i][k]==a[i][j]){ 
 
   y2=k;tmp++;}
                else break;
            }
            for(int k=j-1;k>=1;k--)
            { 
 
   
                if(a[i][k]==a[i][j]){ 
 
   y1=k;tmp++;}
                else break;
            }
            if(tmp>=3)
            { 
 
   
                for(int k=y1;k<=y2;k++)
                    vis[i][k]=1;
            }
        }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        { 
 
   
            if(vis[i][j]==1)a[i][j]=0;
            j==m?printf("%d\n",a[i][j]):printf("%d ",a[i][j]);
        }
    return 0;
}

A題 跳一跳

在這裏插入圖片描述
100分 AC代碼:web

#include <bits/stdc++.h>
using namespace std;
int opt,x,ans;
int main()
{ 
 
   
    ios::sync_with_stdio(false);
    x=1;ans=0;
    while(cin>>opt&&opt)
    { 
 
   
        if(opt==1)x=1;
        else
        { 
 
   
            if(x==1)x=2;
            else x+=2;
        }
        ans+=x;
    }
    printf("%d\n",ans);
    return 0;
}

C題 數位之和

在這裏插入圖片描述
100分 AC代碼:svg

#include <bits/stdc++.h>
using namespace std;
int n,d,ans;
int main()
{ 
 
   
    ios::sync_with_stdio(false);
    cin>>n;
    while(n)
    { 
 
   
        d=n%10;
        ans+=d;
        n=n/10;
    }
    printf("%d\n",ans);
    return 0;
}

本文同步分享在 博客"nefu_ljw"(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。url

相關文章
相關標籤/搜索