• 【专题复习6:链表】1032、1052、1074、1097、1133


    1032

    1032

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    struct Node
    {
        char key;
        int next;
        bool flag;
    }node[100000];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s1,s2,id;
        cin>>s1>>s2>>n;
        for(int i=0;i<n;i++){
            cin>>id;
            cin>>node[id].key>>node[id].next;
        }
        for(int i=s1;i!=-1;i=node[i].next)
            node[i].flag=true;
        for(int i=s2;i!=-1;i=node[i].next){
            if(node[i].flag==true){
                printf("%05d",i);
                return 0;
            }
        }
        printf("-1");
        return 0;
    }
    
    

    1052

    1052
    可恶,我的眼睛咋这么不好使呢,一个bug卡了半天竟是因为cnt写成了n...

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    struct Node
    {
        int data,key;
        int next;
        bool flag;
    } v[100000];
    bool cmp(Node a,Node b)
    {
        return !a.flag||!b.flag?a.flag>b.flag:a.key<b.key;
    }
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s1,id,cnt=0;
        cin>>n>>s1;
        for(int i=0; i<n; i++)
        {
            cin>>id;
            v[id].data=id;
            cin>>v[id].key>>v[id].next;
        }
        for(int i=s1; i!=-1; i=v[i].next){
            v[i].flag=true;
            cnt++;
        }
        if(cnt==0)
            cout<<"0 -1";
        else
        {
            sort(v,v+100000,cmp);
            printf("%d %05d\n",cnt,v[0].data);
            for(int i=0; i<cnt-1; i++)
            {
                printf("%05d %d %05d\n",v[i].data,v[i].key,v[i+1].data);
            }
            printf("%05d %d -1\n",v[cnt-1].data,v[cnt-1].key);
    
        }
        return 0;
    }
    
    

    1074

    1074
    这个用法reverse(begin(result)+i,begin(result)+i+k);还是少,但是柳神这个数学表达式result[i] = list[i / k * k + k - 1 - i % k];也太难想了T^T

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=100000;
    int Address[maxn],Next[maxn],result[maxn];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s,k,id,key,nxt,cnt=0;
        cin>>s>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>id>>key>>nxt;
            Address[id]=key;
            Next[id]=nxt;
        }
        for(int i=s; i!=-1; i=Next[i]){
            result[cnt++]=i;
        }
        for(int i=0;i<cnt-cnt%k;i+=k)
            reverse(begin(result)+i,begin(result)+i+k);
        for(int i=0; i<cnt-1; i++)
        {
            printf("%05d %d %05d\n",result[i],Address[result[i]],result[i+1]);
        }
        printf("%05d %d -1\n",result[cnt-1],Address[result[cnt-1]]);
        return 0;
    }
    
    

    1097

    1097

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=100000;
    struct Node
    {
        int address,key,next;
        int num=2*maxn;
    }node[maxn];
    int vis[maxn];
    bool cmp(Node a,Node b){ return a.num<b.num;}
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s,id,cnt1=0,cnt2=0;
        cin>>s>>n;
        for(int i=0; i<n; i++)
        {
            cin>>id;
            node[id].address=id;
            cin>>node[id].key>>node[id].next;
        }
        for(int i=s;i!=-1;i=node[i].next){
            if(vis[abs(node[i].key)]==false){
                node[i].num=cnt1;
                vis[abs(node[i].key)]=true;
                cnt1++;
            }else{
                node[i].num=maxn+cnt2;
                cnt2++;
            }
        }
        sort(node,node+maxn,cmp);
        int cnt=cnt1+cnt2;
        for(int i=0; i<cnt; i++)
        {
            if(i!=cnt1-1&&i!=cnt-1)
                printf("%05d %d %05d\n",node[i].address,node[i].key,node[i+1].address);
            else
                printf("%05d %d -1\n",node[i].address,node[i].key);
        }
        return 0;
    }
    
    

    1133

    1133

    正确答案

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=100000;
    struct Node
    {
        int address,key,next;
    }node[maxn];
    int vis[maxn];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s,id,k;
        cin>>s>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>id;
            node[id].address=id;
            cin>>node[id].key>>node[id].next;
        }
        vector<int> v[3];
        for(int i=s;i!=-1;i=node[i].next){
            if(node[i].key<0){
                v[0].push_back(i);
            }else if(node[i].key>k){
                v[2].push_back(i);
            }else v[1].push_back(i);
        }
        int flag=0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < v[i].size(); j++) {
                if (flag == 0) {
                    printf("%05d %d ", v[i][j], node[v[i][j]].key);
                    flag = 1;
                } else {
                    printf("%05d\n%05d %d ", v[i][j], v[i][j], node[v[i][j]].key);
                }
            }
        }
        printf("-1");
        return 0;
    }
    
    

    19分答案

    我这个答案输出处理的和shit一样Orz

    点击查看代码
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=100000;
    struct Node
    {
        int address,key,next;
    }node[maxn];
    int vis[maxn];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s,id,k;
        cin>>s>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>id;
            node[id].address=id;
            cin>>node[id].key>>node[id].next;
        }
        vector<int> v[3];
        for(int i=s;i!=-1;i=node[i].next){
            if(node[i].key<0){
                v[0].push_back(i);
            }else if(node[i].key>k){
                v[2].push_back(i);
            }else v[1].push_back(i);
        }
        for(int i=0; i<v[0].size(); i++){
            if(i!=v[0].size()-1)
                printf("%05d %d %05d\n",v[0][i],node[v[0][i]].key,v[0][i+1]);
            else if(v[1].size()!=0)
                printf("%05d %d %d\n",v[0][i],node[v[0][i]].key,v[1][0]);
        }
        for(int i=0; i<v[1].size(); i++){
            if(i!=v[1].size()-1)
                printf("%05d %d %05d\n",v[1][i],node[v[1][i]].key,v[1][i+1]);
            else if(v[2].size()!=0)
                printf("%05d %d %d\n",v[1][i],node[v[1][i]].key,v[2][0]);
        }
        for(int i=0; i<v[2].size(); i++){
            if(i!=v[2].size()-1)
                printf("%05d %d %05d\n",v[2][i],node[v[2][i]].key,v[2][i+1]);
            else
                printf("%05d %d -1\n",v[2][i],node[v[2][i]].key);
        }
        return 0;
    }
    
    
  • 相关阅读:
    springboot中多端口启动(这里也适用于https既443端口)
    Gson的fromJson()方法(从Json相关对象到Java实体或转换成List集合)
    [C++] STL源码中学到的 Traits 编程技法的应用
    【解决问题】UNIAPP、VUE 中DATA 数组更新后页面不同步动态渲染更新
    selenium操作chrome时的一些配置
    在react项目中使用fetch 和 JWT进行权限验证(转)
    滚动条的设置(样式包括宽度,颜色等)zhuan
    css3 box-shadow阴影(外阴影与外发光)图示讲解(zhuan)
    js 截断字符串 超过几个字加...
    create-react-app 打包部署
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15957599.html
Copyright © 2020-2023  润新知