首页 > 其他分享 >L2-028 秀恩爱分得快

L2-028 秀恩爱分得快

时间:2024-03-19 18:23:00浏览次数:21  
标签:string record 恩爱 ++ sex int L2 maxa 028

测试点会出现-0这种,直接导致无法使用int类型接收编号,因为无从判断性别,因此只能用string类型。
并且需要使用sex来记录当前是男性还是女性,只有对方是异性的时候,亲密度才有意义。

#include <bits/stdc++.h>
using namespace std;
int p[1010][510], k[1010], sex[1010];
double record[2][1010];//ab和其他人之间的亲密度
void print(int a,int b) {
	if (sex[a] < 0) printf("-");
	printf("%d ", a);
	if (sex[b] < 0) printf("-");
	printf("%d\n", b);
}
int getno(string str) {
	int i = 0, g = 1;
	if (str[0] == '-') {
		g = -1;
		i++;
	}
	int bianhao = stoi(str.substr(i));
	sex[bianhao] = g;//如果前面是负号 就认为是女孩 反之认为是男孩
	return bianhao;
}
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < m; i++) {//将其存储起来
		cin>>k[i];
		for (int j = 0; j < k[i]; j++) {
			string t;
			cin >> t;
			int tno = getno(t);
			p[i][j] = tno;
		}
	}
	string s1, s2;
	cin >> s1 >> s2;
	int a = getno(s1);
	int b = getno(s2);
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < k[i]; j++) {//遍历
			double ks = (double)1/ k[i];
			if (p[i][j] != a && p[i][j] != b) continue;
			for (int l = 0; l < k[i]; l++) {//这一行当中有a和b
				if (p[i][j] == a && sex[a] * sex[p[i][l]]<0) {//必须是异性
					record[0][p[i][l]]+=ks;
				}
				if (p[i][j] == b && sex[b] * sex[p[i][l]] < 0) {
					record[1][p[i][l]]+=ks;
				}
			}
		}
	}
    //检查亲密度
	double maxa = 0, maxb = 0;
	int ant = 0, ant2 = 0;
	int ans[1010], ans2[1010];
	memset(ans, 0, sizeof(ans));
	memset(ans2, 0, sizeof(ans2));
	for (int i = 0; i < n; i++) {
		if (record[0][i] > maxa) {
			maxa = record[0][i];
			ans[ant = 0] = i;
		}
		else if (record[0][i] == maxa) {
			ans[++ant] = i;
		}
		if (record[1][i] > maxb) {
			maxb = record[1][i];
			ans2[ant2 = 0] = i;
		}
		else if (record[1][i] == maxb) {
			ans2[++ant2] = i;
		}
	}
	if (maxa == record[0][b] && maxa == maxb) {
		print(a, b);
		return 0;
	}
	for (int i = 0; i <= ant; i++) {
		print(a, ans[i]);
	}
	for (int i = 0; i <= ant2; i++) {
		print(b, ans2[i]);
	}
	return 0;
}

博客参考: https://www.cnblogs.com/8023spz/p/9534865.html

标签:string,record,恩爱,++,sex,int,L2,maxa,028
From: https://www.cnblogs.com/chengyiyuki/p/18083665

相关文章

  • L2-026 小字辈
    第一眼想到的是BFS,然后就用BFS,个人感觉还是有一丢丢麻烦。#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#definelllonglongvector<vector<int>>vec;intmain(){ intn; cin>>n; vec.resize(n+10); introot=0; for(in......
  • L2-025 分而治之
    如果一个城市未被炸毁,那如果他可达的其他城市也未被炸毁,说明方案不可行。#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#definelllonglongvector<vector<int>>vec;//邻接表intmain(){ intn,m; cin>>n>>m; vec.resize(n+10......
  • L2-024 部落
    注意merge的时候如果p1和p2相等及时返回否则死循环了,代码有问题而不是算法超时。#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintparent[10010],deep[10010];intgetf(intx){ inty=x; while(parent[y]!=-......
  • L2-023 图着色问题
    老太太钻被窝,给爷整笑了。测试点2:颜色只能是k种,大于小于都过不去。#include<bits/stdc++.h>usingnamespacestd;intedges[503][503];intcolor[503];intmain(){ intv,e,k; cin>>v>>e>>k; for(inti=0;i<e;i++){ inta,b; cin>>a......
  • L2-022 重排链表
    这道题真的烦,输出想半天。反正就是要区分奇偶,才能知道那个结点最后要打印出-1.我看网上遇到的都是测试点3的问题,不过我有问题的是测试点1,前三个出问题就是节点数奇偶的问题。#include<bits/stdc++.h>usingnamespacestd;map<int,pair<int,int>>mp;intmain(){ ints......
  • WSL2 配置 tensorflow 环境
    Windows系统中更新NVIDA驱动这里可以直接通过GeforceExperience直接更新更新完成后可以在命令行/wsl中输入nvidia-smi可以看到输出这里的CUDAVersion指的是该驱动版本最高可支持的CUDA版本安装CUDA到NVIDIA官网下载符合条件的CUDA这里我一开始直接选择安装了最新版......
  • PTA L2-014 列车调度
    火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺......
  • PTA L2-013 红色警报
    战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出......
  • 牛客网Mysql相应试题 SQL28 计算用户8月每天的练题数量
    SQL28计算用户8月每天的练题数量描述题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。示例:question_practice_detailiddevice_idquestion_idresultdate12138111wrong2021-05-0323214112wrong2021-05-0933214113wrong2......
  • L2-014 列车调度
    法一:(23分)数组。有一个测试点会超时,每次第二层遍历是O(n)。#include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){ intn,t,count=0; cin>>n; for(inti=0;i<n;i++){ cin>>t; boolflag=false; for(inti=0;i<count;i++){ if(a[i]>t......