ARC168

[ARC168A] <Inversion>#

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

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 个石子,此时若限制为 k1,则先手一定可以用一前一后的两次操作结束这一个堆,即先手取 k1,后手只能取 1 然后结束。

然后先手就必胜了,所以答案是 k1,如果没有这样的堆就 0

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;
}

posted @   MrcFrst  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示
主题色彩