昌都市网站建设_网站建设公司_小程序网站_seo优化
2026/1/1 21:04:37 网站建设 项目流程

​【题目来源】
https://oj.czos.cn/p/1953

【题目描述】
新生舞会开始了。
n 名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过 20 的仅由大小写字母构成的字符串表示,学号用长度不超过 10 的仅由数字构成的字符串表示,性别用一个大写字符 F 或 M 表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。
给出 m 对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。

【输入格式】
第一行一个整数 n(2≤n≤1000),表示学生人数。接下来的 n 行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
之后的一行是一个整数 m(1≤m≤1000),表示询问的数目。
接着的 m 行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。​​​​​​​

【输出格式】
对于每个询问输出一行,如果两人可以共舞,输出一个大写字母 Y,否则输出一个大写字母 N。

【输入样例】
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jack​​​​​​​

【输出样例】
N
Y
N

【数据范围】
2≤n≤1000,
1≤m≤1000

【算法分析】
isdigit(x) 函数用于判断字符 x 是否为十进制数字字符(即 '0' 到 '9')。

【算法代码:STL map

#include <bits/stdc++.h>
using namespace std;map<string,char> nameToSex;
map<string,char> idxToSex;
string name,idx;
char sex;
int n,m;int main() {cin>>n;while(n--) {cin>>name>>idx>>sex;nameToSex[name]=sex;idxToSex[idx]=sex;}cin>>m;while(m--) {string s,t;cin>>s>>t;char sexA, sexB;if(isdigit(s[0])) sexA=idxToSex[s];else sexA=nameToSex[s];if(isdigit(t[0])) sexB=idxToSex[t];else sexB=nameToSex[t];if(sexA!=sexB) cout<<"Y"<<endl;else cout<<"N"<<endl;}return 0;
}/*
in:
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jackout:
N
Y
N
*/


【算法代码二:结构体 + STL map

#include <bits/stdc++.h>
using namespace std;const int maxn=1e3+5;
map<string,char> nameToSex;
map<string,char> idxToSex;struct Person {string name;string idx;char sex;
} p[maxn];int main() {int n,m;cin>>n;for(int i=1; i<=n; i++) {cin>>p[i].name>>p[i].idx>>p[i].sex;nameToSex[p[i].name]=p[i].sex;idxToSex[p[i].idx]=p[i].sex;}cin>>m;while(m--) {string s,t;cin>>s>>t;char sexA,sexB;if(isdigit(s[0])) sexA=idxToSex[s];else sexA=nameToSex[s];if(isdigit(t[0])) sexB=idxToSex[t];else sexB=nameToSex[t];if(sexA!=sexB) cout<<"Y"<<endl;else cout<<"N"<<endl;}return 0;
}/*
in:
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jackout:
N
Y
N
*/

 


【参考文献】
https://oj.czos.cn/p/1953

 

 

 

 

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询