题面

看完题以后,想到的肯定是大模拟。但是如果裸的模拟是肯定会超时的。那我么就来想一下,裸的大模拟瓶颈在哪??

判断是否冲突。

由于判断是否冲突就是判断两数是否互质,所以我们可以自然地想到:将每个数分解因子(当然,分解质因子肯定更好,时间复杂度会更优),然后将这些因子存起来,每次新开启一个机器,就判断这个新机器的因子在已经存好的因子中是否出现过。当然,质数要特判一下

在代码实现上,肯定还会有其它的细节。具体见codecodecode:

#include<bits/stdc++.h>
using namespace std;const int maxn = 1e5 + 5;
int n, m;
string S[4] = {"Success", "Already on", "Already off", "Conflict with "};
bool f[maxn];//记录机器状态
set < int > s;//存所有出现过的因子
vector < int > son[maxn];//son[i]表示有哪些开启的机器包含因子istruct my_str {inline int read() {int x = 0, f = 1;char ch = getchar();while(!isdigit(ch)) {if(ch == '-') f = -1;ch = getchar();}while(isdigit(ch)) {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}return x * f;}inline int gcd(int x, int y) {if(x < y) swap(x, y);while(y) {int temp = x;x = y;y = temp % y;}return x;}void work() {n = read(), m = read();for(int i = 1; i <= m; i ++) {char op;scanf("\n%c", &op);if(op == '+') {int x = read();if(f[x]) {//已开启cout << S[1] << endl;continue;}bool flag = 0;set < int >::iterator it;int K = sqrt(x);for(int j = 2; j <= K; j ++) {//将新机器分解因子if(x % j == 0) {if(s.find(j) != s.end()) {//找到了cout << S[3];printf("%d\n", son[j][0]);//随意输出一个即可flag = 1;break;}if(x / j != j) {if(s.find(x / j) != s.end()) {cout << S[3];printf("%d\n", son[x / j][0]);flag = 1;break;}}}}if(flag) continue;if(s.find(x) != s.end()) {//特判素数cout << S[3];printf("%d\n", son[x][0]);continue;}f[x] = 1;cout << S[0] << endl;K = sqrt(x);flag = 0;for(int j = 2; j <= K; j ++) {//存入新机器的因子if(x % j == 0) {flag = 1;son[j].push_back(x);s.insert(j);if(x / j != j) {son[x / j].push_back(x);s.insert(x / j);}}}if(!flag) son[x].push_back(x), s.insert(x);//特判素数}else {int x = read();if(!f[x]) {//已关闭cout << S[2] << endl;continue;}f[x] = 0;cout << S[0] << endl;int K = sqrt(x);bool flag = 0;for(int j = 2; j <= K; j ++) {if(x % j == 0) {flag = 1;if(son[j].size() > 1) {vector < int >::iterator it = find(son[j].begin(), son[j].end(), x);//在vector中查找数字xit = son[j].erase(it);//删除函数基本用法,vector的erase函数是有返回值的,返回删除后的下一个迭代器}else son[j].clear(), s.erase(j);if(x / j != j && son[x / j].size() > 1) {vector < int >::iterator it = find(son[x / j].begin(), son[x / j].end(), x);it = son[x / j].erase(it);}else son[x / j].clear(), s.erase(x / j);}}if(!flag && son[x].size() > 1) {vector < int >::iterator it = find(son[x].begin(), son[x].end(), x);it = son[x].erase(it);}else son[x].clear(), s.erase(x);}}}}code;int main() {code.work();return 0;
}

好题分享:对撞机(luogu P1871)相关推荐

  1. 内蒙古大学计算机考研892,893计算机考研真题分享

    研究生,内蒙古大学892,893计算机考研真题分享 介于之前在网上没有找到相关的资料,特此分享自己手头的资料给大家,希望能对大家有所帮助! 我自己考的是学硕893,但是根据趋势来看892的性价比更高一 ...

  2. 提分必练,中创教育PMP全真模拟题分享来喽

    湖南中创教育每日五题分享来啦,"日日行,不怕千万里:常常做,不怕千万事.",每日五题我们练起来! 1.项目经理准备了会议议程,但没有一次会议按计划进行,会议总是以争论结束,并且没有 ...

  3. Apsara Clouder云计算专项技能认证:云服务器ECS入门[考试真题分享]

    Apsara Clouder云计算专项技能认证:云服务器ECS入门[认证考试真题分享](答案仅供参考) 单选13道题 1.下列哪一个不是重置ECS密码的步骤? A.查看实例详情 B.进入控制台 C.远 ...

  4. 考研英语真题-四六级真题-计算机二级真题分享

    考研英语真题-四六级真题-计算机二级真题分享 准备的资料 给准备复习朋友准备了一堆资料,收集整理自网络,欢迎转发分享给你需要的朋友. 这次准备的资料分别有: •考研英语一和考研英语二,2009年至20 ...

  5. 南京理工大学机械考研最新真题分享

    @南京理工机械考研TOC 南京理工大学机械考研最新真题分享 hi,这是我用百度网盘分享的文件~复制这段内容打开「百度网盘」APP即可获取. 链接:https://pan.baidu.com/s/1S9 ...

  6. 无脑题分享:1163 阿克曼(Ackmann)函数

    非常无脑但很对我有启发的一大题目,阿克曼中循环一个阿克曼,一开始我是真没想到,后来当我发现的时候,才知道这是个小学生都能算出的题... 分享思路: 1 创造函数 2 睡一觉: 3 创造.输入变量 4 ...

  7. 【2023年最新版考试真题分享】 Apsara Clouder云计算专项技能认证:云服务器ECS入门【已通过】

    [2023年最新版考试真题分享] Apsara Clouder云计算专项技能认证:云服务器ECS入门[已通过] 考试入口:https://edu.aliyun.com/certification/cl ...

  8. 武汉理工的计算机复试题难,武汉理工2018计算机复试真题分享

    武汉理工2018复试回忆,本人计算机专硕. 第一天上午资格审查,需要所带材料的复印件上交,排队交钱交表就行了. 下午面试,出复试名单的时候每人有个复试编号,按编号分四组,按照要求的时间去就行了,抽签选 ...

  9. 提分必练,中创教育PMP全真模拟题分享

    ​湖南中创教育每日五题分享来啦,"日日行,不怕千万里:常常做,不怕千万事.",每日五题我们练起来! 1.项目经理接手一个复杂的项目,该项目的需求不稳定且持续时间长.客户希望产品能更 ...

最新文章

  1. python js加密解密_AES用cryptojs加密,用python解密加密Ciph
  2. 有赞的交易系统架构困局以及破局之道
  3. 网络服务器安全协议,ipsec 网络安全协议
  4. Java 8:将匿名类转换为Lambda表达式
  5. R中与数据挖掘相关的package
  6. Python的元组()与字典 { }
  7. marathon 测试
  8. iOS中的Runloop
  9. 【小程序开发】—— 封装自定义弹窗组件
  10. 如何查看本地ip地址和外网地址
  11. 人工智能实验报告 牧师与野人渡河 知识表示方法
  12. 在前端实现excel导入,在线编辑,导出,打印等功能
  13. Unity初学者Shader Graph教程
  14. python九宫格拼图_Python制作九宫格图片
  15. matlab excel 单元居中,用matlab如何识别excel里的单元格是否为合并单元格|excel表格怎么调整行高和列宽...
  16. 修改审查元素怎么保存_[图解]微信公众号链接里的音频保存方法
  17. 大数据开发都需要掌握哪些编程语言
  18. 单引号和0的ASCII码
  19. 某app登录协议逆向分析
  20. android html5 加密,android studio MD5加密 示例代码

热门文章

  1. MTK hall霍尔传感器
  2. EasyNVR更新版本后如何同步RTSP通道?
  3. json 中关于json数组跟json对象的区别
  4. chinapay 对接后台快捷支付交易
  5. 《正面管教》思维导图图解,找对教育孩子好方法
  6. lm80认证_你们做过LM-80测试什么产品需要做LM-80测试
  7. Python之quote()使用
  8. 中级软考-软件设计师(四)
  9. 2022好看的校园表白墙程序源码Ver2.0
  10. [AV1] AV1 Specification