2021ccpc女生赛(山东淄博)

  • G、3G网络
  • K、音乐游戏
  • D、修建道路
  • A、公交线路
  • I、驾驶卡丁车
  • C、连锁商店

补题链接
这一次的开题顺序有点不好,G这个最简单的题目一开始没有开出来,然后开了另一个结果题目有点一个点读漏了,然后就做的复杂了一点,虽然a了,同是五道题,贯穿银铜铁,所以这是一场手速题,麻了,考试之前一直在弄线段树,这次没有,笑死。这一次只拿了一个铜,下次一定!目标金!!加油!

G、3G网络

#include 
using namespace std;

int main()
{
    int n;
    cin>>n;
    int x,y;
    for(int i=0;i<n;i++)
        cin>>x>>y;
        double ans=1.0*n;
        printf("%.12lf",1.0/ans);
        return 0;

}

K、音乐游戏

#include 
using namespace std;
char s[10];
int main()
{
    int n;
    cin>>n;
    int ans=0;
    for(int i=0;i<n;i++)
    {
        getchar();
        cin.getline(s,7);
       // cout<
        for(int j=0;j<6;j++)
            if(s[j]=='-')
            ans++;
    }
    cout<<ans;
        return 0;
}

D、修建道路

#include 
using namespace std;
const int N=200005;
int a[N];
int main()
{
   int n;
   cin>>n;
   long long ans=0;
   for(int i=0;i<n;i++)
    cin>>a[i];
   for(int i=0;i<n-1;i++)
   {
       ans+=max(a[i],a[i+1]);
   }
   cout<<ans<<endl;
        return 0;
}

A、公交线路

#include 
using namespace std;
int a[10];
int main()
{
    int n,m,x,y;
    cin>>n>>x>>y;
    int fl=1,fr=1;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        int k;
        cin>>k;
        if(a[x+i]==k&&a[x-i]!=k)
        {
            fr=0;//往右边走
            break;
        }
        else if(a[x-i]==k&&a[x+i]!=k)
        {
            fl=0;
            break;
        }
        else if(a[x-i]!=k&&a[x+i]!=k)
        {
            fl=1;
            fr=1;
            break;
        }


    }
    if(y<x)
    {
        if(fl==0&&fr!=0)
            cout<<"Right"<<endl;
            else if(fl!=0&&fr==0)
                cout<<"Wrong"<<endl;
            else cout<<"Unsure"<<endl;
    }
    if(y>x)
    {
        if(fl==0&&fr!=0)
            cout<<"Wrong"<<endl;
            else if(fl!=0&&fr==0)
                cout<<"Right"<<endl;
            else cout<<"Unsure"<<endl;
    }
        return 0;
}

I、驾驶卡丁车

#include
using namespace std;
int n,m;
int a[60][60];
int q;
int xi,yi;
int f=1,v;
int main(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        getchar();
        for(int j=1;j<=m;j++){
            char x;
            scanf("%c",&x);
            if(x=='.')a[i][j]=0;
            else if(x=='*'){
                a[i][j]=0;
                xi=i;yi=j;
            }
            else if(x=='#')a[i][j]=1;
        }
    }
    scanf("%d",&q);
    getchar();
    for(int i=1;i<=q;i++){
        char x;
        scanf("%c",&x);
        if(x=='L')f=f%8+1;
        else if(x=='R'){
            if(f==1)f=8;
            else f--;
        }
        else if(x=='U')v++;
        else if(x=='D')v=max(v-1,0);
        bool flag=false;
        int j;
        if(f==1){
            for(j=1;j<=v;j++){
                int x=xi-1,y=yi;
                if(x<1){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                xi=x;yi=y;
            }
        }
        else if(f==3){
            for(j=1;j<=v;j++){
                int x=xi,y=yi-1;
                if(y<1){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                xi=x;yi=y;
            }
        }
        else if(f==5){
            for(j=1;j<=v;j++){
                int x=xi+1,y=yi;
                if(x>n){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                xi=x;yi=y;
            }
        }
        else if(f==7){
            for(j=1;j<=v;j++){
                int x=xi,y=yi+1;
                if(y>m){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                xi=x;yi=y;
            }
        }
        else if(f==2){
            for(j=1;j<=v;j++){
                int x=xi-1,y=yi-1;
                if(x<1||y<1){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                else if(xi-1>=1&&yi-1>=1){
                    if(a[xi-1][yi]==1&&a[xi][yi-1]==1){
                         v=0;
                         flag=true;
                         break;
                    }
                }
                xi=x;yi=y;
            }
        }
        else if(f==4){
            for(j=1;j<=v;j++){
                int x=xi+1,y=yi-1;
                if(x>n||y<1){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                else if(xi+1<=n&&yi-1>=1){
                    if(a[xi+1][yi]==1&&a[xi][yi-1]==1){
                         v=0;
                         flag=true;
                         break;
                    }
                }
                xi=x;yi=y;
            }
        }
        else if(f==6){
            for(j=1;j<=v;j++){
                int x=xi+1,y=yi+1;
                if(x>n||y>m){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                else if(xi+1<=n&&yi+1<=m){
                    if(a[xi+1][yi]==1&&a[xi][yi+1]==1){
                         v=0;
                         flag=true;
                         break;
                    }
                }
                xi=x;yi=y;
            }
        }
        else if(f==8){
            for(j=1;j<=v;j++){
                int x=xi-1,y=yi+1;
                if(x<1||y>m){
                    v=0;
                    flag=true;
                    break;
                }
                if(a[x][y]==1){
                    v=0;
                    flag=true;
                    break;
                }
                else if(xi-1>=1&&yi+1<=m){
                    if(a[xi-1][yi]==1&&a[xi][yi+1]==1){
                         v=0;
                         flag=true;
                         break;
                    }
                }
                xi=x;yi=y;
            }
        }
        if(flag)printf("Crash! %d %d\n",xi,yi);
        else printf("%d %d\n",xi,yi);
    }
    return 0;
}

C、连锁商店

任意门
较有难度一点题就是C题,由于自己不是负责dp这方面,所以还没有开始学,等自己学了dp,再来补这一题!

你可能感兴趣的:(大二,c++,开发语言,后端)