首页 > 其他分享 >ARC168

ARC168

时间:2023-12-27 21:00:36浏览次数:33  
标签:ARC168 int long re il define getchar

[ARC168A] <Inversion>

之前打了,忘了,懒得想了,咕。

$\texttt{Code}$
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define il inline
#define re register
const int N=3e5+113;
int n,ans;
char a[N];
il int read(){
    re int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*f;
}
signed main(){
    n=read()-1;
    scanf("%s",a+1);
    int l=1,r=1;
    while(l<=n){
        if(a[l]=='<'){
            l++,r++;
            continue;
        }
        while(r<n&&a[r+1]=='>')r++;
        ans+=(r-l+1)*(r-l+2)/2;
        l=r+1,r=l;
    }
    cout<<ans;
    return 0;
}

[ARC168B] Arbitrary Nim

首先按常规 NIM 检查异或和判掉 \(-1\)。然后如果有两个相同的堆相当于复制一遍过程,没用,可以直接删去。

然后考虑最大的堆里有 \(k\) 个石子,此时若限制为 \(k-1\),则先手一定可以用一前一后的两次操作结束这一个堆,即先手取 \(k-1\),后手只能取 \(1\) 然后结束。

然后先手就必胜了,所以答案是 \(k-1\),如果没有这样的堆就 \(0\)。

$\texttt{Code}$
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define re register
map<int,int>cnt;
int n,tot;
il int read(){
    re int x=0;re char c=getchar(),f=0;
    while(c<'0'||c>'9') f|=(c=='-'),c=getchar();
    while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c&15),c=getchar();
    return f?-x:x;
}
int main(){
    n=read();
    for(re int i=1;i<=n;i++){
        int x=read();
        tot^=x,cnt[x]++;
    }
    if(tot)return puts("-1"),0;
    while(!cnt.empty()){
        auto fnd=--cnt.end();
        cnt.erase(fnd);
        if((*fnd).second&1)return cout<<(*fnd).first-1,0;
    }
    putchar('0');
    return 0;
}

标签:ARC168,int,long,re,il,define,getchar
From: https://www.cnblogs.com/MrcFrst-LRY/p/17931414.html

相关文章

  • [ARC168B] Arbitrary Nim
    原题链接:ARC168B题意:有\(n\)堆石子,每堆有\(a_{i}\)个。每人每次可以取走其中一堆中的\(x(1\lex\lek)\)个。求出一个最大的\(k\)使得先手必胜。无解输出\(0\),\(k\)可以取无限大输出\(-1\)。一个经典Nim游戏的结论是:\(a_{i}\)的异或和为\(0\),则先手必败。但是......
  • ARC168E
    题面给定长度为\(n\)的数列\(\{a_i\}\)和两个参数\(k,s\),将\(\{a_i\}\)划分成\(k\)段,最大化和\(\geqs\)的段数。\(1\leqk\leqn\leq250000,1\leqA_i\leq10^9,1\leqs\leq10^{15}\)。题解首先注意到如果当前划分的一段\(sum<s\),那么这种段的长度......
  • arc168b
    https://atcoder.jp/contests/arc168/tasks/arc168_b不会博弈,但是会乱搞首先直接判断-1的情况然后我们直接考察最大值能不能取到假设存在一个数ai\(a_1\oplusa_2...\oplus(a_i-x)\oplus...a_n\)=max也就是说要拿掉max,才能再使xor=0移项之后得到\((a_i-x)=a_1\oplusa_2......
  • [ARC168E] Subsegments with Large Sums
    题目链接看到严格选\(k\)个,不难想到WQS二分。定义\(f(x)\)为分成\(x\)段,最多有多少个超过\(S\)的。然后你会发现他不是凸的。因为他有很多平段,比如把两个很小的合并不改变答案。换个方向?考虑定义\(f(x)\)为有\(x\)个超过\(S\)的段,最多有多少个段。然后发现这个......
  • [ARC168E] Subsegments with Large Sums
    有点意思的简单题。答案有可二分性。合并两段,显然仍然合法。考虑如何check。因为答案可以被二分,我们尝试求恰好\(x\)段就行了。恰好,这是wqs二分的内容。如何设计一个与\(x\)有关的凸函数呢?这个函数大概是\(\sum_{i=1}^xw(l_i,r_i)\)的形式,每一个\([l,r]\)都是合......
  • ARC168F
    纪念一下第一次补完ARC的所有题。本题解介绍\(2log\)做法,需要卡常才能过。感谢@Rainbow_qwq大佬的耐心讲解,拜谢拜谢拜谢。首先注意到每次操作是前后缀修改,自然想到维护差分数组。假设当前操作到了\(a_i\),那么差分数组的\(a_i\)这位加\(2\),然后差分数组全局最小的值......
  • ARC168(A-C)题解
    比赛链接:arc168A题意:读入一个由<和>构成的字符串,在最开始,最后,字符之间可以填上任意数字,任意两个相邻数字之间必须满足字符代表的大小关系。求问最后填入的数字组成的数组最少有多少对逆序对。题解:签到。<可以不去考虑,因为不会对答案造成影响。>如果不是在连续段内,也可以不......
  • ARC168E
    简要题意给定一个长度为$n$的序列$a$,将$a$划分为$k$个连续段,最大化满足连续段中元素和$\geqs$的连续段数。题解首先发现是恰好$k$个连续段,这种类型的题套路地考虑wqs二分,然后你会惊喜的发现这玩意不是凸的,我的思考也就卡在这里了。正确的做法是观察到答案具有单......