小工具知识网

当前位置: 首页 > 行业知识 > Codeforces Round 932 (Div. 2 ABCDE题) 视频讲解

行业知识

Codeforces Round 932 (Div. 2 ABCDE题) 视频讲解

2026-11-08 01:24:09 来源:互联网转载

A. Entertainment in MAC

Problem Statement

Congratulations, you have index.php/tags-41973.html" >been accepted to the Master’s Assistance Center! However, you were extremely bored in class and got tired of doing nothing, so you came up with a game for yourself.

You are given a string s s s and an even integer n n n. There are two types of operations that you can apply to it:

  1. Add the reversed string s s s to the end of the string s s s (for example, if $s = $ cpm, then after applying the operation $s = $ cpmmpc).
  2. Reverse the current string s s s (for example, if $s = $ cpm, then after applying the operation $s = $ mpc).

It is required to determine the lexicographically smallest † ^{\dagger} † string that can be obtained after applying exactly n n n operations. Note that you can apply operations of different types in any order, but you must apply exactly n n n operations in total.

† ^{\dagger} †A string a a a is lexicographically smaller than a string b b b if and only if one of the following holds:

  • a a a is a prefix of b b b, but a ≠ b a \ne b a=b;
  • in the first position where a a a and b b b differ, the string a a a has a letter that appears earlier in the alphabet than the corresponding letter in b b b.

    Input

    Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 500 1 \leq t \leq 500 1≤t≤500) — the number of test cases. The description of the test cases follows.

    The first line of each test case contains a single even integer n n n ( 2 ≤ n ≤ 1 0 9 2 \leq n \leq 10^9 2≤n≤109) — the number of operations applied to the string s s s.

    The second line of each test case contains a single string s s s ( 1 ≤ ∣ s ∣ ≤ 100 1 \leq |s| \leq 100 1≤∣s∣≤100), consisting of lowercase English letters, — the string to which the operations are applied.

    Output

    For each test case, output a single line — the lexicographically smallest string that can be obtained after applying exactly n n n operations.

    Example

    Example

    input
    5
    4
    cpm
    2
    grib
    10
    kupitimilablodarbuz
    1000000000
    capybara
    6
    abacaba
    output
    cpm
    birggrib
    kupitimilablodarbuz
    arabypaccapybara
    abacaba

    Note

    In the first test case, you can apply the operation of the second type (i.e., reverse the string s s s) 4 4 4 times. Then the string s s s will remain equal to cpm.

    In the second test case, you can do the following:

    • Apply the operation of the second type, after which s s s will become equal to birg.
    • Apply operation of the first type (i.e., add the reversed string s s s to the end of the string s s s), after which s s s will become equal to birggrib.

      Solution

      具体见文后视频。


      Code

      #include #define int long longusing namespace std;typedef pair PII;typedef long long LL;void solve(){int n;string s;cin >> n >> s;int l = 0, r = s.size() - 1;while (l  r) cout string t = s;reverse(t.begin(), t.end());t += s;cout cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int Data;cin  Data;while (Data --)solve();return 0;}
      hr / h2B. Informatics in MAC/h2 h3Problem Statement/h3 pIn the Master’s Assistance Center, Nyam-Nyam was given a homework assignment in informatics./p pThere is an array a a a of length n n n, and you want to pide it into k 1 k 1 k>1 subsegments † ^{\dagger} † in such a way that the MEX ⁡ ‡ \operatorname{MEX} ^{\ddagger} MEX‡ on each subsegment is equal to the same integer.

      Help Nyam-Nyam find any suitable pision, or determine that it does not exist.

      † ^{\dagger} †A pision of an array into k k k subsegments is defined as k k k pairs of integers ( l 1 , r 1 ) , ( l 2 , r 2 ) , … , ( l k , r k ) (l_1, r_1), (l_2, r_2), \ldots, (l_k, r_k) (l1​,r1​),(l2​,r2​),…,(lk​,rk​) such that l i ≤ r i l_i \le r_i li​≤ri​ and for each 1 ≤ j ≤ k − 1 1 \le j \le k - 1 1≤j≤k−1, l j + 1 = r j + 1 l_{j + 1} = r_j + 1 lj+1​=rj​+1, and also l 1 = 1 l_1 = 1 l1​=1 and r k = n r_k = n rk​=n. These pairs represent the subsegments themselves.

      ‡ MEX ⁡ ^{\ddagger}\operatorname{MEX} ‡MEX of an array is the smallest non-negative integer that does not belong to the array.

      For example:

      • MEX ⁡ \operatorname{MEX} MEX of the array [ 2 , 2 , 1 ] [2, 2, 1] [2,2,1] is 0 0 0, because 0 0 0 does not belong to the array.
      • MEX ⁡ \operatorname{MEX} MEX of the array [ 3 , 1 , 0 , 1 ] [3, 1, 0, 1] [3,1,0,1] is 2 2 2, because 0 0 0 and 1 1 1 belong to the array, but 2 2 2 does not.
      • MEX ⁡ \operatorname{MEX} MEX of the array [ 0 , 3 , 1 , 2 ] [0, 3, 1, 2] [0,3,1,2] is 4 4 4, because 0 0 0, 1 1 1, 2 2 2, and 3 3 3 belong to the array, but 4 4 4 does not.

        Input

        Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1 \leq t \leq 10^4 1≤t≤104) — the number of test cases. The description of the test cases follows.

        The first line of each test case contains a single integer n n n ( 2 ≤ n ≤ 1 0 5 2 \le n \le 10^5 2≤n≤105) — the length of the array a a a.

        The second line of each test case contains n n n integers a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ ( 0 ≤ a i n;std::vector a(n), vis(n, 0);for (int i = 0; i > a[i], vis[a[i]] = 1;int mex = 0;for (int i = 0; i 1){cout cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int Data;cin Data;while (Data --)solve();return 0;} return a.second mes[i].second;sort(mes + 1, mes + 1 + n, cmp);for (int i = 0; i for (int j = i; j = 2; j --){f[i][j] = g[j - 1] + mes[i].first + mes[i].second;if (g[j] f[i][j] - mes[i].second) g[j] = f[i][j] - mes[i].second, p[j] = i;}f[i][1] = mes[i].first;if (f[i][1] - mes[i].second > y[i];while (bit[i] >= 0 && (x[i] >> bit[i] & 1) == (y[i] >> bit[i] & 1)) bit[i] --;bit[i] ++;for (int j = bit[i]; j > j & 1);x[i] &= ((1 cnt[i] = cnt[i - 1];for (int j = 30; j = 0; j --)cnt[i][j] += (y[i - 1] j & 1), vis[i][j] += vis[i - 1][j];}cin >> q;while (q --) {int l, r;cin >> l >> r;int res = 0, flg = 1;for (int i = 30; i >= 0; i --) if (vis[r][i] - vis[l - 1][i] > 0) res += (1 = 0; i --) {// if (l == 3 && r == 4) cout if (cnt[r][i] - cnt[l - 1][i] 0){res |= ((1 if (cnt[r][i] - cnt[l - 1][i] 1) {res |= ((1 cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int Data;cin Data;while (Data --)solve();return 0;}

上一篇:怎么用服务器打电话?

下一篇:dns服务器怎么样安装?