[题解]CSP2020-S Snakes
放个代码吧,开个坑
#include<bits/stdc++.h>
#define rep(i,a,b) for (register int i=(a);i<=(b);i++)
#define drep(i,a,b) for (register int i=(a);i>=(b);i--)
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
inline ll read()
{
ll sum=0,f=0;char c=getchar();
while (!isdigit(c)) f|=(c=='-'),c=getchar();
while (isdigit(c)) sum=(sum<<1)+(sum<<3)+(c^48),c=getchar();
return f?-sum:sum;
}
inline void setfile()
{
#ifndef ntftxdy
freopen("call.in","r",stdin);
freopen("call.out","w",stdout);
#endif
}
const int N=1000010;
int n,a[N],win[N],pos[N];
struct node{int val,id;bool operator < (const node &a) const{return a.val==val?id<a.id:val<a.val;}};
deque<node>q1,q2;
inline bool cmp(node x,node y){return x.val==y.val?x.id<y.id:x.val<y.val;}
inline bool getmin(){return q1.size()?q2.size()?(cmp(q1.back(),q2.back())):1:0;}
inline bool getmax(){return q1.size()?q2.size()?(!cmp(q1.front(),q2.front())):1:0;}
inline int solve()
{
while (q1.size()) q1.pop_back();
while (q2.size()) q2.pop_back();
rep(i,1,n) q1.push_front((node){a[i],i});
rep(i,1,n-1)
{
node bg=(getmax()?q1:q2).front(),sm=(getmin()?q1:q2).back();
(getmax()?q1:q2).pop_front(),(getmin()?q1:q2).pop_back();
q2.push_back((node){bg.val-sm.val,bg.id});
node _sm=(getmin()?q1:q2).back();
if (_sm.id==bg.id)
{
return n-(i-1)-(q1.size()+q2.size())%2;
}
}
return 1;
}
int main()
{
int T=read();n=read();
rep(i,1,n) a[i]=read();
printf("%d\n",solve());
rep(i,1,T-1)
{
int k=read();
for (int j=1,x,y;j<=k;j++) x=read(),y=read(),a[x]=y;
printf("%d\n",solve());
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端