社区讨论

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 条回复,欢迎继续交流。

正在加载回复...