RT,窝实在调不动了/kk
求帮忙
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<queue>
//#include<map>
#include<vector>
using namespace std;
//#define int long long
#define forr(i,a,b) for(int i=a;i<=b;i++)
#define repp(i,a,b) for(int i=a;i>=b;i--)
#define INF 1e9
#define ll long long
#define MAXN 200005
const int _x[]={0,1,0,-1,0},_y[]={0,0,1,0,-1};
#define mem(a,n) memset(a,n,sizeof(a));
#define chkmax(a,b) a=a>b?a:b;
#define chkmin(a,b) a=a<b?a:b;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int minn=10000010,anser=0,flag=0;
vector<int> ansfront;
vector<int> ansback;
typedef struct List{
int val,sex,num;
int sum;
List* next;
}Node;
Node* Addlist(Node* list,int num){
// puts("add");
if(list==NULL){
list=new Node();
list->next=NULL;
list->num=num;
list->sex=list->val=0;
list->sum=0;
return list;
}
list->next=Addlist(list->next,num+1);
}
Node* Insertval(Node* list,int val=0){
// puts("val");
if(list->val==0){
list->val=val;
return list;
}
else{
list->next=Insertval(list->next,val);
}
}
Node* Insertsex(Node* list,int sex){
// puts("sex");
if(list->sex==0){
list->sex=sex;
return list;
}
else{
list->next=Insertsex(list->next,sex);
}
}
void dfs(Node* list){
if(list==NULL){
return;
}
printf("%d %d %d %d\n",list->num,list->sex,list->val,list->sum);
dfs(list->next);
}
int preserve(Node* list){
// puts("preserve");
if(list==NULL){
return -1;
}
else if(list->next==NULL){
list->sum=-1;
return minn;
}
else if(list->sex==list->next->sex){
list->sum=-1;
}
else{
list->sum=abs(list->val-list->next->val);
if(list->sum!=-1)
chkmin(minn,list->sum);
}
preserve(list->next);
}
Node* pop(Node* list,int val){
// puts("pop");
if(list==NULL){
return list;
}
else if(list->sum!=val){
list->next=pop(list->next,val);
}
else{
anser++;
Node* temp=list;
Node* nextt=list->next;
list=nextt->next;
ansfront.push_back(temp->num);
ansback.push_back(temp->next->num);
delete temp;
delete nextt;
}
}
int sex[MAXN];
int main(){
int n;
char ch;
int val;
Node* list=NULL;
scanf("%d",&n);
forr(i,1,n){
list=Addlist(list,1);
cin>>ch;
if(ch=='B'){
sex[i]=1;
}
else sex[i]=2;
list=Insertsex(list,sex[i]);
}
forr(i,1,n){
scanf("%d",&val);
list=Insertval(list,val);
}
while(1){
int chk=preserve(list);
printf("%d\n",chk);
if(chk==-1){
break;
}
list=pop(list,minn);
}
printf("%d\n",anser);
forr(i,0,ansfront.size()-1){
printf("%d %d\n",ansfront[i],ansback[i]);
}
}