标签:输出 排序 int Gym Codeforces ICPC 大小 include define
-
题意:给你5个\(A,B,C,D,E\)大小关系式,升序输出它们,如果所给的大小矛盾,输出\(impossible\).
-
题意:当时第一眼想到的就是连边然后排序,很明显是拓扑排序(
然而我不会qwq,之后再补),但貌似可以直接暴力来写,用二维数组来记录两个数之间的大小关系,如果一维\(>\)二维就记录true,然后我们要对题目所给的关系进行合并,将所有大小关系弄清楚,三个for就可以搞定了,之后判断一下是否有矛盾存在,最后再统计一下大小然后再按顺序输出即可(这题的输出其实没怎么看懂,之前写的桶排输出不知道为什么不给过qaq). -
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #define ll long long #define fi first #define se second #define pb push_back #define me memset const int N = 1e6 + 10; const int mod = 1e9 + 7; using namespace std; typedef pair<int,int> PII; typedef pair<long,long> PLL; string s; int v[100][100]; int cnt[N]; map<int,int> mp; vector<int> rest; int main() { ios::sync_with_stdio(false);cin.tie(0); for(int i=1;i<=5;++i){ cin>>s; //初始化记录 for(int j=0;j<s.size();++j){ if(s[1]=='>') v[s[0]-'A'][s[2]-'A']=1; else v[s[2]-'A'][s[0]-'A']=1; } } //合并 for(int k=0;k<5;++k){ for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ if(v[i][k] && v[k][j]) v[i][j]=1; } } } for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ if(v[i][j] && v[j][i]){ puts("impossible"); return 0; } } } //统计大小 for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ if(v[i][j]) cnt[i]++; } } for(int len=0;len<5;++len){ for(int num=0;num<5;++num){ if(cnt[num]==len) printf("%c",num+'A'); } } return 0; }
标签:输出,排序,int,Gym,Codeforces,ICPC,大小,include,define 来源: https://www.cnblogs.com/lr599909928/p/12904846.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。