社区讨论
O(n)时间复杂度还是TLE,为什么???
P1160队列安排参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo8j8okh
- 此快照首次捕获于
- 2023/10/27 19:31 2 年前
- 此快照最后确认于
- 2023/10/27 19:31 2 年前
TLE了 3 4 5点
CPP#include<iostream>
using namespace std;
struct Node{
long num;
Node* next;
Node(long _num=0,Node*_next=nullptr):num(_num),next(_next){}
};
int main(){
long N;
//cin>>N;
scanf("%ld",&N);
Node*head=new Node(1);
//cout<<head->num<<endl;
for(long i=2;i<=N;i++){
long k,p;
//cin>>k>>p;
scanf("%ld %ld",&k,&p);
if(p==1){
//i放在k右边
Node*temp=head;
while(temp){
if(temp->num==k){
break;
}
temp=temp->next;
}
Node*temp2=temp->next;
temp->next=new Node(i,temp2);
}
else{
//i放在k左边
Node*fast=head;
if(fast->num==k){
head=new Node(i,head);
continue;
}
else{
while(fast->next){
if(fast->next->num==k){
break;
}
fast=fast->next;
}
Node*slow=fast->next;
fast->next=new Node(i,slow);
}
}
}
/* cout<<"**************删除前检验**************"<<endl;
Node*p=head;
while(p){
cout<<p->num<<" ";
p=p->next;
}
cout<<endl;
*/
long M;
//cin>>M;//要删除的同学
scanf("%ld",&M);
for(long i=0;i<M;i++){
long x;
//cin>>x;
scanf("%ld",&x);
//删除编号为x的同学
if(head->num==x){
Node*temp=head;
head=head->next;
delete temp;
}
else{
Node*fast=head;
while(fast->next){
if(fast->next->num==x){
break;
}
fast=fast->next;
}
if(fast->next==nullptr){
continue;
}
Node*temp=fast->next->next;
delete fast->next;
fast->next=temp;
}
}
//输出结果
//cout<<"*******结果*******"<<endl;
Node*temp=head;
while(temp){
printf("%ld ",temp->num);
temp=temp->next;
}
//delete,释放内存
while(head){
Node*temp=head;
head=head->next;
delete temp;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...