Codeforces Round#636div3 D.コンスタントパリンドロームの合計

                                                                                         

トピック:長さがnの偶数の配列を指定すると、要素を一度にk以下の値に変更できます。それぞれの[i] + a [n-i + 1]が等しいことを要求し、操作の最小数を見つけるタイムズ

 

解決策:各ペアの合計が合計で、小さい方がmn、大きい方がmxであるとします。

        [2,2 * k]のすべての数xを列挙します。

           :私たちそれぞれが検討事項の対応する番号を持って、3例がある変更番号変更番号2ない変更は、

       1.数値を変更する場合:x∈[mn + 1、mx + k]; ==》 b [mn + 1] +、1、b [mx + k + 1] -1の場合;

    2. 2つの数値:x∈[2、mn]の場合|| [mx + k + 1,2 * k]; ==》 b [2] + 2、b [mn + 1] -2; b [ mx + k + 1] + 2、b [2 * k](最後のもの、変更する必要はありません)

    3.変更しないでください:x == sum

       そのため、対数ごとに差分配列b [i]を記録し、間隔を維持してから復元します。

コード:

1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <stack>
 7 #include <queue>
 8 #include <vector>
 9# include <map>
 10 #include < set >
 11 #include <unordered_set>
 12 #include <unordered_map>
13  #define ll long long
 14  #define fi first
 15  #define se second
 16  #define pb push_back
 17 #define me memset
 18  const  int N = 1e6 + 10 ;
19  const  int mod = 1e9 + 7 ;
20  名前空間std を使用 21 typedefペア< intint > PII;
22 typedefペア< longlong > PLL;
23 24 int t;
25 int n、k、a [N];
26 int sum;
27 int mx、mn;
28 int main(){
 29 
          ios :: sync_with_stdio(false );
30      cin >> t;
31      while(t-- ){
 32          cin >> n >> k;
33          int b [ 2 * k + 10 ];
34          me(b、0sizeof (b));
35          forint i = 1 ; i <= n; ++ i)cin >> a [i];
36  
37          のためにINT iは= 1 ; I <= N / 2 ; ++ {I)
 38              合計= [I] + [N-I + 1];
39              mn = min(a [i]、a [n-i + 1 1 ]);
40              mx = max(a [i]、a [n-i + 1 ]);
41  
42              b [ 2 ] + = 2 ;
43              b [mn + 1 ]- ;
44              b [mx + k + 1 ] ++ ;
45              b [合計]- ;
46              b [合計+ 1 ] ++ ;
47          }
 48          int res = b [ 2 ];
49          のためのint型 I =3 ; i <= 2 * k; ++ i){
 50              b [i] + = b [i- 1 ];
51              res = min(res、b [i]);
52          }
 53          printf(" %d \ n " 、res);
54      }
 55  
56      return  0 ;
57 }
コードを表示

 

おすすめ

転載: www.cnblogs.com/lr599909928/p/12751300.html