Educational Codeforces Round 79 (Rated for Div. 2)(A-D)

A - New Year Garland

签到:最小两个相加<最大-1:no

int main(){
    int T;
    cin>>T;
    while(T--){
        int a,b,c;
        cin>>a>>b>>c;
        if(a>b)swap(a,b);
        if(a>c)swap(a,c);
        if(b>c)swap(b,c);
        if((a+b)<c-1)cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }

    return 0;
}
View Code

B - Verse For Santa

题意:给一个数组,可以去掉任意一个元素,满足最多的元素和小于s,求去掉元素的位置。
只能从左到右一个一个求和。
解:从左加到右,并且记录最大值,如果溢出s,就去掉最大值就可以了。

typedef long long ll;
const int MAXN=1e5+10;
int a[MAXN];
int main(){
    int T;
    cin>>T;
    while(T--){
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        int res=0;
        int maxx=0;
        int maxid=0;
        for(int i=1;i<=n;i++){
            res+=a[i];
            if(maxx<a[i])maxx=a[i],maxid=i;
            if(res>m){
                break;
            }
        }
        if(res>m)
        cout<<maxid<<endl;
        else cout<<0<<endl;
    }
    return 0;
}
View Code

C - Stack of Presents

题意:圣诞老人有一个礼物袋,这个袋子像一个栈,a[1]表示栈顶,拿出中间的一个礼物,要把它上面的礼物拿出来,然后取出要的礼物,再把拿出来上面的礼物放回去。

然后有一个礼物派送清单,如果礼物正好在栈顶只需要花1秒的时间就可以拿出来,如果不在栈顶,假设前面有k个,那么拿出来就需要2∗k+12∗k+1秒时间。

然后你可以选择任意的顺序把拿出来的礼物放回去。

求送完礼物清单最少需要花多少时间。

解:贪心。假设你已经拿出来k件礼物,那么如果下一个礼物清单中正好在拿出来的k件礼物中,那么时间只需要1秒,如果不在那么就继续拿礼物出来,假设礼物清单在第m件,时间就会等于(m-已经送出去的礼物件数)*2+1;

vis来标记礼物是否被拿出来。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
int a[MAXN];
int b[MAXN];
bool vis[MAXN];
int main(){
    int T;
    cin>>T;
    while(T--){
        memset(vis,0,sizeof(vis));
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<=m;i++){
            cin>>b[i];
        }
        ll ans=0LL;
        int flag=1;
        for(int i=1;i<=m;i++){
            if(vis[b[i]]){
                ans++;continue;
            }
            for(int j=flag;j<=n;j++){
                vis[a[j]]=true;
                if(a[j]==b[i]){
                    flag=j;
                    break;
                }
            }
            ans+=2LL*(flag-i)+1LL;
        }
        cout<<ans<<endl;
    }
    return 0;
}
View Code

D - Santa’s Bot

概率题
需前置知识:快速幂,费马小定理求逆元。
附上大佬的题解https://www.cnblogs.com/pixel-Teee/p/12127496.html

猜你喜欢

转载自www.cnblogs.com/lin1874/p/12194082.html