CSPJ游记

· · 生活·游记

当时对于复赛,我没有一点信心,模拟赛时的150(2024)分仍然刺激着我的内心,但看到题目才发现,T1和T2比上一年简单多少都不知道!

进了赛场,我看了一下第一题,太简单了,但为了不出问题,我用了最简单的方法,59行大代码,AC;

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define int long long
int a[N];
signed main(){
    string s;
    cin>>s;
    int g=1;
    for(int i=0;i<s.size();i++){
       if(s[i]=='0'){
            a[g]=0;
           g++;
       } 
        if(s[i]=='1'){
            a[g]=1;
           g++;
       }
        if(s[i]=='2'){
            a[g]=2;
           g++;
       }
        if(s[i]=='3'){
            a[g]=3;
           g++;
       }
        if(s[i]=='4'){
            a[g]=4;
           g++;
       }
        if(s[i]=='5'){
            a[g]=5;
           g++;
       }
        if(s[i]=='6'){
            a[g]=6;
           g++;
       }
        if(s[i]=='7'){
            a[g]=7;
           g++;
       }
        if(s[i]=='8'){
            a[g]=8;
           g++;
       }
        if(s[i]=='9'){
            a[g]=9;
           g++;
       }
    }
    sort(a+1,a+g+1);
    for(int i=g;i>=2;i--){
        cout<<a[i];
    }
    return 0;
}

第二题更简单,只要懂点数学,找一下规律,就能做出来。我是42行代码过,AC;

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[110];
signed main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n*m;i++){
        cin>>a[i];
    }
    int g=a[1];
    int w=1;
    for(int i=1;i<=n*m;i++){
        if(a[i]>g){
            w++;
        }
    }
    if(w%n==0){
        cout<<w/n<<" ";
        if((w/n)%2==0){
            cout<<1;
        }else{
            cout<<n;
        }
    }else{
        cout<<w/n+1<<" ";
        if((w/n+1)%2==1){
            cout<<w%n;
        }else{
            cout<<n-w%n+1;
        }
    }
    return 0;
}

第三题根本不会做,直接乱写一通,结果喜提10分;

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5*1e5+10;
int a[N];
bool flag[N];
signed main(){
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(a[i]==k){
            ans++;
            flag[i]=true;
        }
    }
    int g,w;
    for(int i=1;i<=n;i++){
        if(flag[i]==false){
            g=a[i];
            w=i;
            break;
        }
    }
    for(int i=w+1;i<=n;i++){
        if(g==k){
            ans++;
            int sum=0;
            for(int j=i;j<=n;j++){
                if(flag[j]==false){
                    sum++;
                    g=a[j];
                    i=j;
                    break;
                }
            }
            if(sum==0){
                cout<<ans;
                return 0;
            }
        }
        if(flag[i]==true){
            if(g==k){
                ans++;
            }
            int sum=0;
            for(int j=i+1;j<=n;j++){
                if(flag[j]==false){
                    sum++;
                    g=a[j];
                    i=j;
                    break;
                }
            }
            if(sum==0){
                cout<<ans;
                return 0;
            }
        }else{
            g=g^a[i];
        }
    }
    if(g==k){
        ans++;
    }
    cout<<ans;
    return 0;
}

最后一题看样例拿了12分;

最后总分是100+100+10+12分,估计二等奖!