コンテストリンク:https : //codeforces.com/contest/1339
A.ダイヤモンドの充填
直立させるとチェーンが発生し、他のすべてのポジションはこの直立ポジションに適応する必要があるため、ケースの数を出力します。
#include <bits / stdc ++。h> using namespace std; void solve(){ int n; cin >> n; cout << n << " \ n " ; } int main(){ int t; cin >> t; while(t-- )solve(); }
B.ソートされた隣接する差異
真ん中から両側に出力するだけ。
#include <bits / stdc ++。h> using namespace std; void solve(){ int n; cin >> n; int a [n]; for(int&i:a)cin >> i; sort(a、a + n); int l、r; if(n%2 ){ cout << a [n / 2 ] << ' ' ; L = N / 2 - 1 。 r = n / 2 + 1 ; } その他{ L = N / 2 - 1 。 r = n / 2 ; } while(l> = 0 ){ cout << a [l] << ' ' << a [r] << ' ' ; --l、++ r; } cout << " \ n " ; } int main(){ int t; cin >> t; while(t-- )solve(); }
C.パワード追加
$ a_i> a_ {i + 1} $がある場合、後者は前者と等しくなるように変換する必要があります。両者の差は2進数として表すことができるため、毎回$ 1 $のべき乗を取るだけでよく、求められる答えは、あらゆる違いの中で最も高い力です。
#include <bits / stdc ++。h> using ll = long long ; 名前空間std を使用し ます。 void solve(){ int n; cin >> n; ll a [n]; 用(LL&I:)CIN >> 私。 if(n == 1 ||(a [ 0 ] <= a [ 1 ] && is_sorted(a、a + n))){ cout << " 0 \ n " ; 戻る; } int ans = 0 ; for(int i =0 ; i <n- 1 ; i ++ ){ if(a [i]> a [i + 1 ]){ int sub = a [i] -a [i + 1 ]; int cnt = 0 ; while (sub){ ++ cnt; サブ >> = 1 ; } ans = max(ans、cnt); a [i + 1 ] = a [i]; } } cout << ans << " \ n " ; } int main(){ int t; cin >> t; while(t-- )solve(); }
D.エッジの重みの割り当て
写真はまだあまり馴染みのないもので、記入するのに約1時間半かかりました。