CSU1213/1214/1215/1217/1220/1221/1224/1003/1007/1009/1030/1067/1087/1100/1111/1112/1115/1158

太水了,就不分开了,一个个随便说说好了

A

二叉树有个性质,节点序号为n的子节点序号分别为2n和2n+1

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int a,b;
    while(cin>>a>>b){
        while(a!=b){
            if(a>b){
                a/=2;
            }else if(b>a){
                b/=2;
            }
        }
        cout<<a<<endl;
    }
    return 0;
}

B

计数排序的改版?

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    //ios::sync_with_stdio(false);
    int a,b,c;
    string s;
    while(getline(cin,s)){
        a=b=c=0;
        for(int i=0;i<s.size();++i){
            if(s[i]=='1'){
                ++a;
            }else if(s[i]=='2'){
                ++b;
            }else if(s[i]=='3'){
                ++c;
            }
        }
        while(b--){
            cout<<'2';
        }while(a--){
            cout<<'1';
        }while(c--){
            cout<<'3';
        }
        cout<<endl;
    }
    return 0;
}

C

唔,STL有

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
struct node{
    int a,b;
};
bool cmp(node a,node b){
    return a.a<b.a;
}
node arr[10*N];
int main()
{
    ios::sync_with_stdio(false);
    int n;
    while(cin>>n){
        for(int i=0;i<n;++i){
            cin>>arr[i].a>>arr[i].b;
        }
        stable_sort(arr,arr+n,cmp);
        for(int i=0;i<n;++i){
            cout<<arr[i].a<<' '<<arr[i].b<<endl;
        }
    }
    return 0;
}

D

数据很水,直接模拟过就好了

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    map<int,int> m;
    int n,temp;
    while(cin>>n){
        m.clear(); 
        for(int i=0;i<n;++i){
            cin>>temp;
            m[temp]++;
        }
        for(map<int,int>::iterator a=m.begin(),b=m.end();a!=b;++a){
            if(a->second%2){
                cout<<a->first<<endl;
                break;
            }
        }
    }
    return 0;
}

本来应该是考验这个性质的:如果对一串序列连续使用异或,结果相当于出现次数为奇数个的数连续使用异或

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int n,num,temp;
    while(cin>>n){
        num=0;
        for(int i=0;i<n;++i){
            cin>>temp;
            num^=temp;
        }
        cout<<num<<endl;
    }
    return 0;
}

E

输入统计然后遍历

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int n,m,ans,temp,per;
    map<int,int> mp;
    while(cin>>n>>m){
        mp.clear();
        ans=-1;
        for(int i=0;i<m;++i){
            cin>>temp;
            mp[temp]++;
        }
        for(map<int,int>::iterator a=mp.begin(),b=mp.end();a!=b;++a){
            if(a->second>ans){
                ans=a->second;
                per=a->first;
            }
        }
        cout<<per<<endl;
    }
    return 0;
}

F

输入排序然后输出

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
double gra[1001000];
int main()
{
    ios::sync_with_stdio(false);
    int n;
    while(cin>>n){
        for(int i=0;i<n;++i){
            cin>>gra[i];
        }
        sort(gra,gra+n,greater<double>());
        cout<<fixed<<setprecision(2)<<gra[0]<<' '<<gra[1]<<' '<<gra[2]<<' '<<endl;
    }
    return 0;
}

G

基础的BFS

#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
int chessboard[330][330];
int opx[]={1,1,-1,-1,2,-2,2,-2};
int opy[]={2,-2,2,-2,1,1,-1,-1};
int main()
{
    ios::sync_with_stdio(false);
    int n,m,x,y,cnt,tempx,tempy;
    queue<pair<pair<int,int>,int> > que;
    while(~scanf("%d%d",&n,&m)){
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                chessboard[i][j]=1;
            }
        }
        scanf("%d%d",&x,&y);
        que.push(make_pair(make_pair(x,y),0));
        chessboard[x][y]=0;
        scanf("%d%d",&x,&y);
        while(!que.empty()){
            tempx=que.front().first.first;
            tempy=que.front().first.second;
            cnt=que.front().second;
            if(tempx==x&&tempy==y){
                printf("%d\n",cnt);
                break;
            }
            que.pop();
            for(int i=0;i<8;++i){
                if(tempx+opx[i]<=n&&0<tempx+opx[i]&&tempy+opy[i]<=m&&0<tempy+opy[i]&&chessboard[tempx+opx[i]][tempy+opy[i]]){
                    que.push(make_pair(make_pair(tempx+opx[i],tempy+opy[i]),cnt+1));
                    chessboard[tempx+opx[i]][tempy+opy[i]]=0;
                }
            }
        }
        if(que.empty()){
            cout<<-1<<endl;
        }
        while(!que.empty()){
            que.pop();
        }
    }
    return 0;
}

H

寒假写的了……反正没难度

#include <stdio.h>
int main(void)
{
    int day,T,t=0,n,i,j,exp,x;
    scanf("%d",&T);
    for(i=0;i<T;i++){
        scanf("%d",&n);
        for(j=exp=day=0;j<n;j++){
            scanf("%1d",&x);
            if(x){
                t=1;
                day++;
                if(day<6){
                    exp+=10*day;
                }else{
                    day-=5; 
                    exp+=10*day;
                }
            }else{
                t=0;
                day=0;
            }
        }
        if(exp>749){
            printf("8\n");
        }else{
            printf("%d\n",(exp+50)/100);
        }
    }
    return 0;
}

I

Emmmmmmmmmm

测试人品的时候到了

反正就是你输出一个大写字母,如果系统随机出来的和你一样就AC

推荐写脚本自动交……

J

象征性写一写

#include <stdio.h>
int main(void)
{
    int i,left,right,up,down,T,x,y;
    scanf("%d",&T);
    for(i=0;i<T;i++){
        scanf("%d %d",&x,&y);
        scanf("%d %d %d %d",&left,&down,&right,&up);
        if(x<=right&&x>=left&&y<=up&&y>=down){
            if(x<right&&x>left&&y>down&&y<up){
                printf("Inside\n");
            }else{
                printf("On\n");
            }
        }else{
            printf("Outside\n");
        }
    }
    return 0;
}
/**********************************************************************
    Problem: 1007
    User: CSUzick
    Language: C
    Result: AC
    Time:0 ms
    Memory:1092 kb
**********************************************************************/

K

稍微有点新意的题目

要数学期望最大,最好的方案是最好的配最好的,最坏的配最坏的,过程省略

顺便这里我为了能直接用sort不得以将二维顺序换了一下,顺便一提这样会影响效率

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
double num[11][101];
int main()
{
    ios::sync_with_stdio(false);
    int n,m;
    while(cin>>n>>m&&(n||m)){
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                cin>>num[j][i];
            }
        }
        for(int i=0;i<m;++i){
            sort(num[i],num[i]+n);
        }
        double ans=0;
        for(int i=0;i<n;++i){
            double temp=1.0;
            for(int j=0;j<m;++j){
                temp*=num[j][i];
            }
            ans+=temp;  
        }
        cout<<fixed<<setprecision(4)<<ans<<endl;
    }
    return 0;
}

L

这题我就是想放放我的打表程序(毕竟字符太多交不了23333333)

打表:

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    fwrite;
    int i,j;
    cout<<'{';
    for(i=2;i<1299710;++i){
        for(j=2;j<=i/2;++j){
            if(!(i%j)){
                break;
            }
        }if(j>i/2){
            cout<<i<<',';
        } 
    }
    return 0;
}

本体:

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int prime[]={/*这里把上个代码输出的文件内容直接复制过来hhhh*/}
int main()
{
    ios::sync_with_stdio(false);
    int n,temp;
    cin>>n;
    while(n--){
        cin>>temp;
        auto a=lower_bound(prime,prime+100000,temp),b=upper_bound(prime,prime+100000,temp);
        if(*a==temp){
            cout<<0<<endl;
            continue;
        }--a;
        cout<<*b-*a<<endl;
    }
    return 0;
}

能A的代码:

#include <bits/stdc++.h>
#define N 1299710
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
bool prime[N];
void griddle()//筛法求素数
{
    mem(prime,true);
    prime[0]=prime[1]=false;
    for(int i=2;i<N;++i){
        if(prime[i]){
            for(int j=i+i;j<N;j+=i){
                prime[j]=false;
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    int n,temp,ans1,ans2;
    griddle();
    cin>>n;
    while(n--){
        cin>>temp;
        if(prime[temp]){
            cout<<0<<endl;
            continue;
        }else{
            ans1=ans2=temp;
            while(!prime[++ans1]);
            while(!prime[--ans2]);
            cout<<ans1-ans2<<endl;
        }
    }
    return 0;
}

M

其实只要前一个和后一个不一样就得重新统计了,所以直接这样写:

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    string line;
    while(getline(cin,line)){
        int t=1,ans=0;
        for(int i=1;i<line.size();++i){
            if(line[i]==line[i-1]){
                ++t;
                ans=max(ans,t);
            }else{
                t=1;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

N

懒得说了

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int h1,h2,m1,m2,time1,time2,day=1;
    while(cin>>h1>>m1>>h2>>m2){
        time1=h1*60+m1;
        time2=h2*60+m2;
        time2-=time1;
        if(time2<0){
            cout<<"Day "<<day++<<": Joking"<<endl;
        }else{
            if(time2%30){
                cout<<"Day "<<day++<<": "<<time2/30+1<<' '<<(time2/30+1)*30-time2<<endl;
            }else{
                cout<<"Day "<<day++<<": "<<time2/30<<' '<<0<<endl;
            }
        }
    }
    return 0;
}

O

没啥好说

#include <stdio.h>
#include <string.h>
int main()
{
    int n,i;
    char str[10];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",str);
        if(strlen(str)==5){
            printf("3\n");
        }else if(str[0]=='o'&&str[1]=='n'||str[0]=='o'&&str[2]=='e'||str[1]=='n'&&str[2]=='e'){
            printf("1\n");
        }else{
            printf("2\n");
        }
    }
    return 0;
}

P

同上

#include <stdio.h>
int main()
{
    int n,a,b,c,i;
    double m,q,w,z;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d%d%lf",&a,&b,&m);
        q=(double)(a+b)/3;
        w=a-q>a-(int)q+0.5?a-q-1:a-q;
        z=m/q*w;
        if(z<0){
            z=0;
        }
        printf("%.0f\n",z);
    }
    return 0;
}

Q

学会用各种库来省力,比如stoi、atoi之类的(当然,得适度)

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int main()
{
    char str[20];
    int n,T,i,j,key[100],s;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d\n",&T);
        memset(key,0,sizeof(key)); 
        for(j=0;j<T;j++){
            gets(str);
            if(str[0]=='L'){
                key[j]=-1;
            }else if(str[0]=='R'){
                key[j]=1;
            }else{
                key[j]=key[atoi(str+8)-1];
            }
        }
        s=0;
        for(j=0;j<T;j++){
            s+=key[j];
        }
        printf("%d\n",s);
    }
    return 0;
 } 

R

直接看代码比较容易理解

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    vector<string> name;
    int t,n,cnt[1010],ans,j;
    cin>>t;
    while(t--){
        cin>>n;
        name.clear();
        string temp;
        for(int i=0;i<n;++i){
            cin>>temp;
            name.push_back(temp);
            cnt[i]=0;
        }
        sort(name.begin(),name.end());
        for(int i=0;i<n-1;++i){
            for(j=0;j<name[i].size()&&j<name[i+1].size()&&name[i][j]==name[i+1][j];++j);
            cnt[i+1]=max(cnt[i+1],j+1);
            cnt[i]=max(cnt[i],j+1);
        }
        for(int i=ans=0;i<n;++i){
            ans+=cnt[i];
        //  cout<<cnt[i]<<endl;
        }
        cout<<ans<<endl;
    }
    return 0;
}

S

Emmmmmm,substr是个好方法

#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
int main()
{
    //ios::sync_with_stdio(false);
    int a,b,d,e;
    string str;
    while(cin>>a>>b>>d>>e){
        cin>>str;
        cout<<str.substr(e,a*b%d)<<endl;
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值