首页 > 其他分享 >Codeforces Round 897 (Div. 2)

Codeforces Round 897 (Div. 2)

时间:2023-09-12 17:22:05浏览次数:45  
标签:typedef 897 int ll Codeforces long using Div define

Codeforces Round 897 (Div. 2)

A. green_gold_dog, array and permutation

分析:

由题意:

\[c_i = a_i - b_i \]

\(c_i\)种类最多就是\(n\)个数都不同。

若\(a_i\)不断变大,\(b_i\)不断变小,那么\(c_i\)会不断变大。

代码:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
typedef pair<int, int> pii;
typedef pair<pair<ll, ll>, ll> piii;
#define fi first
#define se second
using i128 = __int128;
int n, m;

int lowbit(int x)
{
    return x & -x;
}

void solve()
{
    scanf("%d", &n);
    vector<pii> a(n + 1);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i].fi);
        a[i].se = i;
    }
    sort(a.begin() + 1, a.end());
    vector<int> b(n + 1);
    int cnt = n;
    for (int i = 1; i <= n; i++)
    {
        b[a[i].se] = cnt--;
    }
    for (int i = 1; i <= n; i++)
    {
        printf("%d ", b[i]);
    }
    printf("\n");
}

int main()
{
    int t = 1;
    scanf("%d", &t);
    while (t--)
    {
        solve();
    }
    return 0;
}

B. XOR Palindromes

分析:

如何获得回文串:

  1. 对半分,通过操作使左右两侧一样。
  2. 全部变成1或0

注意,如果总字符数为奇数,那么每个左右两边一样后,我们还可以将中间的字符进行一次翻转操作。

使得左右两边一样,除了将两边不同的变成相同的,还可以将两边相同的同时翻转。

代码:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
typedef pair<int, int> pii;
typedef pair<pair<ll, ll>, ll> piii;
#define fi first
#define se second
using i128 = __int128;
int n, m;

int lowbit(int x)
{
    return x & -x;
}

void solve()
{
    scanf("%d", &n);
    string s;
    cin >> s;
    int l = 0;
    int r = s.size() - 1;
    int cnt = 0;
    while (l < r)
    {
        if (s[l] != s[r])
        {
            cnt++;
        }
        l++;
        r--;
    }
    unordered_map<int, int> q;
    for (int i = 0; i < n; i++)
    {
        int x = s[i] - '0';
        q[x]++;
    }
    string ans;
    for (int i = 0; i <= n; i++)
    {
        ans += '0';
    }
    for (int i = cnt; i <= n / 2; i++)
    {
        if (i == cnt)
        {
            ans[i] = '1';
        }
        else
        {
            int t = i - cnt;
            ans[cnt + t * 2] = '1';
        }
    }
    if (n & 1)
    {
        for (int i = n - 1; i >= 0; i--)
        {
            if (ans[i] == '1')
            {
                ans[i + 1] = '1';
            }
        }
    }

    ans[q[0]] = '1';
    ans[q[1]] = '1';
    cout << ans << endl;
}

int main()
{
    int t = 1;
    scanf("%d", &t);
    while (t--)
    {
        solve();
    }
    return 0;
}

C. Salyg1n and the MEX Game

分析:

直接贪心了,第一次添加\(MEX(S)\),之后删了啥加啥。

代码:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
typedef pair<int, int> pii;
typedef pair<pair<ll, ll>, ll> piii;
#define fi first
#define se second
using i128 = __int128;
int n, m;

int lowbit(int x)
{
    return x & -x;
}

void solve()
{
    scanf("%d", &n);
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }
    int cur = 0;
    for (int i = 1; i <= n; i++)
    {
        if (a[i] == cur)
        {
            cur++;
        }
        else
        {
            break;
        }
    }
    while (true)
    {
        printf("%d\n", cur);
        fflush(stdout);
        scanf("%d", &cur);
        if (cur == -1)
        {
            return;
        }
    }
}

int main()
{
    int t = 1;
    scanf("%d", &t);
    while (t--)
    {
        solve();
    }
    return 0;
}

标签:typedef,897,int,ll,Codeforces,long,using,Div,define
From: https://www.cnblogs.com/value0/p/17697292.html

相关文章

  • Codeforces Round 897 (Div. 2) A~E
    CodeforcesRound897(Div.2)A~EA:原先数组里面最小的位置放最大的数,次小的放次大的即可。voidsolve(){ intn;cin>>n; for(inti=1;i<=n;i++){ intx;cin>>x; c[i]={x,i}; } sort(c+1,c+1+n); intnum=n; for(inti=1;i<=n;i++){ ans[c[i].second]=num;num--......
  • Codeforces Round 896 (Div. 2)
    CodeforcesRound896(Div.2)A.MakeItZero代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingi128=__int128;intn,m;voidsolve(){scanf("%d",&n);vector<int>a(n+1);for(inti......
  • CodeForces 542B Duck Hunt
    洛谷传送门CF传送门首先转化一下,让鸭子不动,猎人往右移动,就相当于开的相邻两枪距离\(>m\)。设\(f_{x,i}\)为仅考虑\(r\lex\)的鸭子,上一次在\(i\)开枪,能打到的最大鸭子个数。\(f_{x-1}\tof_x\)时,首先有\(f_{x,i}=f_{x-1,i}\)。我们先找到所有\(r=x\)......
  • Codeforces Round 896 (Div. 1)
    Preface不管怎么说,最后还是被我苟上橙名了(虽然刚好2100整,不多不少)感觉我在1900~2100之间卡了好久好久,反观我的队友都是打上紫名后随便两三场就打上橙了,狠狠地羞辱我这个铁混子由于暑假集训打的校内排名比较高,作为新队伍也拿到了今年的一场CCPC+一场ICPC的名额,虽然要自费出行但......
  • Codeforces Round 101 (Div. 2) C - E
    C.Queue(思维、排序、构造、*1800)题意:$n$个人排队,为他们构造一组身高,使得$x$的前面有$a_i$个人比他高。如果无法构造满足所有条件的身高序列,输出-1。思路:首先考虑,对于$a_i$较大的人,肯定尽可能地将其往队伍后面放,然后从后往前构造,因为只有$......
  • abc288F - Integer Division
    F-IntegerDivision挺有意思的一道题,贪心的做法就是排序之后,逐个加入,如果不能被之前的表示则加入题解证明的话大概是这样考虑第i个数选不选首先加入前面选的数,如果能够表示当前的数,则必然不选否则前面的数不能表示当前的数,假如我们不选\(p_i\)假设最后得到一个合法序列,则......
  • 【题解】Educational Codeforces Round 142(CF1792)
    没有手速,再加上被E卡了,废掉了。A.GamingForces题目描述:Monocarp正在玩电脑游戏。他打算杀死\(n\)个怪兽,第\(i\)个的血量为\(h_i\)。Monocarp的角色有两个魔法咒语如下,都可以以任意顺序用任意次(可以不用),每次使用相当于一次操作。选择两个怪兽并各扣一滴血。选择......
  • Codeforces Global Round 21 B. NIT Destroys the Universe
    给一个长为\(n\)的数组,可以执行以下操作任意次:选择\(l,r(1\leql<r\leqn)\),让\(\foralli(l\leqi\leqr),a_i=mex(\{a_l,a_{l+1},\cdots,a_{r}\})\)。问最小操作数使得\(\foralli,a_i=0\)。观察:答案\(\leq2\),因为对\([1,n]\)操作不超过两次......
  • Codeforces Round 804 (Div. 2) B. Almost Ternary Matrix
    给两个偶数\(n\)和\(m\)。任务是构造任意一个二进制矩阵,\(n\timesm\)。对于任意\((i,j)\),有且仅有两个邻居的颜色与\(a_{i,j}\)不同。邻居的定义为\(|x-x'|+|y-y'|=1\)。观察:任何\(n\timesm\)的矩阵若作为一个大型矩阵的子矩阵不会受到限制。于是构造......
  • Codeforces Round 807 (Div. 2) B. Mark the Dust Sweeper
    需要打扫\(n\)个房间,第\(i\)个房间有\(a_i\)的积灰。只能使用如下魔法打扫:选择\(i,j,(1\leqi<j\leqn,\min_{k=i}^{j}a_i>0)\)。执行\(a_i=a_i-1,a_j=a_j+1\)。需要将\(1\simn-1\)号房间的积灰全部清空,最少使用多少次魔法。观察一:显......