关于CSP-J的思考与总结(附代码)-学术版论坛-综合-LZM's Blog

关于CSP-J的思考与总结(附代码)

 T1 number

#include<bits/stdc++.h>
using namespace std;
string s;
int ans[10];
int main(){
    freopen("number.in","r",stdin);
    freopen("number.out","w",stdout);
    cin>>s;
    for(int i=0;i<(int)s.length();i++){
        if(s[i]>='0' && s[i]<='9'){
            ans[s[i]-'0']++;
        }
    }for(int i=9;i>=0;i--){
        for(int j=1;j<=ans[i];j++)cout<<i;
    }
    return 0;

}

简单的计数+输出

T2 seat

其实只是一个数论,考试脑抽写了个递归

#include<bits/stdc++.h>
using namespace std;
int n,m,r;
int a[105];
bool cmp(int asd,int qwe){
    return asd>qwe;
}
void dfs(int x,int y,int step){
    if(step==r){
        cout<<y<<" "<<x;
        return;
    }
    if(y%2==1 && x!=n)dfs(x+1,y,step+1);
    else if(y%2==0 && x!=1)dfs(x-1,y,step+1);
    else if(y%2==1 && x==n)dfs(x,y+1,step+1);
    else if(y%2==0 && x==1)dfs(x,y+1,step+1);
    return;
}
int main(){
    freopen("seat.in","r",stdin);
    freopen("seat.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n*m;i++){
        cin>>a[i];
    }
    r=a[1];
    sort(a+1,a+n*m+1,cmp);
    for(int i=1;i<=n*m;i++){
        if(a[i]==r){
            r=i;
            break;
        }
    }
    dfs(1,1,1);
    return 0;
}

T3 xor

考试代:

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
int a[500005];
int main(){
    freopen("xor.in","r",stdin);
    freopen("xor.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    //30'
    if(k==0){
        int i;
        for(i=1;i<=n;i++){
            if(a[i]==0)ans++;
            if(a[i]==1 && a[i+1]==1){
                i++;
                ans++;
            }
        }
    }else{
        int i;
        for(i=1;i<=n;i++){
            if(a[i]==1)ans++;
            /*
            if(a[i]==0 && a[i+1]==0){
                i++;
                ans++;
            }
            */
        }
    }
    cout<<ans;
    return 0;
}

 

见我的题解

T4 polygon

考试以为能拿36’,结果只拿了12‘

后来才知道dfs暴力能拿40’(QWQ)

考场代码

#include<bits/stdc++.h>
using namespace std;
int n;
int a[5005];
bool cmp(int qweasd,int asdzxc){
    return qweasd<asdzxc;
}
int C(int up,int down){
    int fz=1,fm=1;
    int flag;
    flag=down;
    for(int i=1;i<=up;i++){
        fz=fz*flag;
        flag--;
    }flag=up;
    for(int i=1;i<=up;i++){
        fm=fm*flag;
        flag--;
    }
    //cout<<fm<<" "<<fz<<" ";
    return fz/fm;
}
int main(){
    freopen("polygon.in","r",stdin);
    freopen("polygon.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }sort(a+1,a+n+1,cmp);
    //36'
    int ans=0;
    if(a[1]==a[n] && a[1]==1){
		//cout<<"if1"<<" ";
        for(int i=3;i<=n;i++){
            ans+=C(i,n);
            //cout<<ans<<endl;
        }cout<<ans;
    }else if(n<=2) cout<<0;
    else{
        //12
        if(a[1]+a[2]+a[3]>a[3]*2)cout<<1;
        else cout<<0;
    }
    return 0;
}

详见我的题解

 

请登录后发表评论

LZM‘s AI

LZM‘s AI

LZM's Blog

LZM's Blog