ABC389
场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!场上被 E 卡 50 min 结果赛后一分钟过 F!
A - 9x9
借助 scanf
可以轻松完成。
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
int a,b;
int main(){
scanf("%dx%d",&a,&b);
cout<<a*b<<endl;
}
B - tcaF
发现
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
long long a,fac=1;
int main(){
cin>>a;
for(long long i=1;;i++){
fac*=i;
if(fac==a){
cout<<i<<endl;
return 0;
}
}
}
C - Snake Queue
出题人都让我们用队列了,那就用队列吧。
我们用队列维护没有离开的蛇。
每加入一条蛇,计算它的头部到第一条加入操作的蛇的头部的距离,记第
每删除一条蛇,就让他从队头离开。
操作三实际上就是查询第
主要考察前缀和。
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=3e5+10;
typedef long long ll;
ll s[N],l,r,n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
ll op,x;
scanf("%lld",&op);
if(op==1){
scanf("%lld",&x);
r++,s[r]=s[r-1]+x;
}else if(op==2){
l++;
}else if(op==3){
scanf("%lld",&x);
printf("%lld\n",s[l+x-1]-s[l]);
}
}
return 0;
}
时间复杂度
D - Snake Queue
我们将圆等分成四部分,容易发现这四部分包含的方格个数都一样。所以我们只计算右上部分的,最后乘
将圆心所在的格子用
假设
将答案乘四后,我们发现
好像有通项公式。
点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=3e5+10;
long long ans,r,res;
double dist(double x,double y){
return x*x+y*y;
}
int main(){
cin>>r;
for(int i=0,j=r-1;i<r;i++){
while(dist(i+0.5,j+0.5)>r*r)j--;
if(i==0)res=j+1;
ans+=j+1;
}
cout<<ans*4-4*res+1<<endl;
return 0;
}
时间复杂度
E - Square Price
又被 E 创思了。
本题笔者场上没写出来,所以没代码。思路由赛后热心谷民提供。
先将所有商品按照
我们思考这样一个买商品的过程:
每个商品用二元组
我们把所有决策插入堆中,然后取出当前费用最小的商品,将总费用加上
回顾
同时,最优方案下,无论何时,都满足对于任意
我们惊喜的发现,在这种约束下,只要确定了
这样做,只需二分
时间复杂度
F - Rated Range
因为 E 写了 50 min,导致这道题没有时间调试,最后赛后光速过题。
设
以第一个样例为例,初始时:
评分超过
其中,评分在
第二轮:评分
第三轮:评分
剩下几轮可以自己手摸。
容易发现,不管怎么打公开赛,
证明很简单,假设存在某个位置
这样就好办多了。用线段树维护
加评分就是区间加,用懒标记维护。最后处理询问
点击查看代码
#include <iostream>
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
const int M=5e5+10,inf=0x3f3f3f3f;
int mx[M<<2],tag[M<<2],n,q,x;
void push_up(int p){
mx[p]=max(mx[ls],mx[rs]);
}
void push_down(int p){
if(!tag[p])return;
tag[ls]+=tag[p],mx[ls]+=tag[p];
tag[rs]+=tag[p],mx[rs]+=tag[p];
tag[p]=0;return;
}
void add(int p,int l,int r,int L,int R){
if(L<=l&&r<=R){
tag[p]++,mx[p]++;
}else{
push_down(p);int mid=(l+r)>>1;
if(L<=mid)add(ls,l,mid,L,R);
if(R>mid)add(rs,mid+1,r,L,R);
push_up(p);
}
}
int ask(int p,int l,int r,int x){
if(l==r)return l;
push_down(p);int mid=(l+r)>>1,ans;
if(mx[ls]>=x)ans=ask(ls,l,mid,x);
else if(mx[rs]>=x)ans=ask(rs,mid+1,r,x);
push_up(p);return ans;
}
void build(int p,int l,int r){
mx[p]=r;if(l==r)return;
int mid=(l+r)>>1;
build(ls,l,mid),build(rs,mid+1,r);
push_up(p);return;
}
int qry(int p,int l,int r,int x){
if(l==r)return mx[p];
push_down(p);int mid=(l+r)>>1;
if(x<=mid)return qry(ls,l,mid,x);
if(x>mid)return qry(rs,mid+1,r,x);
}
int main(){
scanf("%d",&n);
build(1,1,500001);//因为查询r+1可能超过 500000,所以要加1,因为这一点场上被创思了
for(int i=1;i<=n;i++){
int l,r;
scanf("%d %d",&l,&r);
int L=ask(1,1,500001,l);
int R=ask(1,1,500001,r+1)-1;
if(L<=R)add(1,1,500001,L,R);
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
int x;
scanf("%d",&x);
printf("%d\n",qry(1,1,500001,x));
}
return 0;
}
时间复杂度
G - Odd Even Graph
看 都 没 看。
还是太菜了呜呜呜。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战