王梓涵
( 梦幻の幸运使者 qwq)
1
链接
AC+WA+RE 20分。
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int id;
}a[1000001];
bool operator <(node l,node r){
return l.x<r.x;
}
priority_queue<node> q;
int n,p,y,s;
int ar[1000001];
bool f;
int main(){
cin>>n>>p>>y;
for(int i=1;i<=n;i++){
cin>>a[i].x;
if(i==p) a[i].x--;
if(i==y) a[i].x--;
s+=a[i].x;
a[i].id=i;
q.push(node{a[i].x,i});
}
int u=p;
ar[s+2]=y;
for(int i=2;i<=s+1;i++){
node t=q.top();
if(t.id!=u&&t.x>0){
q.pop();
ar[i]=t.id;
q.push(node{t.x-1,t.id});
u=ar[i];
}else if(q.size()&&t.x>0){
q.pop();
node v=q.top();
q.pop();
ar[i]=v.id;
q.push(node{v.x-1,v.id});
q.push(node{t.x,t.id});
u=ar[i];
}else if(!q.size()){
f=1;
}
}
if(f){
cout<<"0";
return 0;
}
for(int i=1;i<=s+1;i++){
if(ar[i]==ar[i+1]){
f=1;
}
}
if(f){
cout<<"0";
return 0;
}
cout<<p<<" ";
for(int i=2;i<=s+2;i++){
cout<<ar[i]<<" ";
}
return 0;
}
2 个赞
王梓涵
( 梦幻の幸运使者 qwq)
2
改了一下 70分。
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int id;
}a[1000001];
bool operator <(node l,node r){
return l.x<r.x;
}
priority_queue<node> q;
int n,p,y,s;
int ar[1000001];
bool f;
int main(){
cin>>n>>p>>y;
for(int i=1;i<=n;i++){
cin>>a[i].x;
if(i==p) a[i].x--;
if(i==y) a[i].x--;
s+=a[i].x;
a[i].id=i;
q.push(node{a[i].x,i});
}
int u=p;
ar[s+2]=y;
for(int i=2;i<=s+1;i++){
node t=q.top();
if(t.id!=u&&t.x>0){
q.pop();
ar[i]=t.id;
q.push(node{t.x-1,t.id});
u=ar[i];
}else if(q.size()&&t.x>0){
q.pop();
node v=q.top();
q.pop();
ar[i]=v.id;
q.push(node{v.x-1,v.id});
q.push(node{t.x,t.id});
u=ar[i];
}else if(!q.size()){
f=1;
}
}
if(f){
cout<<"0";
return 0;
}
for(int i=1;i<=s+1;i++){
if(ar[i]==ar[i+1]){
f=1;
}
}
if(f){
cout<<"0";
return 0;
}
cout<<p<<" ";
for(int i=2;i<=s+1;i++){
cout<<ar[i]<<" ";
}
cout<<ar[s+2];
return 0;
}
2 个赞
崩坏星穹铁道
(崩坏星穹铁道)
7
你重载应该要有双关键字吧?
bool operator <(node l,node r){
if(l.x!=r.x)return l.x<r.x;
else return l.id!=y;
}
2 个赞
王梓涵
( 梦幻の幸运使者 qwq)
12
AC了。
#include<bits/stdc++.h>
using namespace std;//找不到错找人帮我看
int n,p,y,s;
int ar[1000005];
bool f;
struct node{
int x;
int id;
}a[1000005];
bool operator <(node l,node r){
if (l.x != r.x) return l.x<r.x;
if (l.id == y) return 0;
if (r.id == y) return 1;
return 0;
}
priority_queue<node> q;
int main(){
cin>>n>>p>>y;
for(int i=1;i<=n;i++){
cin>>a[i].x;
if(i==p) a[i].x--;
if(i==y) a[i].x--;
s+=a[i].x;
a[i].id=i;
q.push(node{a[i].x,i});
}
int u=p;
ar[s+2]=y;
for(int i=2;i<=s+1;i++){
node t=q.top();q.pop();
if(t.x>0) t=t;
else{
f=1;
break;
}
if(t.id!=u&&t.x>0){
ar[i]=t.id;
q.push(node{t.x-1,t.id});
u=ar[i];
}else if(q.size()&&t.x>0){
node v=q.top();
q.pop();
ar[i]=v.id;
q.push(node{v.x-1,v.id});
q.push(node{t.x,t.id});
u=ar[i];
}else if(!q.size()){
f=1;
break;
}
}
if(f){
cout<<"0";
return 0;
}
for(int i=1;i<=s+1;i++){
if(ar[i]==ar[i+1]){
f=1;
}
}
if(f){
cout<<"0";
return 0;
}
cout<<p<<" ";
for(int i=2;i<=s+1;i++){
cout<<ar[i]<<" ";
}
cout<<ar[s+2];
return 0;
}
2 个赞