L2-028 秀恩爱分得快
题目
链接:L2-028
解析
分别求出a,b与编号为i(i>0)的人的亲密度va[i],vb[i],还有va,vb的最大值MAXA,MAXB然后进行判断
- 如果MAXA对应的人是b而且MAXB对应的人是a,那么输出a,b即可
- 否则,分别按要求输出MAXA对应的人的编号,MAXB对应的人的编号
对于va,vb我们可以用个double数组存储,因为编号有正有负,所以得进行绝对值处理,所以得有另外一个数组g进行标记性别,同时需要注意到0这个点,因为会有+0,-0出现,所以得以字符串的形式输入
存储输入的数据,因为每行的个数都不一样,所以可以开辟一个较大的二维数组,或者用vector,这里选用vector
参考:https://blog.csdn.net/qq1013459920/article/details/86772096
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include <bits/stdc++.h> using namespace std;
double va[1100] = {0.0}, vb[1100] = {0.0};
bool g[1100] = {false};
int read() { int input = 0, sign = 0; char a = getchar(); while ((a<'0' || a>'9') && a != '-') a = getchar(); if (a == '-') { sign = 1; a = getchar(); } while (a >= '0' && a <= '9') { input = input * 10 + a - '0'; a = getchar(); } g[input] = sign; return input; }
int main() { int n, m, input1; char input2[10]; scanf("%d%d", &n, &m); vector< vector<int> >photos(n); for(int i = 0; i < m; i++) { scanf("%d", &input1); photos[i].resize(input1); for(int j = 0; j < input1; j++) { photos[i][j] = read(); } } int a = read(); int b = read(); double MAXA = 0.0, MAXB = 0.0; for(int i = 0; i < m; i++) { bool findA = find(photos[i].begin(), photos[i].end(), a) != photos[i].end(); bool findB = find(photos[i].begin(), photos[i].end(), b) != photos[i].end(); if(findA || findB) { for(int j = 0; j < photos[i].size(); j++) { if(findA && g[a] != g[photos[i][j]]) { va[photos[i][j]] += (double)1.0/photos[i].size(); if(va[photos[i][j]] > MAXA) MAXA = va[photos[i][j]]; } else if(findB && g[b] != g[photos[i][j]]) { vb[photos[i][j]] += (double)1.0/photos[i].size(); if(vb[photos[i][j]] > MAXB) MAXB = vb[photos[i][j]]; } } } }
if(MAXA == va[b] && MAXB == vb[a]) printf("%s%d %s%d\n", g[a] ? "-" : "", a, g[b] ? "-" : "", b); else { for(int i = 0; i < n; i++) { if(va[i] == MAXA) printf("%s%d %s%d\n", g[a] ? "-" : "", a, g[i] ? "-" : "", i); } for(int i = 0; i < n; i++) { if(vb[i] == MAXB) printf("%s%d %s%d\n", g[b] ? "-" : "", b, g[i] ? "-" : "", i); } } return 0; }
|