1 条题解
-
0
自动搬运
来自洛谷,原作者为

FFTotoro
龙猫搬运于
2025-08-24 21:16:22,当前版本为作者最后更新于2024-06-10 11:35:32,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
整点烂活。
因为我们不知道表格的每一列是整数还是字符串,所以我们可以用
std::variant<int,std::string>(需要 C++17,作用为存储一个整数或字符串)来存储表格中的元素。把所有条件都存储在一个
std::vector里面。因为如果条件都一样要保持原来的顺序,所以使用std::stable_sort进行排序,cmp函数里当所有条件都一样时就返回false即可。放代码:
#include<bits/stdc++.h> using namespace std; inline vector<variant<int,string> > f(string s){ vector<variant<int,string> > a; for(int i=0,j;i<s.length();i=j+1){ string t; for(j=i;j<s.length()&&s[j]!=',';j++)t+=s[j]; bool D=true; // 是否全是数字 for(char i:t)D&=isdigit(i); if(D)a.emplace_back(stoi(t)); else a.emplace_back(t); } return a; } // 对输入的字符串进行解析 int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; string h; cin>>n>>h; auto H=f(h); vector<string> t(n-1); for(auto &i:t)cin>>i; vector<vector<variant<int,string> > > T(n-1); for(int i=0;i<n-1;i++)T[i]=f(t[i]); vector<pair<int,int> > C; int m; cin>>m; for(int i=0;i<m;i++){ string s; cin>>s; for(int j=0;j<H.size();j++) if(s.substr(0,s.length()-1)==get<string>(H[j])){ C.emplace_back(j,s.back()=='+'); break; } // 判断是什么类型的条件 } stable_sort(T.begin(),T.end(),[&](auto x,auto y){ for(auto [a,s]:C) if(x[a]!=y[a])return s?x[a]<y[a]:x[a]>y[a]; return false; }); // 进行排序 cout<<h<<endl; for(auto x:T) for(int j=0;j<x.size();j++){ if(get_if<int>(&x[j]))x[j]=to_string(get<int>(x[j])); cout<<get<string>(x[j])<<",\n"[j==x.size()-1]; } return 0; }
- 1
信息
- ID
- 10324
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者