• PAT1025


    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1025

    就是排序,完全用的STL的sort...  竟然没有超时...  这道题有什么简单的好方法,给我说下,谢谢!

     1 #include<iostream>
     2 #include<string>
     3 #include<vector>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 struct Node
     8 {
     9     string id;
    10     int ln;
    11     int lr;
    12     int grade;
    13     int fr;
    14 };
    15 
    16 bool comp(Node n1, Node n2)
    17 {
    18     if(n1.grade > n2.grade)
    19         return true;
    20     else if(n1.grade == n2.grade && n1.id < n2.id)
    21         return true;
    22     else
    23         return false;
    24 }
    25 
    26 int transfer(string n)
    27 {
    28     int sum(0);
    29     int radix(1);
    30     for(int i=n.size()-1; i>=0; --i)
    31     {
    32         sum += (n[i]-'0')*radix;
    33         radix *= 10;
    34     }
    35     return sum;
    36 }
    37 
    38 int main()
    39 {
    40     int n;
    41     while(cin>>n)
    42     {
    43         vector<Node> all;
    44         for(int i=0; i<n; ++i)
    45         {
    46             int m; cin>>m;
    47             cin.ignore();
    48             vector<Node> input;
    49             for(int j=0; j<m; ++j)
    50             {
    51                 string in;
    52                 getline(cin, in);
    53                 string id(in, 0, 13); string grade(in, 14);
    54                 Node n={id, i+1, -1, transfer(grade), -1};
    55                 input.push_back(n);
    56             }
    57 
    58             sort(input.begin(), input.end(), comp);
    59             input[0].lr = 1; all.push_back(input[0]);
    60             for(int k=1; k<input.size(); ++k)
    61                 if(input[k].grade == input[k-1].grade)
    62                 {
    63                     input[k].lr = input[k-1].lr;
    64                     all.push_back(input[k]);
    65                 }
    66                 else
    67                 {
    68                     input[k].lr = k+1;
    69                     all.push_back(input[k]);
    70                 }    
    71         }
    72         sort(all.begin(), all.end(), comp);
    73         all[0].fr = 1; 
    74         for(int k=1; k<all.size(); ++k)
    75             if(all[k].grade == all[k-1].grade)
    76                 all[k].fr = all[k-1].fr;
    77             else
    78                 all[k].fr = k+1;
    79         cout<<all.size()<<endl;
    80         for(int i=0; i<all.size(); ++i)
    81             cout<<all[i].id<<" "<<all[i].fr<<" "
    82                 <<all[i].ln<<" "<<all[i].lr<<endl;
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    记:关于反演
    记:关于费马平方和定理的证明
    【2021集训队互测一】愚蠢的在线法官 题解
    CSP/NOIP2021 赛前集训
    20220108 省选组 总结
    Atcoder比赛总结
    Python读取execl数据写入到mysql
    大家都可以拖动的web小方块——Node.js摸石头系列之七
    创建一个Mybatis工程
    Spring整合Mybatis
  • 原文地址:https://www.cnblogs.com/bochen-sam/p/3365199.html
Copyright © 2020-2023  润新知