首页 > 其他分享 >CSP第27次认证 T3:防疫大数据

CSP第27次认证 T3:防疫大数据

时间:2022-10-09 22:44:28浏览次数:41  
标签:27 end 疫情 int T3 read pair CSP getchar

题目

直接暴力模拟。首先对于每一个地区,选择用 map 进行离散化,并直接存储其对应区间信息,使用 pair 即可。
在新输入一个疫情地区时,检查是否与原天数相连即可(同时注意判断 begin 和 end 是否相等,因为一个地区,要不然就是非疫情区域(相等),要不然就是至少 \(7\) 天的长度)。

之后,对于每天的列表,直接暴力查找前 \(7\) 天(是 \(now - 6\), 题目说的不是非常清楚)的所有人,判断那个人当天是否与现在处在同一个疫情区间,同时注意判断时效性(必须是 \(7\) 天以内的到访记录)。

最后考虑消息可能重复,而且输出时要排序,此处使用 set 即可满足要求。

#include <bits/stdc++.h>
using namespace std;
#define N 1001
#define ll long long

template <class T>
inline void read(T& a){
	T x = 0, s = 1;
	char c = getchar();
	while(!isdigit(c)){ if(c == '-') s = -1; c = getchar(); }
	while(isdigit(c)){ x = x * 10 + (c ^ '0'); c = getchar(); }
	a = x * s;
	return ;
}

map <ll, pair<int, int> > G; 
int n; 

int r[N], m[N], p[N][N]; 
int d[N][N], u[N][N], reg[N][N]; 
bool vis[N]; 
set <int> s; 

int main(){
  // freopen("hh.txt", "r", stdin); 
  read(n); 
  for(int i = 0; i < n; i++){  // i: 当前日期
    read(r[i]), read(m[i]);
    s.clear(); 
    for(int j = 1;j <= r[i]; j++){
      read(p[i][j]);
      int end = i + 6; 
      int pre1 = G[p[i][j]].first; 
      int pre2 = G[p[i][j]].second;
      if(pre1 == pre2) G[p[i][j]] = make_pair(i, end); 
      else if(pre2 >= i - 1) G[p[i][j]] = make_pair(pre1, end); 
      else G[p[i][j]] = make_pair(i, end); 
    }
    for(int j = 1; j <= m[i]; j++){
      read(d[i][j]), read(u[i][j]), read(reg[i][j]);  // u 用户
    }
    for(int day = max(i - 6, 0); day <= i; day++){
      for(int j = 1; j <= m[day]; j++){
        if(d[day][j] <= i - 7) continue ; 
        int pre = G[reg[day][j]].first;
        int end = G[reg[day][j]].second; 
        if(i >= pre && i <= end && d[day][j] >= pre && d[day][j] <= end && end != pre) s.insert(u[day][j]); 
      }
    }
    printf("%d ", i); 
    for(set<int>::iterator it = s.begin(); it != s.end(); it++){
      printf("%d ", *it); 
    }
    cout << endl; 
  }
  return 0;
}


标签:27,end,疫情,int,T3,read,pair,CSP,getchar
From: https://www.cnblogs.com/wondering-world/p/16773989.html

相关文章

  • 学习笔记274—VC6.0下载和安装图文教程
    MicrosoftVisualC++,(简称VisualC++、MSVC、VC++或VC)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动......
  • ABC 272 E Add and Mex(调和级数 暴力)
    EAddandMex(调和级数暴力)题意:​ 给出一个长度为n\(\le1e5\)的数组a,每秒对数组中的数加上其下标,例如\(a_i\)在第一秒为\(a_i+i\),第二秒为\(a_i+2i\)。请输出前m\(\le......
  • ABC272 做题笔记
    打得比较漂亮的一场,光速过ABCDE,但是FGH都太过神仙,EX干脆赛时只有两人AC/kkAProblemlink->https://atcoder.jp/contests/abc272/tasks/abc272_a。Solution按题意......
  • AtCoder Beginner Contest 272(A~E)
    Avoidsolve(intCase){intn;cin>>n;vector<int>a(n);for(auto&i:a)cin>>i;cout<<accumulate(all(a),0)<<nline;}Bconst......
  • AtCoder Beginner Contest 272 D Root M Leaper
    RootMLeaper\(bfs\)模拟先把能走的矩阵预处理出来,然后直接跑\(bfs\)要注意各种边界#include<iostream>#include<cstdio>#include<array>#include<queue>us......
  • abc272_f Two Strings (后缀数组)
    https://atcoder.jp/contests/abc272/tasks/abc272_f将SS#TT在字符串中排序,看标号为1-n后面有多少2n+2-3n+1的标号然后就会注意题目要的是小于等于,那么要拼成SS......
  • Leetcode 927 -- 思维
    题目描述三等分思路题目要求我们将源数组划分为三个连续的序列,即\([0,i],[i+1,j-1],[j,n-1]\),使得这三个序列的二进制所表示的数相等。首先,我们需要挖掘出一个性......
  • 2022-CodeStar十一综合评估CSP-S模拟
    T3:小猴摘桃给定一颗树,求树上经过偶数个节点的路径数量。限制:\(n\leqslant10^5\)参考难度:普及+/提高算法分析\(30\)分枚举起点\(S\),枚举终点\(T\),使用DFS......
  • ABC 271 F - XOR on Grid Path(搜索 meet in the mid)
    ABC271F-XORonGridPath题意:​ 给出20*20的地图,每个点上都有一个点权,保证为正整数。请问从(1,1)走到(n,n)且路径上所有点权异或和为0的路径有多少条。思路:​......
  • 力扣1627——带阈值的图连通性
    1627.带阈值的图连通性难度困难有 n 座城市,编号从 1 到 n 。编号为 x 和 y 的两座城市直接连通的前提是: x 和 y 的公因数中,至少有一个 严格大于 ......