The 2020 ICPC Asia Yinchuan Regional Programming Contest
A
开三个vector
数组存储x,y,z
轴上的点,unique
+erase
去重
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
const int N=110;
typedef pair<int,int> PII;
vector<PII>x,y,z;
map<char,int>mp;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int a,b,c;
cin>>a>>b>>c;
x.push_back({b,c});
y.push_back({a,c});
z.push_back({a,b});
}
sort(x.begin(),x.end());sort(y.begin(),y.end());sort(z.begin(),z.end());
x.erase(unique(x.begin(),x.end()),x.end());
y.erase(unique(y.begin(),y.end()),y.end());
z.erase(unique(z.begin(),z.end()),z.end());
//cout<<x.size()<<" "<<y.size()<<" "<<z.size()<<endl;
int t=max(x.size(),max(y.size(),z.size()));
if(t==x.size()) puts("X");
else if(t==y.size()) puts("Y");
else puts("Z");
return 0;
}
J
类似链表,先找到左上角第一个数字,每次输出右边的e[i]
,然后换行(储存本行最左边第一个数字end
,换行即s[end]
)
注意每行最后一个数字后面没有空格
#include <iostream>
using namespace std;
const int N = 1e6+10;
int n[N],s[N],w[N],e[N];
int main() {
int m; cin >> m;
int j,end;
for(int i = 1;i <= m*m;i ++) {
cin >> n[i] >> s[i] >> w[i] >> e[i];
if(w[i] == -1 && n[i] == -1) j = i;
}
end = j;//end每次存所在行第一个数字(因为换行要用到它的s方向数字)
for(int i = 1;i <= m*m;i ++)
{
if(e[j] == -1)
{
cout << j << endl;
j = s[end], end = s[end];//换行
}
else
{
cout << j << ' ';
j = e[j];
}
}
return 0;
}
E
破模拟子
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<string,int>mp;
int main()
{
int t;
cin>>t;
mp["-F"]=8; mp["-CL"]=7;mp["-Br"]=6;mp["-I"]=5;
mp["-CH3"]=4;mp["-CH2CH3"]=3;mp["-CH2CHCH3"]=2; mp["-H"]=1;
while(t--)
{
string r1,r2,r3,r4;
cin>>r1>>r2>>r3>>r4;
if(r1==r3||r3==r4) puts("None");
else if(r1==r2||r3==r4) puts("Cis");
else if(r1==r4||r2==r3) puts("Trans");
else if((mp[r1]>mp[r3]&&mp[r2]>mp[r4])||(mp[r3]>mp[r1]&&mp[r4]>mp[r2])) puts("Zasamman");
else puts("Entgegen");
}
return 0;
}