hey_left 6 Codeforces Round 886 (Div. 4)

题目链接

A.

判总和-最小值的差是否大等于10即可

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;

void solve(){
    int a,b,c;cin>>a>>b>>c;
    int ans=a+b+c;
    ans-=min({a,b,c});
    if(ans>=10){
        cout<<"YES"<<'\n';
    }else cout<<"NO"<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--) {
        solve();
    }
    return 0;
}

B.

在小等于10的里面找质量最大的
遍历一遍即可

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;

void solve(){
    int n;cin>>n;
    int ma=-1,ans=-1;
    for(int i=1,a,b;i<=n;i++){
        cin>>a>>b;
        if(a<=10){
            if(b>=ma){
                ma=b;
                ans=i;
            }
        }
    }
    cout<<ans<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--) {
        solve();
    }
    return 0;
}

C.

把图输入后,按列遍历,把不是'.'的push进一个字符串里,输出字符串

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;

char g[10][10];
void solve(){
    for(int i=1;i<=8;i++){
        for(int j=1;j<=8;j++){
            cin>>g[i][j];
        }
    }
    string s="";
    for(int i=1;i<=8;i++){
        for(int j=1;j<=8;j++){
            if(g[j][i]!='.')s.push_back(g[j][i]);
        }
    }
    cout<<s<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--) {
        solve();
    }
    return 0;
}

D.

先升序排序,然后求最大的连续的满足条件的子序列的长度x
答案为总数-x

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;
int a[N];
void solve(){
    int n,k;cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+1+n);
    int ma=1,tmp=1;
    for(int i=2;i<=n;i++){
        if(a[i]-a[i-1]<=k){
            tmp++;
        }else{
            ma=max(ma,tmp);
            tmp=1;
        }
        if(i==n){
            ma=max(ma,tmp);
        }
    }
    ma=n-ma;
    cout<<ma<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--) {
        solve();
    }
    return 0;
}

E.

二分边框长度,看是否满足
数据过大,需要__int128,wa了好多发

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;
#define int long long
int a[N];
__int128 s[N];
void solve(){
    int n,c;cin>>n>>c;
    for(int i=1;i<=n;i++){
        cin>>a[i];s[i]=a[i];
    }
    __int128 l=0,r=1e18,mid;
    __int128 ans=0;
    while(l<=r){
        mid=(l+r)/2;
        int sum=c;
        //cout<<"sum="<<sum<<'\n';
        bool f=0;
        for(int i=1;i<=n;i++){
            if(sum-(s[i]+2*mid)*(s[i]+2*mid)<0){
                f=1;
                break;
            }
            sum-=(s[i]+2*mid)*(s[i]+2*mid);
        }
      //  cout<<"sum="<<sum<<'\n';
        if(f==1)r=mid-1;
        else if(sum==0){
            ans=mid;
            break;
        }
        else l=mid+1;
    }
    cout<<(int)(ans)<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--) {
        solve();
    }
    return 0;
}
posted @ 2024-01-18 14:43  WW爆米花  阅读(8)  评论(0编辑  收藏  举报