第27次CSP第三题 防疫大数据
  • 板块题目总版
  • 楼主Etsuya233
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/12 18:24
  • 上次更新2024/9/12 21:41:41
查看原帖
第27次CSP第三题 防疫大数据
839170
Etsuya233楼主2024/9/12 18:24

只过了40%的点。实在看不出来哪里不对QAQ。请dalao们看看。
题目链接:指向CSDN的链接官方链接,可能要账号

#include <iostream>
#include <map>
#include <utility>
using namespace std;

typedef pair<int, int> pii;

int n;
map<int, pii> city; //某个地区持续的风险期 {from, end}
map<pii, int> user; //某个用户去某个城市的开始日期 {user, city} start date
int offset = 100010;

int main(){
	cin >> n;
	for(int i = offset; i < n + offset; i++){
		int cc, uc;
		cin >> cc >> uc;
		for(int j = 0; j < cc; j++){
			int cn;
			cin >> cn;
			pii d = city[cn];
			if(i - d.first > 7) city[cn] = {i, i + 7 - 1}; 
			else city[cn] = {d.first, i + 7 - 1}; //consecutive days
		}
		for(int j = 0; j < uc; j++){
			int d, u, r;
			cin >> d >> u >> r;
			d += offset;
			pii& c = city[r];
			if(d >= c.first && i <= c.second){
				user[{u, r}] = max(user[{u, r}], d);
			}
		}
		cout << i - offset << " ";
		int last = -500;
		for(auto it = user.begin(); it != user.end(); ){
			auto& e = *it;
			int u = e.first.first, r = e.first.second, d = e.second;
			pii& c = city[r];
			if(i - d + 1 <= 7 && d >= c.first && i <= c.second){
				if(last != u) cout << u << " ";
				last = u;
				it++;
			} else it = user.erase(it);
		}
		cout << "\n";
	}
	return 0;
}
2024/9/12 18:24
加载中...