Codeforces Round #723 (Div. 2)

A

Solution:小到大排序,一前一后作为一对取出来。

Code:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 2000005
typedef long long ll;
typedef unsigned long long ull;
#define debug(x) cout<<#x<<" :"<<x<<endl
#define debug1(x) cout<<#x<<" :"<<x<<" "
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef double db;
#define eps 1e-8
const db pi=acos(-1);
inline int sgn(db x){//符号函数 0表示0,1表示正数,-1表示负数 
    if(fabs(x)<eps)return 0;
    return x>0?1:-1;
}
inline int dcmp(db x,db y){//比较x和y的大小,0:相等,1为大于,-1为小于 
    if(fabs(x-y)<eps)return 0;
    else return x<y?-1:1;
}
ll qpow(ll a,ll b){
    ll ans1=1;
    while(b){
        if(b&1){
            ans1=ans1*a;
        }
        a=a*a;
        b>>=1;
    }
    return ans1;
}

ll n,m,k;
ll q[MAXN];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    srand(time(NULL));
    while(t--){


        cin>>n;
        rep(i,1,n*2){
            cin>>q[i];
        }
        sort(q+1,q+1+2*n);
        rep(i,1,n){
            cout<<q[i]<<" "<<q[2*n-i+1]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
/*

 */

B

Solution:

观察到\(1111,11111...\)都能被\(11\)\(111\)表示出来,问题转换成一个数是否能被表示成\(x=a*11+b*11\),由表数公式得,\(gcd(11,111)=1\),大于\(11*111-11-111=1099\)的数字必定能被表示出来,剩下的小范围暴力。

Code:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 2000005
typedef long long ll;
typedef unsigned long long ull;
#define debug(x) cout<<#x<<" :"<<x<<endl
#define debug1(x) cout<<#x<<" :"<<x<<" "
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef double db;
#define eps 1e-8
const db pi=acos(-1);
inline int sgn(db x){//符号函数 0表示0,1表示正数,-1表示负数 
    if(fabs(x)<eps)return 0;
    return x>0?1:-1;
}
inline int dcmp(db x,db y){//比较x和y的大小,0:相等,1为大于,-1为小于 
    if(fabs(x-y)<eps)return 0;
    else return x<y?-1:1;
}
ll qpow(ll a,ll b){
    ll ans1=1;
    while(b){
        if(b&1){
            ans1=ans1*a;
        }
        a=a*a;
        b>>=1;
    }
    return ans1;
}

ll n,m,k;
ll q[MAXN];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    srand(time(NULL));
    while(t--){
        cin>>n;
        if(n>1099){
            cout<<"YES"<<"\n";
        }
        else{
            int fg=0;
            for(int i=0;i<=100;++i){
                if(n>=i*11&&(n-i*11)%111==0){
                    fg=1;
                }
            }
            cout<<(fg?"YES":"NO")<<"\n";
        }
    }
    return 0;
}
/*

 */

C1/C2

Solution:

反悔贪心。显然整数对答案的贡献一定为加一,考虑负数。维护一个只存负数的小根堆,当前负数能放则放,不能放就把里面最小的取出来替换。

Code:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 2000005
typedef long long ll;
typedef unsigned long long ull;
#define debug(x) cout<<#x<<" :"<<x<<endl
#define debug1(x) cout<<#x<<" :"<<x<<" "
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef double db;
#define eps 1e-8
const db pi=acos(-1);
inline int sgn(db x){//符号函数 0表示0,1表示正数,-1表示负数 
    if(fabs(x)<eps)return 0;
    return x>0?1:-1;
}
inline int dcmp(db x,db y){//比较x和y的大小,0:相等,1为大于,-1为小于 
    if(fabs(x-y)<eps)return 0;
    else return x<y?-1:1;
}
ll qpow(ll a,ll b){
    ll ans1=1;
    while(b){
        if(b&1){
            ans1=ans1*a;
        }
        a=a*a;
        b>>=1;
    }
    return ans1;
}

ll n,m,k;
ll q[MAXN];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    rep(i,1,n){
        cin>>q[i];
    }
    priority_queue<ll,vector<ll>,greater<ll> >Q;
   
    ll ans=0;
    ll sum=0;

    rep(i,1,n){
        if(q[i]<0){
            if(Q.empty()&&sum+q[i]>=0){
                Q.push(q[i]);
                ans++;
                sum=sum+q[i];
            }
            else if(sum+q[i]>=0){
                Q.push(q[i]);
                sum+=q[i];
                ans++;
            }
            else if(sum+q[i]<0&&!Q.empty()){
                int val=Q.top();
                if(val<q[i]){
                    sum=sum-val+q[i];
                    Q.pop();
                    Q.push(q[i]);
                    
                }
            }
        }
        else{
            sum=sum+q[i];
            ans++;
        }
        
    }
    cout<<ans<<"\n";
    return 0;
}
/*
6
8 -8 -2 -2 -2 -2

ans=5
 */

D

Solution:

Wating

Code:

posted @ 2021-06-03 10:12  Qquun  阅读(42)  评论(0)    收藏  举报