A - 123233

照题意统计即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
map<char,int> ma;
signed main(){
cin>>s;
for(char i:s) ma[i]++;
if(ma['1']==1&&ma['2']==2&&ma['3']==3) cout<<"Yes\n";
else cout<<"No\n";
return 0;
}

B - Hurdle Parsing

还是照题意模拟即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
signed main(){
cin>>s;
int cnt=0;
for(int i:s){
if(i=='|'){
if(cnt) cout<<cnt<<" ";
cnt=0;
}else if(i=='-') cnt++;
}
return 0;
}

C - Move Segment

就是将第\(k\)个1的连通块移到紧贴第\(k-1\)个1的连通块后面。

照题意模拟即可(代码过于不可读,不建议参考)。

点击查看代码
#include<bits/stdc++.h>
#define N 500010
using namespace std;
int n,k;
string s,t;
int ll[N],rr[N],idx;
int p[N];
signed main(){
cin>>n>>k>>s;
s=' '+s+' ';
int l,r;
for(int i=1;i<=n;i++){
if(s[i]!=s[i-1]&&s[i]=='1') l=i;
if(s[i]!=s[i+1]&&s[i]=='1'){
r=i;
ll[++idx]=l,rr[idx]=r;
}
}
int cha=ll[k]-rr[k-1];
ll[k]=ll[k]-cha+1;
rr[k]=rr[k]-cha+1;
for(int i=1;i<=idx;i++){
p[ll[i]]++,p[rr[i]+1]--;
}
for(int i=1;i<=n;i++){
p[i]+=p[i-1];
cout<<p[i];
}
return 0;
}

D - Strange Mirroring

将字符串\(s\)反转得到\(s'\),拼接起来是\(s\ s'\ s'\ s\ \dots\)。将每个串依次编号为\(0,1,2,3,\dots\),通过手玩可以发现第\(x\)个串为\(s\),当且仅当\(\text{popcount}(x)=0\),其中\(\text{popcount}(x)\)是指\(x\)的二进制中\(1\)出现的次数。

还是直接模拟就可以。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define Q 200010
using namespace std;
string s;
int q,k,n;
char ch(char a){
if(a>='A'&&a<='Z') return a-'A'+'a';
return a-'a'+'A';
}
signed main(){
cin>>s>>q;
n=s.size();
for(int i=1;i<=q;i++){
cin>>k;
k--;
int round=k/n;
k%=n;
if(__builtin_popcountll(round)&1) cout<<ch(s[k]);//changed
else cout<<s[k];
cout<<" ";
}
return 0;
}

E - 1D Bucket Tool

当时在机房所以没装插件,用的百度翻译,然后就理解错题意了,以为操作\(2\)要求输出\(x\)所在位置的颜色出现了多少次,然后……寄了( ̄  ̄|||)

map来维护颜色相同的区间。

对于询问\(1\),用lower_bound()找到该元素在set中的哪个区间,然后将该区间删掉,再添加进去修改过颜色的区间即可。

注意如果相邻的区间颜色和该区间修改后的颜色相同,需要把相邻的区间也删掉,合并进新添加的区间。为了防止一系列边界问题,我们在头尾各加\(2\)个哨兵,颜色设为\(-1\)即可。时间复杂度\(O((n+q)\log n)\)。

upd 2024/11/18:将结构体Range的成员前添加mutable关键字,就可以突破setconst函数限制,直接修改成员,这样就不需要删除再添加了。

点击查看代码
#include<bits/stdc++.h>
#define N 500010
#define Q 200010
using namespace std;
struct Range{int l,r,color;};
class cmpclass{
public:
bool operator()(const Range& a,const Range& b) const{
return a.r<b.r;//按右端点从小到大
}
};
set<Range,cmpclass> se;
int n,q,cnt[N];
signed main(){
cin>>n>>q;
se.insert({0,0,-1});
se.insert({n+1,n+1,-1});
for(int i=1;i<=n;i++) se.insert({i,i,i}),cnt[i]=1;
while(q--){
int op,x,c;
cin>>op;
if(op==1){
cin>>x>>c;
auto it=se.lower_bound({x,x,x});
int l=it->l,r=it->r,color=it->color;
cnt[c]+=(r-l+1);
cnt[color]-=(r-l+1);
it=se.erase(it);
if(it->color==c){
r=it->r;
it=se.erase(it);
}
it--;
if(it->color==c){
l=it->l;
it=se.erase(it);
}
se.insert({l,r,c});
}else{
cin>>x;
cout<<cnt[x]<<"\n";
}
}
return 0;
}

其实……直接用并查集就好,这样子时间复杂度是\(O(n+q\alpha(n))\)。

F - Exchange Game

注意到\(n+m+k\)一共才\(12\),果断压位暴搜。

具体来说,用一个\(3\)进制数来表示每一张牌的状态,\(0\)表示在Takahashi手里,\(1\)表示在Aoki手里,\(2\)表示在桌上。

搜索时提供该三进制数,还有当前的操作者(\(0\)是Takahashi)。先枚举取出哪张牌,再枚举拿回哪张牌(注意也可以不拿)。

如果当前状态能到达的所有状态中,存在胜者为自己的状态,则说明此状态下,自己必胜;否则(即所有状态都是对方获胜),此状态下自己必输。根节点的状态就是最终答案。

注意要记忆化。时间复杂度\(O(3^N\times N^2)\),其中\(N=n+m+k\)。

点击查看代码
#include<bits/stdc++.h>
#define N 12
#define int long long
using namespace std;
int n,m,l,nn,a[N],pow3[N],f[2][531441];//3^11=531441
struct Status{
int v=0;
int get(int pos){return v/pow3[pos]%3;}
Status chp(int pos,int vv){return {v+(vv-get(pos))*pow3[pos]};}
};
bool dfs(bool cur,Status sta){
if(f[cur][sta.v]!=-1) return f[cur][sta.v];
for(int i=0;i<nn;i++){//打出的牌
if(sta.get(i)!=cur) continue;
for(int j=0;j<nn;j++){//取回的牌
if(sta.get(j)!=2||a[j]>=a[i]) continue;
if(dfs(cur^1,sta.chp(i,2).chp(j,cur))==cur) return (f[cur][sta.v]=cur);
}
if(dfs(cur^1,sta.chp(i,2))==cur) return (f[cur][sta.v]=cur);
}
return (f[cur][sta.v]=cur^1);
}
signed main(){
memset(f,-1,sizeof f);
pow3[0]=1;
for(int i=1;i<N;i++) pow3[i]=pow3[i-1]*3;
cin>>n>>m>>l;
nn=n+m+l;
for(int i=0;i<nn;i++) cin>>a[i];
Status sta;
for(int i=0;i<nn;i++) sta=sta.chp(i,(i>=n)+(i>=n+m));
cout<<(dfs(0,sta)?"Aoki\n":"Takahashi\n");
return 0;
}

[题解]AtCoder Beginner Contest 380(ABC380) A~F的更多相关文章

  1. 题解 AtCoder Beginner Contest 168

    小兔的话 欢迎大家在评论区留言哦~ AtCoder Beginner Contest 168 A - ∴ (Therefore) B - ... (Triple Dots) C - : (Colon) ...

  2. 【AtCoder Beginner Contest 181】A~F题解

    越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...

  3. AtCoder Beginner Contest 127 D,E,F

    D Integer Cards 题意:先给出n个数字,然后可以有m次操作,每次操作以数字对(x,y)表示最多能选x个数字把它变成y,问经历m次操作后n个数字和最大为多少? 解法:一个明显正确的做法是: ...

  4. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  5. [题解] Atcoder Beginner Contest ABC 265 Ex No-capture Lance Game DP,二维FFT

    题目 首先明确先手的棋子是往左走的,将其称为棋子1:后手的棋子是往右走的,将其称为棋子2. 如果有一些行满足1在2右边,也就是面对面,那其实就是一个nim,每一行都是一堆石子,数量是两个棋子之间的空格 ...

  6. AtCoder Beginner Contest 238 A - F 题解

    AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...

  7. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  8. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  9. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  10. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

随机推荐

  1. X-MACRO使用技巧

    背景 最近遇到一个问题,需要将分区表硬编码在代码,第一反应可能是定义个数组,数组内容包括分区名称和分区大小. 类似于这种: struct Partition { const char *name; i ...

  2. Springboot笔记<4>@Autowired和@Resource的区别

    @Autowired和@Resource的区别 @Resource 有两个常用属性name.type,所以分4种情况 指定name和type:通过name找到唯一的bean,找不到抛出异常:如果typ ...

  3. Benchmark论文解读:Evaluating the Ripple Effects of Knowledge Editing in Language Models

      论文发表于自然语言处理顶刊TACL-2024(原文链接).目前模型编辑方法的评估主要集中在测试单个事实是否被成功注入,以及模型对其它事实的预测是否没有改变.作者认为这样的评估模式有限,因为注入一个 ...

  4. [书籍精读]《你不知道的JavaScript(下卷)》精读笔记分享

    写在前面 书籍介绍:JavaScript这门语言简单易用,很容易上手,但其语言机制复杂微妙,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也无法真正理解.本套书直面当前JavaSc ...

  5. Java源码分析系列笔记-7.Lock之Condition

    目录 1. 是什么 2. 如何使用 3. 实现原理 3.1. uml 3.2. 创建Condition对象 3.2.1. 创建AQS.ConditionObject对象 3.2.1.1. Condit ...

  6. JavaScript的"数值计算困局":生态缺位下的破局之路

    本文原创首发于公众号[我做开发那些年]与网站[乔文小屋],现同步转载至本平台,点击阅读原文 声明:如需转载本文至其他平台,请注明文章来源及公众号信息,感谢您对原创内容的尊重与支持! *背景*:最近在尝 ...

  7. Elastic学习之旅 (10) Logstash数据采集

    大家好,我是Edison. 上一篇:结构化搜索 Logstash是啥? Logstash是一款优秀的开源ETL工具/数据搜集处理引擎,可以对采集到的数据做一系列的加工和处理,目前已支持200+插件具有 ...

  8. Codeforces Round #708 (Div. 2) ABC1C2题解

    A. Meximization 第i位优先放等于i-1的,没有的话就后面随便填了. view code #include<iostream> #include<string> ...

  9. leetcode 1605

    简介 leetcode 1605 思路:代码抄的,没啥想法 例如一个3*3的矩阵求解,我们已知6个方程,但是这个矩阵有9个变量,如何求解?注定是不能求出唯一解的,如果不是限定在非负整数数组范围内,那么 ...

  10. iPaas数据传输的方式

    一.iPaas平台概述 iPaas(Integration Platform as a Service)平台,作为一种先进的云计算服务模式,为开发者和企业提供了一种全面且灵活的应用集成解决方案.它构建 ...