Educational Codeforces Round 85(Div。2)ソリューションの一部

A.レベル統計

タイトル

レベルには、プレーヤーの試行回数と通関手続きの数があり、プレーヤーの$ n $時間のデータを時系列で提供して、これらのデータが妥当かどうかを判断します。

アイデア

  • 通関手続きのみ
  • 次の瞬間の試行回数は前の瞬間より少なくなりません
  • 次の瞬間の通関の数は前の瞬間より少なくなりません
  • 通関回数の増加ごとに、試行回数の増加を超えない

コード

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

void solve(){
     int n; cin >> n;
    int p [n]、c [n];
    forint i = 0 ; i <n; i ++ ){ 
        cin >> p [i] >> c [i]; 
    } 
    forint i = 0 ; i <n; i ++ ){
         if(c [i]> p [i]){ 
            cout << " NO " << " \ n " ;
             ;
    } 
    forint i = 1 ; i <n; i ++ ){
         if(p [i] <p [i- 1 ] || c [i] <c [i- 1 ] || c [i]-c [ i- 1 ]> p [i]-p [i- 1 ]){ 
            cout << " NO " << " \ n " ;
            戻る; 
        } 
    } 
    cout << " YES " << " \ n " ; 
} 

int main(){
     intt; cin >> t;
    while(t-- )solve(); 
}

B.中産階級

タイトル

$ n $の個人の富の値を知っているので、富の値を収集して均等に分配する人を選択し、最後に$ x $以上の富の値を持つ人々の数を尋ねることができます。

アイデア

降順で並べ替えて、余剰資産の価値を配分すると、初めて$ x $を集められない人の数が答えになります。

コード

#include <bits / stdc ++。h>
 using ll = long  long ;
名前空間std を使用し ます

void solve(){
     int n、x; cin >> n >> x;
    int a [n]; forint&i:a)cin >> i; 
    sort(a、a + n、great < int > ()); 
    ll extra = 0、ans = 0 ;
    forint i:a){
         if(i> = x){ 
            extra + = i- x;
            ++ans; 
        } else  if(extra> = x- i){ 
            extra- = x- i;
            ++ ans; 
        } 
    } 
    cout << ans << " \ n " ; 
} 

int main(){
     int t; cin >> t;
    while(t-- )solve(); 
}

C.モンスターの輪

タイトル

モンスターの輪があり、各モンスターのヘルスは$ a_i $であり、すべてのモンスターが$ 1 $回撃たれると$ 1 $のヘルスが失われ、モンスターが死亡すると、次のモンスターに$ b_i $のダメージを与えます。少なくともいくつのショットが必要か。

アイデア

最初に何回撃たなければならないか、つまり$ \ sum_ {i = 0} ^ {n-1} a [i] -b [i-1] $を見つけ、次にどのモンスターが開始点であるかを列挙し、合計を取ります最小値で十分です。

コード

#include <bits / stdc ++。h>
 #define pre(i)((i-1 + n)%n)
 using ll = long  long ;
名前空間std を使用し ます

void solve(){
     int n; cin >> n; 
    ll a [n]、b [n]; 
    forint i = 0 ; i <n; i ++ ){ 
        cin >> a [i] >> b [i]; 
    } 
    ll sum = 0 ;
    forint i = 0 ; i <n; i ++ ){ 
        sum + = max(0LL、a [i]-  -b [pre(i)]);
    } 
    ll ans = 1e18;
    forint i = 0 ; i <n; i ++ ){
         if(a [i]> b [i]){ 
            ans = min(ans、sum + b [i]); 
        } else { 
            ans = min(ans、sum + a [i]); 
        } 
    } 
    cout << ans << " \ n " ;    
} 

int main(){ 
    ios :: sync_with_stdio(false ); 
    cin.tie(nullptr); 
    int t; cin >> t;
    ながら(t-- )solve(); 
}

 

おすすめ

転載: www.cnblogs.com/Kanoon/p/12677459.html