样例RE
  • 板块P1878 舞蹈课
  • 楼主JJA_
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/2/26 20:09
  • 上次更新2023/11/5 02:40:07
查看原帖
样例RE
352464
JJA_楼主2021/2/26 20:09

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]);
	}
}
2021/2/26 20:09
加载中...