题目链接:L2-028 秀恩爱分得快

题目:
古人云:秀恩爱,分得快。
互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了 K
个人,这些人两两间的亲密度就被定义为
1/K。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。下面给定一批照片,请你分析一对给定的情侣,看看他们分别有没有亲密度更高的异性朋友?

输入格式:
输入在第一行给出 2 个正整数:N(不超过1000,为总人数——简单起见,我们把所有人从 0 到 N-1 编号。为了区分性别,我们用编号前的负号表示女性)和 M(不超过1000,为照片总数)。随后 M 行,每行给出一张照片的信息,格式如下:K P[1] … P[K]
其中 K(≤ 500)是该照片中出现的人数,P[1] ~ P[K] 就是这些人的编号。最后一行给出一对异性情侣的编号 A 和 B。同行数字以空格分隔。题目保证每个人只有一个性别,并且不会在同一张照片里出现多次。

输出格式:
首先输出 A PA,其中 PA 是与 A 最亲密的异性。如果 PA 不唯一,则按他们编号的绝对值递增输出;然后类似地输出 B PB。但如果 A 和 B 正是彼此亲密度最高的一对,则只输出他们的编号,无论是否还有其他人并列。

输入样例 1:
10 4
4 -1 2 -3 4
4 2 -3 -5 -6
3 2 4 -5
3 -6 0 2
-3 2
输出样例 1:
-3 2
2 -5
2 -6

输入样例 2:
4 4
4 -1 2 -3 0
2 0 -3
2 2 -3
2 -1 2
-3 2
输出样例 2:
-3 2

分析:

朴素做法是直接读取照片信息,处理后再输入A,B进行判断。这样是可以的,但是要注意的是题目所给的数据在最大的数据下直接做是会超时超内存的。

仔细分析题意,我们发现最后比较的时候仅仅是对关于A,B的异性朋友,其他数据都是无效数据。为了不超时超内存,我们先对照片进行预处理,仅需要处理出人的性别即可,再输入A,B后再来进行亲密度的计算,以此达到不超时超限的目的。

坑点分析:网上都有,不过我还是要强调一下,0和-0的时候不能用int来区别,所以对于照片的处理要用到字符串string

下面上代码:

#include<bits/stdc++.h> //万能头文件
using namespace std;
int n, m;
bool sex[1005]; //存性别,false为男性
double qa[1005], qb[1005]; //存亲密度
vector<int> p[1005]; //预存照片
void the1(int t){ //处理照片string s;getline(cin,s);string v="";int i; for(i=0;i<(int)s.size();i++) if(s[i]==' ') break;i++; //因为用的vector存照片的人所以k没有用了for(;i<(int)s.size();i++){ //获取照片人的性别以及编号,注意临界条件if(s[i]!=' ') {v+=s[i];if(i+1==(int)s.size()){bool flag=false; if(v[0]=='-') flag=true,v.erase(0,1);int a=0; for(auto k:v) a=a*10+k-'0';sex[a] = flag;p[t].push_back(a); //a为照片人编号,并将其存入照片}}else if(s[i]==' '){bool flag=false; if(v[0]=='-') flag=true,v.erase(0,1);int a=0; for(auto k:v) a=a*10+k-'0';sex[a] = flag;p[t].push_back(a);v="";}}
}
void the2(int &a, int &b){ //处理A,B,获取编号以及性别string s1, s2;cin>>s1>>s2;bool flag=false;if(s1[0]=='-') flag=true,s1.erase(0,1);a=0; for(auto i:s1) a = a*10+i-'0'; sex[a]=flag;flag = false; if(s2[0]=='-') flag=true,s2.erase(0,1);b=0; for(auto i:s2) b = b*10+i-'0'; sex[b]=flag;
}
void the3(int a, int b){//计算亲密度for(int k=0;k<m;k++){int flag=0, ct=0;//我们只算A,B的亲密度for(auto i:p[k]) if(i==a) {flag=1;ct++;} else if(i==b) {flag=2; ct++;}if(ct==2){  //我总是怀疑这里有点问题,但是ac了可能是数据的原因吧for(auto i:p[k]) if(sex[i]!=sex[a]) qa[i]+=1.0/p[k].size();for(auto i:p[k]) if(sex[i]!=sex[b]) qb[i]+=1.0/p[k].size();}else if(flag==1) {for(auto i:p[k]) if(sex[i]!=sex[a]) qa[i]+=1.0/p[k].size();}else if(flag==2) {for(auto i:p[k]) if(sex[i]!=sex[b]) qb[i]+=1.0/p[k].size();}}
}
void Print(int a, int b){ //做一个打印函数,节省代码量,易于维护if(sex[a]) cout<<"-";cout<<a<<" ";if(sex[b]) cout<<"-";cout<<b<<endl;
}
int main(){cin>>n>>m;getchar();for(int i=0;i<m;i++) the1(i); //处理每一张照片int a,b;the2(a, b); //处理A,Bthe3(a,b); //计算亲密度double ma=-1,mb=-1;for(int i=0;i<n;i++){if(sex[i]!=sex[a]) ma = max(ma,qa[i]);if(sex[i]!=sex[b]) mb = max(mb,qb[i]);} //找最大亲密度if(ma==mb&&ma==qb[a]&&mb==qa[b]) {Print(a, b); return 0;} //如果是彼此那么直接打印,并return,如果不是的话就都打印for(int i=0;i<n;i++) if(ma==qa[i]&&sex[i]!=sex[a]) Print(a, i);for(int i=0;i<n;i++) if(mb==qb[i]&&sex[i]!=sex[b]) Print(b, i);return 0;
}

结束!over,

团体程序设计天梯赛-练习集 L2-028 秀恩爱分得快 (25 分) (详细解法)相关推荐

  1. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

  2. 团体程序设计天梯赛 -- 练习集 (L2合集)

    文章目录 L2-001 紧急救援 (25 分) L2-002 链表去重 (25 分) L2-003 月饼 (25 分) L2-004 这是二叉搜索树吗? (25 分) L2-005 集合相似度 (25 ...

  3. 重返天梯-L2-028 秀恩爱分得快 (25 分)

    题目描述 古人云:秀恩爱,分得快. 互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度.如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K.任意两 ...

  4. 团体程序设计天梯赛-练习集 L2 阶段全部题解

    L2-001. 紧急救援 地址链接:https://blog.csdn.net/dengkuomin/article/details/64498691 L2-002. 链表去重 地址链接:https: ...

  5. 天梯赛 L2-028 秀恩爱分得快 (25 分)[测试点3 4 5][未填坑]

    L2-028 秀恩爱分得快 (25 分) 思路: 结构体储存个人最高亲密值(double)和对应异性的亲密值(vector< double > q[i]=k 表示与编号绝对值为i的异性的亲 ...

  6. 团体程序设计天梯赛练习集题解整合

    网上介绍 团体程序设计天梯赛练习集 的文章已经很多了, 我的这篇文章是对练习集题解的整合,方便每一位备战 团体程序设计天梯赛 的同学使用. 一年一度的 团体程序设计天梯赛 即将开始,PTA的练习集是必 ...

  7. 团体程序设计天梯赛-练习集 L1-033——L1-048

    团体程序设计天梯赛-练习集 /** @Description: 出生年* @version: * @Author: * @Date: 2021-03-25 08:13:57* @LastEditors ...

  8. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  9. PTA团体程序设计天梯赛-练习集(3)

    PTA团体程序设计天梯赛-练习集 L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句"Hello World!"就可以 ...

最新文章

  1. Java项目:实现权限管理系统(java+SpringBoot+MyBatis+AOP+LayUI+Mysql)
  2. 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)
  3. 小程序分享朋友圈之填坑模式
  4. AI For Everyone:Andrew Ng想用30分钟的非技术课程传达的内容
  5. Java EE MVC:处理表单验证
  6. HDU-5532Almost Sorted Array LIS问题
  7. 河北大学计算机专业排名第几,河北国家一流专业排名,河北大学和燕山大学各13个,华北电力7个...
  8. pip换源及指令的使用
  9. python中sort与sorted的区别_python排序函数sort()与sorted()的区别
  10. APICloud可视化编程
  11. Office WPS如何在页眉页脚添加一条横线
  12. 正在崛起的高薪岗位—嵌入式开发工程师
  13. MongoDB入门+深入(二)--项目实战
  14. 桌面图标背景色解决方案
  15. 【雪碧图】url放置图片路径
  16. 《Intriguing Properties of Contrastive Losses》阅读笔记
  17. hbuild无法与这台计算机上的,HBuilderX无法连接网络
  18. Data + AI Summit 2022 超清视频下载
  19. pandas函数melt的应用
  20. html网页全选效果,为什么我用js写的全选/反选/全不选页面,没有效果?

热门文章

  1. 奇葩公司规定之搞笑版(改编自真实规定)
  2. android系统文件误删,Android系统建个回收站帮你找回误删文件
  3. 最精炼的Excel金额大写公式
  4. 医药领域知识图谱快速及医药问答项目--项目探究
  5. 英特尔前高管的IC职业生涯分享(文字版)写给想进入IC设计的同学们!
  6. 计算机控制的缺点,计算机控制简答题.pdf
  7. 鳄鱼!自然界最完美的伏击捕食
  8. 解决安卓android加载https页面不能正常显示问题
  9. 雷军留名:不是因程序员成名
  10. Google PageRank 的过去、现在和未来