LGR-171
2024 首个 AK 的比赛,祭。
Water
分析
注意到答案一定是
Line
分析
注意到本题答案
如果两个条件,即
假如都不成立,需要移动两次,直到两条线段都过同一个点。
代码就不放了。
Reverse and Rotate
分析
2024 第一场 AK 的比赛,祭。
不难发现一点,不管如何操作,最终得到的串一定可以表示为原串翻转或不翻转后向右移动若干位。考虑维护是否翻转,与最后移动多少位。
是否翻转直接用 rev
的数量统计。移动的位数也好分析,我们提出以下几个结论:
- 向右移动
位相当于向右移动 位。 - 向左移动
位( )相当于向右移动 位。 - 翻转后向右移动
位相当于向左移动 位再翻转。
前两个非常好证,至于最后一个,我们考虑把 abcde
为例,那么把它看成串 ...abcdeabcdeabcde...
中间的
那么这就非常好办了,引入变量 rev
就
AC Code
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
int n,flag=0,p=0;
cin>>s>>n;
while(n--)
{
string opt;
cin>>opt;
if(opt=="rev") flag^=1,p=s.size()-p;
else if(opt=="<")
{
int m;
cin>>m;
m%=s.size();
p+=s.size()-m;
p%=s.size();
}
else
{
int m;
cin>>m;
m%=s.size();
p+=m;
p%=s.size();
}
}
if(flag) for(int i=0;i<s.size()/2;i++) swap(s[i],s[s.size()-1-i]);
if(!p) cout<<s;
else
cout<<s.substr(s.size()-p,p)+s.substr(0,s.size()-p);
return 0;
}
Choose
分析
2024 第一场 AK 的比赛,祭。
我们首先很容易发现一点,当子段长度为
下一步考虑如何求
赛时代码比较乱,加点注释。
AC Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
int lg[100010],st[100010][22],st2[100010][22],n,k,x;
int check(int len,int jc)
{
int tp=0;
for(int i=1;i+len-1<=n;i++)
{
if(max(st[i][lg[len]],st[i+len-1-(1<<lg[len])+1][lg[len]])-min(st2[i][lg[len]],st2[i+len-1-(1<<lg[len])+1][lg[len]])>=jc) tp++;
//ST表求出最大值减去最小值,tp是极差大于X的子段数量
}
if(tp>=k) return 1;
return 0;
}
void solve()
{
mp.clear();
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>st[i][0],st2[i][0]=st[i][0];
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
st2[i][j]=min(st2[i][j-1],st2[i+(1<<(j-1))][j-1]);
//ST表预处理
x=2e9;
for(int i=1;i<=k;i++) x=min(x,max(st[i][lg[n-k+1]],st[i+n-k-(1<<lg[n-k+1])+1][lg[n-k+1]])-min(st2[i][lg[n-k+1]],st2[i+n-k-(1<<lg[n-k+1])+1][lg[n-k+1]]));
//X为每个长度为L0=n-k+1的子段的极差最小值
cout<<x<<' ';
int l=1,r=n+1-k,mid;
while(l<r)
{
mid=(l+r)>>1;
if(check(mid,x))
{
r=mid;
}
else l=mid+1;
}//二分
cout<<l<<endl;
}
signed main()
{
lg[1]=0;lg[2]=1;
for(int i=3;i<=1e5;i++) lg[i]=lg[i/2]+1;
//ST表预处理
int t;
cin>>t;
while(t--) solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】