2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
H.Message Bomb
题目链接-H.Message Bomb
题目大意
输入sss行数据,
如果t=1t=1t=1,则表示第x个学生加入了第yyy个组。可以肯定的是,这个学生以前不在这个小组里。
如果t=2t=2t=2,则表示第x个学生退出了第yyy个组。可以肯定的是,这名学生目前就在这个组里。
如果t=3t=3t=3,则表示第xxx个学生在第yyy个组中发送了一条消息,可以肯定的是,那个学生现在就在小组里
消息将广播给当前在同一组中的所有其他成员,求最后每个人各自收到的消息总数
解题思路
差分思想差分思想差分思想
- 可以用
set
统计每个学生加入的组,数组bbb统计每个组一共中发消息的条数,数组aaa作为差分数组统计每个人各自收到的消息数 - 当进组时我们就用
s[x].insert(y)
统计,同时a[x]-=b[y]
,即先减去进组之前的消息数,退组时就用s[x].erase(y)
将该组删除,然后只需a[x]+=b[y]
,加上现在该组消息的总数,根据差分思想,即相当于加上从进组到退组这段时间xxx在yyy组收到的消息总数 - 当xxx在yyy组发邮件时,因为消息将广播给当前在同一组中的所有其他成员,所以只需
a[x]--,b[y]++
(a[x]--
是为了避免后续统计消息数时加上自己发的消息) - 最后重新按照第二条遍历一遍每人所加入的组,加上相应的邮件数输出即可
- 具体操作见代码
附上代码
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double e=exp(1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=2e5+10;
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ull;
inline void read(int &x){char t=getchar();while(!isdigit(t)) t=getchar();for(x=t^48,t=getchar();isdigit(t);t=getchar()) x=x*10+(t^48);
}
set<int> s[N];
int a[N],b[N];
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,m,s1;cin>>n>>m>>s1;while(s1--){int t,x,y;cin>>t>>x>>y;if(t==1){a[x]-=b[y];s[x].insert(y);}else if(t==2){a[x]+=b[y];s[x].erase(y);}else{b[y]++;a[x]--;}}set<int>::iterator it;for(int i=1;i<=m;i++){for(it=s[i].begin();it!=s[i].end();it++)a[i]+=b[*it];cout<<a[i]<<endl;}return 0;
}
2020 China Collegiate Programming Contest Weihai Site H.Message Bomb相关推荐
- 2020 China Collegiate Programming Contest Weihai Site补题部分
A. Golden Spirit 签到题,首先把所有老人带到对岸,然后在对休息讨论一下即可. #define IO ios::sync_with_stdio(false);cin.tie();cout ...
- 2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分
已经补AEFGK E. Exam Results 枚举+二分+动态开点权值线段树O(nlogN)O(nlogN)O(nlogN) 智商太低,想不到什么贪心只能暴力数据结构维护 对于所有学生的最高成绩只 ...
- 2020 China Collegiate Programming Contest, Weihai B Labyrinth
写在前面: 这题赛时就过了二十多个人感觉还是榜歪了,完全没有到金牌题的水平,算是一道纯思维题吧,只需要简单的bfs,而且赛中也有一些铜牌区的队伍能过,所以还是要敢于开题,说不定就能写呢 题目链接 La ...
- acm-(辗转相除法、丢番图方程)2020 China Collegiate Programming Contest Qinhuangdao Site I. Interstellar Hunter
传送门 本题其实就是给定若干个整数向量(x1,y1),(x2,y2),...,(xn,yn)(x_1,y_1),(x_2,y_2),...,(x_n,y_n)(x1,y1),(x2,y2),. ...
- 2020 China Collegiate Programming Contest Changchun F - Strange Memory(dsu on tree + 位运算小技巧)
题目连接: https://codeforces.com/gym/102832/problem/F 首先写这个题的时候要注意内存的问题 不要瞎几把define int long long 题解: 考虑 ...
- 2018 China Collegiate Programming Contest - Jilin Site F - The Hermit HDU - 6560 思维
链接Problem - 6560 题意 有n个站点每个站点可以发送完美信号 关于完美信号的定义 有i j k三个站点 分别保证 i<j<k dis(i,j)> dis(j,k) 并且 ...
- acm -(并查集、启发式合并、gcd、枚举因子)2020 China Collegiate Programming Contest Changchun Onsite K. Ragdoll
传送门 本题考虑直接对每个iii求出所有满足ij=gcd(i,j)i^j=gcd(i,j)ij=gcd(i,j)的jjj,然后存在ggg数组中,对于查询修改操作维护一个并查集即可,合并的时候采用启发式 ...
- 2016 China Collegiate Programming Contest Final
2016 China Collegiate Programming Contest Final Table of Contents 2016 China Collegiate Programming ...
- 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program
2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program 题目链接 The kingdom of Z ...
最新文章
- 国产的markdown 语法的思维导图和大纲工具!
- Ubuntu 下配置 SSH服务全过程及问题解决
- 主梁弹性模量计算_收藏 | 钢结构计算公式
- mysql proxy 读写分离 1
- Tomcat 教程之快速入门
- Spring事务管理-传播行为-隔离级别
- ios业务模块间互相跳转的解耦方案
- POJ - 2828 Buy Tickets(线段树+思维/Splay+模拟)
- SAP Fiori Elements drop down list debug
- 小白学深度之LSTM长短期记忆神经网络——深度AI科普团队
- Pandas dtypes(数据类型)
- 【定量分析、量化金融与统计学】分类变量与多元非线性关系与子集的选择
- 安徽农业大学计算机考研分数线,安徽农业大学2019年考研复试分数线已公布
- HUNNU 11786 Sir Charles Antony Richard Hoare
- 桥接模式和装饰器模式
- android nfc扇区加密,android NFC MifareClassic 读IC卡加密扇区方法
- 【深度域适配】一、DANN与梯度反转层(GRL)详解
- dw版权信息栏如何制作_dw网页制作过程?用dw怎么制作网页?
- h3c交换机模拟器怎么用_由浅入深学习网络设备模拟器HCL 第二篇 交换机的基本配置...
- Office计算机心得,2020计算机实训心得体会-范例