天梯赛2022(L1,L2)

L1-今天我要赢

#include<iostream>

using namespace std;

int main(){
    cout<<"I'm gonna win! Today!"<<endl;
    cout<<"2022-04-23";
    return 0;
}

L1-种钻石

#include<iostream>

using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    cout<<n/m;
    return 0;
}

L1-谁能进图书馆

#include<iostream>

using namespace std;

int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    if(c>=a&&d>=a)
        cout<<c<<"-Y "<<d<<"-Y"<<endl<<"huan ying ru guan";
    else if(c>=a)
        if(c>=b)
            cout<<c<<"-Y "<<d<<"-Y"<<endl<<"qing 1 zhao gu hao 2";
        else
            cout<<c<<"-Y "<<d<<"-N"<<endl<<"1: huan ying ru guan";
    else if(d>=a)
        if(d>=b)
            cout<<c<<"-Y "<<d<<"-Y"<<endl<<"qing 2 zhao gu hao 1";
        else
            cout<<c<<"-N "<<d<<"-Y"<<endl<<"2: huan ying ru guan";
    else
        cout<<c<<"-N "<<d<<"-N"<<endl<<"zhang da zai lai ba";
    return 0;
}

L1-拯救外星人

#include<iostream>

using namespace std;

int main(){
    int a,b;
    long long s=1;
    cin>>a>>b;
    for(int i=1;i<=a+b;i++){
        s*=(long long)i;
    }
    cout<<s;
    return 0;
}

L1-试试手气

#include<iostream>

using namespace std;

int v[7];
int n;

int main(){
    int t=6;
    while(t--)
        scanf("%d",&v[6-t]);
    scanf("%d",&n);
    n=6-n+1;
    
    for(int i=1;i<=6;i++){
        if(v[i]<n)
            cout<<n;
        else
            cout<<n-1;
        if(i!=6) cout<<" ";
    }
    return 0;
}

L1-斯德哥尔摩火车上的题

#include<iostream>

using namespace std;

string a,b;

string slove(string x){
    string s="";
    for(int i=1;i<x.length();i++) {
        if ((x[i]-'0')%2==(x[i-1]-'0')%2) {
            s+=max(x[i],x[i-1]);
        }
    }
    return s;
}

int main(){
    cin>>a>>b;
    
    string l,r;
    l=slove(a);
    r=slove(b);
    
    if(l==r){
        cout<<l;
    }else{
        cout<<l<<endl<<r;
    }
    return 0;
}

L1-机工士姆斯塔迪奥

#include<iostream>

using namespace std;

const int N=1e5+5;
int n,m,q;
int l[N],r[N];
int ll,rr;

int main(){
    cin>>n>>m>>q;
    
    for(int i=0;i<q;i++){
        int a,b;
        scanf("%d%d",&a,&b);
        if(a==0){
            if((l[b]++)==0)
                ll++;
        }else{
            if((r[b]++)==0)
                rr++;
        }
    }
    
    cout<<(n-ll)*(m-rr);
    return 0;
}

L1-静静的推荐

用一下循环数组防超时

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

const int N=1e5+5;

int n,k,s;
struct node{
    int x,p;
    
    bool operator<(const node & c)const{
        if(x==c.x) return p<c.p;
        return x<c.x;
    }
}v[N];
bool st[N];
int cnt;

int main(){
    scanf("%d%d%d",&n,&k,&s);
    int len=0;
    int a,b;
    
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a,&b);
        if(a>=175){
            v[++len].x=a;
            v[len].p=b;
        }
    }
    sort(v+1,v+1+len);
    
    while(k--){
        int t=174;
        for(int i=1;i<=len;i++){
            if(!st[i] && v[i].x>t){
                t=v[i].x;
                st[i]=true;
                cnt++;
            }
            if(!st[i] && v[i].p>=90){
                st[i]=true;
                cnt++;
            }
        }
        if(cnt==len) break;
    }
    
    cout<<cnt;
    return 0;
}

L2-插松枝

栈、队列模拟

#include<iostream>
#include<cstdio>
#include<cstdlib>

using namespace std;

const int N=1e3+5;

int n,m,k,s;
int q[N],hh=1,tt=0;
int stk[25],t=0;

int main(){
    scanf("%d%d%d",&n,&m,&k);

    for(int i=1,a;i<=n;i++){
        scanf("%d",&a);
        q[++tt]=a;
    }
    
    s=n;
    while(s){
        int res[10],h=0;
        
        int tmp=101;
        while(true){
            if(h<k && t && tmp>=stk[t]){
                res[++h]=stk[t--];
                tmp=res[h];
                s--;
            }else if(h<k && hh<=tt && tmp>=q[hh]){
                res[++h]=q[hh++];
                tmp=res[h];
                s--;
            }else if(h<k && t<m && hh<=tt){
                stk[++t]=q[hh++];
            }else{
                break;
            }

            if(s==0) break;
        }
        
        for(int i=1;i<=h;i++){
            printf("%d",res[i]);
            
            if(i!=h) printf(" ");
            else printf("\n");
        }
    }
    system("pause");
    return 0;
}

L2-老板的作息表

区间合并

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<regex>
#include<algorithm>
#include<vector>

using namespace std;

typedef pair<int,int> PII;
const int N=1e7;

int n;
PII v[N];
vector<PII> res;

void print(){
    for(int i=0;i<res.size();i++){
        int a,b,c;
        a=res[i].first/10000;
        b=res[i].first/100%100;
        c=res[i].first%100;
        printf("%02d:%02d:%02d - ",a,b,c);
        a=res[i].second/10000;
        b=res[i].second/100%100;
        c=res[i].second%100;
        printf("%02d:%02d:%02d\n",a,b,c);
    }
}
void slove(){
    int st=-1,ed=-1;
    for(auto i : v){
        if(ed>=i.first){
            ed=max(ed,i.second);
        }else{
            if(ed!=-1){
                res.push_back({st,ed});
            }
            st=i.first,ed=i.second;
        }
    }
    res.push_back({st,ed});

    vector<PII> tmp;
    if(res[0].first>0) tmp.push_back({0,res[0].first});
    for(int i=1;i<res.size();i++) tmp.push_back({res[i-1].second,res[i].first});
    if(res[res.size()-1].second<235959) tmp.push_back({res[res.size()-1].second,235959});
    res=tmp;
}

int main(){
    scanf("%d",&n);
    
    string a,b,c;
    regex reg(":");
    
    for(int i=0;i<n;i++){
        cin>>a>>b>>c;
        a=regex_replace(a,reg,"");
        c=regex_replace(c,reg,"");
        v[i].first=stoi(a);
        v[i].second=stoi(c);
    }
    sort(v,v+n);


    slove();
    
    print();
    return 0;
}

L2-龙龙送外卖

题目没看懂,暂略

L2-大众情人

多源最短路

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;

typedef pair<int,int> PII;
const int N=510;

int n;
char sex[N][2];
int g[N][N];
vector<PII> f,m;
char tmp[2];
vector<int> ff,mm;

int main(){
    memset(g,0x3f,sizeof g);

    scanf("%d",&n);

    int k,a,b;
    for(int i=1;i<=n;i++){
        scanf("%s%d",tmp,&k);
        if(tmp[0]=='F') ff.push_back(i);
        else mm.push_back(i);
        while(k--){
            scanf("%d",&a);
            getchar();
            scanf("%d",&b);
            g[i][a]=b;
        }
        g[i][i]=0;
    }

    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                g[i][j]=min(g[i][j],g[i][k]+g[k][j]);

    //F
    for(int i : ff){
        int x=0;
        for(int j : mm){
            x=max(x,g[j][i]);
        }
        f.push_back({x,i});
    }
    sort(f.begin(),f.end());
    
    printf("%d",f[0].second);
    for(int i=1;i<f.size()&&f[i].first==f[0].first;i++){
        printf(" %d",f[i].second);
    }
    printf("\n");

    //M
    for(int i : mm){
        int x=0;
        for(int j : ff){
            x=max(x,g[j][i]);
        }
        m.push_back({x,i});
    }
    sort(m.begin(),m.end());

    printf("%d",m[0].second);
    for(int i=1;i<m.size()&&m[i].first==m[0].first;i++){
        printf(" %d",m[i].second);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值