题解 CF1599A Weights
题意概述
给出
给出一个仅包含 L 与 R 的长度为 L 或右端 R 更重。你需要构造一种满足字符串限制的放置物品的方案。若无解,输出 -1。
Solution
样例没给 -1 那就是没有,思考通解。
因为是构造题,考虑把规模为
从最终情况(不妨设是 R)倒推,每次取出一个元素。先说结论,将第
在这种情况下,考虑取出什么元素能够使天平状态不变/改变,且能使问题的形式一样:
- 取出最小的元素,天平状态一定不变。
- 取出最大的元素,天平状态一定改变。
而且在这两种情况下,天平的摆放状况仍然是,物品从小到大摆放左右交替的形式,而规模变为了
#include<bits/stdc++.h>
#define rgi register int
#define FOR(i,a,b) for(rgi i=a;i<=b;++i)
using namespace std;
const int N=400010;
int n,a[N],ans[N];
char s[N];
signed main(){
scanf("%d",&n);
FOR(i,1,n)scanf("%d",&a[i]);
sort(a+1,a+n+1),scanf("%s",s+1);
for(rgi l=1,r=n;l<=r;){
rgi w=r-l+1;
ans[w]=(s[w]==s[w-1]?l++:r--);
}
FOR(i,1,n)printf("%d %c\n",a[ans[i]],"LR"[(ans[i]&1)^(n&1)^(s[n]=='R')]);
return 0;
}