题意:共有N盏灯,标号为1到N,有M个标有不同质数的开关,开关可以控制所有标号为其标号倍数的灯,按一次开关,所有其控制的灭着的灯都点亮,所有其控制的亮着的灯将熄灭。现在,宿管可以无限的按所有开关,所有灯初始状态为熄灭,请求出最多能点亮几盏灯。

对于100%的数据,T<=10,N<=1000。 所有标号不相等,M≤N以内的质数总个数。

思路:分块,将<=sqrt(n)的质数分成一份共有N1个,另一份共有N2个。

对于第一部分因为n<=1000则N1<=11,可以用暴力枚举+标记存储亮灭情况

对于第二部分因为b[i]>sqrt(n)则第二部分开关之间互不影响,只与第一部分有关,具有贪心性质

 var a,b,c:array[..]of longint;
n,m,cas,v,i,x,ans,n1,n2:longint; procedure dfs(k:longint);
var t,tmp,i,j:longint;
begin
if k=n1+ then
begin
t:=;
for i:= to n do t:=t+c[i];
for i:= to n2 do
begin
tmp:=;
for j:= to n div b[i] do
if c[b[i]*j]= then dec(tmp)
else inc(tmp);
if tmp> then
begin
t:=t+tmp;
for j:= to n div b[i] do c[b[i]*j]:=-c[b[i]*j];
end;
end;
if t>ans then ans:=t;
exit;
end;
dfs(k+);
for i:= to n div a[k] do c[i*a[k]]:=-c[i*a[k]];
dfs(k+);
for i:= to n div a[k] do c[i*a[k]]:=-c[i*a[k]];
end; begin
assign(input,'prime.in'); reset(input);
assign(output,'prime.out'); rewrite(output);
readln(cas);
for v:= to cas do
begin
readln(n,m);
n1:=; n2:=;
for i:= to m do
begin
read(x);
if x<=trunc(sqrt(n)) then begin inc(n1); a[n1]:=x; end
else begin inc(n2); b[n2]:=x; end;
end;
ans:=;
fillchar(c,sizeof(c),);
dfs();
writeln(ans);
end;
close(input);
close(output);
end.

【NOIP2016练习】T3 质数 (分块)的更多相关文章

  1. 【BZOJ3798】特殊的质数 分块打表

    [BZOJ3798]特殊的质数 Description 求[A,B]之间的质数个数,并且满足X=Q^2+P^2,P,Q是正整数. Input 第一行输入A,B Output 输出有多少组P,Q满足条件 ...

  2. NOIP2016 DAY2 T3 愤怒的小鸟

    传送门 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的 ...

  3. NOIP2016 DAY1 T3 换教室

    换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内 ...

  4. BZOJ 2002 弹飞绵羊(分块)

    题目:弹飞绵羊 这道题,据说是lct裸题,但是lct那么高级的数据结构,我并不会,所以采取了学长讲过的分块做法,我们对序列分块,可以定义两个数组,其中一个表示从当前位置跳出当前块需要多少步,另一个数组 ...

  5. [NOIP2016][luogu]换教室[DP]

    [NOIP2016] Day1 T3 换教室 ——!x^n+y^n=z^n 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程 ...

  6. NOI前的考试日志

    4.14 网络流专项测试 先看T1,不会,看T2,仙人掌???wtf??弃疗.看T3,貌似最可做了,然后开始刚,刚了30min无果,打了50分暴力,然后接着去看T1,把序列差分了一下,推了会式子,发现 ...

  7. NOIp2018 复习笔记

    其实也没什么用啦,只是来占个坑 OI知识 3367 [模板]并查集 就这么做啊 没什么其他的 就是可以做tarjan LCA和Kruskal的操作 //关键函数 int getfa(int t) { ...

  8. 【NOIP2016练习】T3 subset (分块,状压DP)

    3 subset 3.1 题目  述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 add s 在集合中加入数字 s. del s 在集合中删除数字 s.保证 s 存在 cnt s 查 ...

  9. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

随机推荐

  1. Python读写文件实际操作的五大步骤

    Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Pytho ...

  2. 课下作业04-2String的使用方法

    1.动手动脑之String.equals()方法public class StringEquals { public static void main(String[] args) { String ...

  3. C++ 学习笔记(一) cout 与printf 的不同之处

    作为一个嵌入式开发的猿,使用打印调试程序是必不可少的,拿到新的项目第一件事就是捣鼓打印.这次也不例外有打印才有耍下去的底气.在之前零零碎碎的C++学习中,还是一边学一边做项目的状态下能用printf解 ...

  4. Bootstrap 模态框 禁止点击空白关闭模态框事件

    在模态框的div中加上 aria-hidden="true" data-backdrop="static" <div class="modal ...

  5. STM32——PWM基本知识及配置过程

    将通用定时器分为四个部分: 1,选择时钟 2,时基电路 3,输入捕获 4,输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有 ...

  6. light oj 1104 Birthday Paradox (概率题)

    Sometimes some mathematical results are hard to believe. One of the common problems is the birthday ...

  7. cf 1016C

    C. Vasya And The Mushrooms time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  8. CSS效果常见问题

    详细解答参见上篇博客 问题1.如何用 div 画一个 xxx box-shadow 无限投影 (堆叠成复杂图案) ::before ::after 问题2.如何产生不占空间的边框 1.box-shad ...

  9. loj2254 「SNOI2017」一个简单的询问

    ref #include <algorithm> #include <iostream> #include <cstdio> #include <cmath& ...

  10. 记一次WMS的系统改造(2)-敲定方案

    既定改造方案 基于上一篇分析出的种种问题,我们将库房人员的系统操作划分为两大类. 第一类为货物驱动的操作,这类操作主要随着货物而前进,人员不看或者看软件的次数比较少,更多是对货物的状态进行系统上的确认 ...