把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 P6548 [COCI2010-2011#2] IGRA

传送门

题意

AB 两个人,有一个含 n 个字符的字符串。A 始终取最右侧的字符,B 可以取任意一个字符,问 B 所取的字符串能否胜过 A,以及 B 能取的最大字符串。

分析

首先,我们 A 肯定会选择当前的最小的字符,我们就可以先把字符按大小排序,字符相同的按下标从大到小排序,将 B 每次取的的标记,跳过这些节点即可。

#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int N = 1e5+5;
int n, m,pos[N];
char s[N],c[N];
bool vis[N];
struct node {
char num;
int id;
friend bool operator < (node fi,node se) {
return fi.num==se.num? fi.id>se.id :fi.num<se.num;
}
} b[N];
char ans[N];
signed main() {
cin>>n>>s+1;
for(int i=1; i<=n; ++i) b[i]=<%s[i],i%>;
sort(b+1,b+n+1);
for(int i=1; i<=n; ++i) pos[b[i].id]=i;
int R=n,flag=1,now=1;
for(int i=1; i<=n/2; ++i) {
while(R&&vis[pos[R]]) --R;
vis[pos[R]]=1;
while(vis[now]) ++now;
vis[now]=1;
ans[i]=b[now].num;
if(flag==1&&s[R]>b[now].num) flag=0;
else if(flag==1&&s[R]<b[now].num) flag=2;
}
if(flag) cout<<"NE\n";
else cout<<"DA\n";
for(int i=1;i<=n/2;++i) cout<<ans[i];
return 0;
}
posted @   djh0314  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示