Codeforces Round #702 (Div. 3) 补题A B C

A. Dense Array

在这里插入图片描述

分析:
如果找到相邻两个数不满足 m a x ( a [ i ] , a [ i + 1 ] ) ≤ 2 ∗ m i n ( a [ i ] , a [ i + 1 ] ) max(a[i],a[i+1])\le 2*min(a[i],a[i+1]) max(a[i],a[i+1])2min(a[i],a[i+1])
,那么就一直添加 m i n ( a [ i ] , a [ i + 1 ] ) min(a[i],a[i+1]) min(a[i],a[i+1])的两倍,直到 2 x ∗ m i n ( a [ i ] , a [ i + 1 ] ) ≥ m a x ( a [ i ] , a [ i + 1 ] ) 2^x*min(a[i],a[i+1])\ge max(a[i],a[i+1]) 2xmin(a[i],a[i+1])max(a[i],a[i+1])

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=50;
int t,n,a[N];
int main(){
    
    
    cin>>t;
    while(t--){
    
    
        int res=0;
        cin>>n;
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n-1;i++){
    
    
            int x=max(a[i],a[i+1]),y=2*min(a[i],a[i+1]);
            if(x>y){
    
    
                y/=2;
                while(2*y<x){
    
    
                    res++;
                    y*=2;
                }
            }
        }
        cout<<res<<endl;
    }
}

B. Balanced Remainders

在这里插入图片描述

分析: 最后相等的情况一定是 n 3 \frac{n}{3} 3n,先找到数值最高的数,如果他等于 n 3 \frac{n}{3} 3n,那么一定不用进行任何操作。
不等于一定大于。于是将他变为sum,把多余的数转换成他的下一个数 + 1 m o d    3 +1\mod3 +1mod3,最多进行两次,就可以得出结果。

代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,a,c[3];
int main(){
    
    
    cin>>t;
    while(t--){
    
    
        cin>>n;
        int res=0,m=0,flag=0,sum=n/3;
        memset(c,0,sizeof c);
        for(int i=0;i<n;i++){
    
    
            cin>>a;
            c[a%3]++;
            if(c[a%3]>m){
    
    
                m=c[a%3];
                flag=a%3;
            }
        }
        if(m==sum) cout<<0<<endl;
        else{
    
    
            res+=(m-sum);
            c[(flag+1)%3]+=(m-sum);
            if(c[(flag+1)%3]>sum) res+=(c[(flag+1)%3]-sum);
            else if(c[(flag+1)%3]==sum) res+=0;
            else res+=2*(sum-c[(flag+1)%3]);
            cout<<res<<endl;
        }
    }
}

C. Sum of Cubes

在这里插入图片描述

分析: 暴力枚举,注意要加 ( long (\text {long} (long long ) \text{long}) long)

代码:

#include<bits/stdc++.h>
using namespace std;
int t;
long long int x;
unordered_set<long long int> s;
void init(){
    
    
    for(int i=1;i<=10000;i++){
    
    
        long long res=(long long )i*i*i;
        s.insert(res);
    }
}
int main(){
    
    
    init();
    cin>>t;
    while(t--){
    
    
        int flag=0;
        cin>>x;
        for(long long int i=1;(long long )i*i*i<x;i++){
    
    
            if(s.count(x-(long long )i*i*i)){
    
    
                flag=1;
                break;
            }
        }
        if(flag) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/messywind/article/details/113834300