题面

题目描述

在2312年,宇宙中发现了n台巨型对撞机,这些对撞机分别用1-n的自然数标识。科学家们不知道启动这些对撞机会发生什么危险事故,所以这些机器,刚开始都是出于关闭的状态。

随着科学家们的研究发现,第i台对撞机启动是安全的,如果其他已经启动的对撞机的标识数都跟着台对撞机标识数互质。(例如假设前面启动的是j,如果i能启动,那么i,j互质,也就是i,j的最大公约数为1)。如果两台对撞机不互为质数就启动,那么就会发生爆炸事故。

基于前面的研究,科学家们准备做各种启动和关闭对撞机的实验。为了确保科学家们的生命安全,你要设计一个远程遥控的软件。

刚开始,所有的额对撞机都是关闭状态。你的程序将会收到许多询问,格式为“启动、关闭第i台对撞机”。这个程序应该能处理这些询问(根据收到询问的先后顺序处理)。程序按照如下的格式输出处理结果。

如果询问时“+i”(表示第i台对撞机启动),这程序应该按照下面三种的情况之一输出结果。

(1)“Success”,表示启动第i台是安全的。

(2)“Already on”,表示第i台在询问之前就已经启动了。

(3)“Conflict with j”,如果第i台隔年面启动了的第j台冲突,就不能启动第i;如果前面有多台跟i冲突,那么只输出其中任何一台即可。

如果寻味是“-i”(表示关闭第i台对撞机),这程序应该按照下面两种情况之一输出结果。

(1)“Success”,表示关闭第i台对撞机

(2)“Already off”,表示第i台对撞机在询问之前就已经关闭了。

输入格式

第一行输入两个空格隔开的整数n和m(1<=n,m<=10^5),分别表示对撞机的数量和询问数。

接下来m行,表示询问,每行要么为“+ i”,要么为“- i”(不含引号)(1<=i<=n)。

输出格式

输出m行,输出结果按照上面题目给定格式输出。

输入输出样例

输入 #1

10 10

  • 6
  • 10
  • 5
  • 10
  • 5
  • 6
  • 10
  • 3
  • 6
  • 3

    输出 #1

    Success

    Conflict with 6

    Success

    Already off

    Success

    Success

    Success

    Success

    Conflict with 3

    Already on

分析

这是我的csp2019考砸后的第一题, 认识到自己以前的不足之后,决定,以后博文里都写题面,不再写题意

我们都需要一个好好思考的过程!

进入正题:

这是一道很好的理解分解质因数的题目, 其实思路挺好想的, 就是有些细节要注意

细节, 易错点收录在首页轮播第四个“精选傻X错误”中, 这里先贴上代码(很丑, 勿喷

#include<cstdio>
#include<iostream>
using namespace std;
const int N = 100000+99;
inline int read() {
char ch = getchar(); int x = 0;
while(ch<'0' || ch>'9') {ch = getchar();}
while(ch>='0' && ch<='9') {x = (x<<1)+(x<<3)+(ch^48); ch = getchar();}
return x;
} int n, m;
int not_prime[N];
int prime[N], tot, mn_prime[N];
void L_S() {
mn_prime[1] = 1;
for(int i = 2; i <= n; i++) {
if(not_prime[i] == 0) {
mn_prime[i] = i;
prime[++tot] = i;
}
for(int j = 1; j <= tot && i*prime[j] <= n; j++) {
not_prime[i*prime[j]] = 1;
mn_prime[i*prime[j]] = prime[j];
if(i%prime[j] == 0) break;
}
}
} char cmd;
int id, tmp, is, mnprime;
int a[N];//记录每个数是隶属于哪个数(为0表示没有选
int main() {
n = read(), m = read();
L_S();
// for(int i = 1; i <= n; i++) printf("%d ", mn_prime[i]);
for(int i = 1; i <= m; i++) {
cin>>cmd; id = read();
if(id == 1) {
if(cmd == '+') {
if(a[1] == 1) printf("Already on\n");
else printf("Success\n");
a[1] = 1;
}else {
if(a[1] == 0) printf("Already off\n");
else printf("Success\n");
a[1] = 0;
}
continue;
}
if(cmd == '+') {
if(a[id] != id) {
tmp = id;
is = 1;
while(tmp > 1) {//判断它的质因数是否已经被选
if(a[mn_prime[tmp]]) {
is = 0;
printf("Conflict with %d\n", a[mn_prime[tmp]]);
break;
}
mnprime = mn_prime[tmp];
while(tmp && tmp%mnprime == 0) tmp /= mnprime;//.........
}
if(is) {
tmp = id;
while(tmp > 1) {//用相同的方法把质因数都打上标记
a[tmp] = id;
// printf("a[%d] = %d\n", tmp, id);
mnprime = mn_prime[tmp];
while(tmp && tmp%mnprime == 0) tmp /= mnprime;
a[mnprime] = id;//别忘了去掉的质数要在这里处理,下面也是
}
printf("Success\n");
}
}else printf("Already on\n");
}else {
if(a[id] != id) printf("Already off\n");
else {
while(id > 1) {
a[id] = 0;
mnprime = mn_prime[id];
while(id && id%mnprime == 0) id /= mnprime;
a[mnprime] = 0;
}
printf("Success\n");
}
}
}
}

luoguP1871 对撞机【赛后第一题的更多相关文章

  1. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  2. [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

    上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...

  3. 《学习OpenCV》练习题第五章第一题ab

    这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...

  4. 《学习OpenCV》练习题第四章第一题b&c

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  5. 《学习OpenCV》练习题第四章第一题a

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  6. Google Code Jam 第一题

    通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...

  7. 图论测试题(一)第一题:longest

    第一题:longest 乌托邦有n个城市,某些城市之间有公路连接.任意两个城市都可以通过公路直接或者间接到达,并且任意两个城市之间有且仅有一条路径(What does this imply? A tr ...

  8. ZOJ 2334(Monkey King-左偏树第一题)

    Monkey King Time Limit: 10 Seconds      Memory Limit: 32768 KB Once in a forest, there lived N aggre ...

  9. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

随机推荐

  1. HTML 02

    form表单 能够获取用户输入(包括输入, 选择和上传文件) 将用户的输入内容全部发送给后端 参数 action 向何处提交 不写, 默认朝当前页面所在地址提交数据 全写路径 (https://www ...

  2. 【JS】308- 深入理解ESLint

    点击上方"前端自习课"关注,学习起来~ 本文来自于"自然醒"投稿至[前端早读课]. 小沈是一个刚刚开始工作的前端实习生,第一次进行团队开发,难免有些紧张.在导师 ...

  3. Oracle 12C CDB、PDB常用管理命令

    Oracle 12C CDB.PDB常用管理命令 --查看PDB信息(在CDB模式下) show pdbs  --查看所有pdbselect name,open_mode from v$pdbs;  ...

  4. B树?这篇文章彻底看懂了!

    前言 索引,相信大多数人已经相当熟悉了,很多人都知道 MySQL 的索引主要以 B+ 树为主,但是要问到为什么用 B+ 树,恐怕很少有人能把前因后果讲述完整.本文就来从头到尾介绍下数据库的索引. 索引 ...

  5. java面试题干货96-125

    这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行 ...

  6. 聊一聊 webpack 中的 preloading 和 Prefetching

    聊一聊 webpack 中的 preloading 和 Prefetching 提到 Preloading 和 Prefetching 就不得不先说一下代码分割,通过下面的例子我们来说明为什么需要代码 ...

  7. let和const总结(ES6)

    文章目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块 ...

  8. WPF引用WinForm控件

    前言:在WPF开发当中由于DataGrid控件实现业务未达到非常理想的效果,我决定使用WinForm中的DataGridView来实现业务. 在XAML中加入以下命名空间: xmlns:wf=&quo ...

  9. php yii 查看帮助时会调用具体脚本类的析构函数

    现象 执行 php yii 查看脚本有什么命令的时候,发现会调用我一个类中的析构函数的命令.并且不是一次调用,是3次,截图中有两次,还有一次输出完析构函数所在的类中的命令之后. 分析原因 在析构函数中 ...

  10. javascript for循环+异步请求导致请求顺序不一致

    工作中遇到一个问题 for循环,再把循环出来的ID再进行二次请求 这就导致一个问题 请求结果返回顺序不一致 原因:异步请求会把回调事件放入微任务事件队列,宏任务执行完毕再执行微任务,具体参考事件队列机 ...