• 考虑对电灯进行差分:若第i个电灯和第i + 1个电灯状态不同,则在第i个位置上放一个球
    这样我们就放置了不超过2n个球,且必然是偶数个
    于是问题转化为:有m个球,每一步可以把一个球平移奇质数个位置,两个球位于相同位置则同时被消除,计算至
    少多少步能消除所有球
  • 然后我们发现, 假如两个东西距离为奇质数cost为1, 偶数cost为二(哥德巴赫猜想), 其余奇数的话cost为3
  • 然后发现一种贪心方法, 是尽量匹配cost为1的, 然后分奇偶性各自用2覆盖,看看最后剩下的那个直接判断即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define ll long long
#define mmp make_pair
#define M
using namespace std;
int read() {int nm = 0, f = 1;char c = getchar();for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';return nm * f;
}
struct Edge{int v, c, nxt;
}e[200010];
int head[10010], tot = 1;
void build(int u, int v, int c)
{e[++tot] = (Edge){v, c, head[u]}; head[u] = tot; return ;
}
void insert(int u, int v, int c)
{build(u, v, c); build(v, u, 0); return ;
}
int dep[10010];
int S, T;
queue<int> q;
bool bfs()
{memset(dep, 0, sizeof(dep)); dep[S] = 1; q.push(S); while(!q.empty()){int u = q.front(); q.pop(); for(int i = head[u]; i; i = e[i].nxt)if(!dep[e[i].v]&&e[i].c){dep[e[i].v] = dep[u] + 1; q.push(e[i].v); }}if(dep[T])return true; return false;
}
int cur[10010];
int dfs(int u, int flow)
{if(u == T)return flow; for(int &i = cur[u]; i; i = e[i].nxt)if(e[i].c&&dep[e[i].v] == dep[u] + 1){int d = dfs(e[i].v, min(e[i].c, flow)); if(d){e[i].c -= d; e[i^1].c += d; return d; }}return 0;
}
int dinic()
{int ans = 0; while(bfs()){for(int i = S; i <= T; i++)cur[i] = head[i]; int d; while(d = dfs(S, 1e9))ans += d; }return ans;
}
int prime[1000010], cnt;
bool vis[10000010];
int x[1010];
int posx[1010], posy[1010];
int cnt1, cnt2;
void push(int x)
{if(x&1)posx[++cnt1] = x; else posy[++cnt2] = x;
}
int main(){int N = 10000000; vis[1] = true; for(int i = 2; i <= N; i++){if(!vis[i])prime[++cnt] = i; for(int j = 1; j <= cnt&&i * prime[j] <= N; j++){vis[i * prime[j]] = true; if(i%prime[j] == 0)break; }}vis[2] = true; int t = read();while(t--){memset(head, 0, sizeof(head)); cnt1 = cnt2 = 0; tot = 1; int n = read();for(int i = 1; i <= n; i++){x[i] = read(); if(i == 1||x[i - 1] != x[i] - 1)push(x[i]); if(i> 1&&x[i - 1] != x[i] - 1)push(x[i - 1] + 1); }push(x[n] + 1); S = 0, T = cnt1 + cnt2 + 1; for(int i = 1; i <= cnt1; i++)insert(S, i, 1); for(int i = 1; i <= cnt1; i++)for(int j = 1; j <= cnt2; j++)if(!vis[max(posx[i] - posy[j], posy[j] - posx[i])])insert(i, cnt1 + j, 1); for(int i = 1; i <= cnt2; i++)insert(cnt1 + i, T, 1); int ans = dinic(); printf("%d\n", ans + (cnt1 - ans)/2 * 2 + (cnt2 - ans)/2 * 2 + (cnt1 - ans)%2 * 3); }return 0;
}

转载于:https://www.cnblogs.com/luoyibujue/p/10719689.html

Problem B: 故障电灯(light)相关推荐

  1. LOJ 1070 Algebraic Problem

    LOJ 1070 Algebraic Problem 题目链接:Light OJ 1070 Algebraic Problem Problem Description Given the value ...

  2. 论文速读:自监督弱光图像增强:Self-supervised Image Enhancement Network: Training with Low Light Images Only

    Self-supervised Image Enhancement Network: Training with Low Light Images Only Yu Zhang, Xiaoguang D ...

  3. activeroot翻译,Active翻译

    求翻译tip form diameter(dFa)是什么意思 tip form diameter 齿顶成形直径 root form diameter(dFf)齿根成形直径 active root di ...

  4. 低声教育_我内心低声说:“成为建设者”

    低声教育 by Rebecca Radding 由丽贝卡·拉丁(Rebecca Radding) 我内心低声说:"成为建设者" (Something within me whisp ...

  5. api zabbix 拓扑图 获取_zabbix网络拓扑图配置-Maps(示例代码)

    zabbix network map"可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map,通过map可以了解应用的整体状况:服务器是否异常.网络是否有故障.应用当前什么状 ...

  6. 计算机视觉论文-2021-06-09

    本专栏是计算机视觉方向论文收集积累,时间:2021年6月9日,来源:paper digest 欢迎关注原创公众号 [计算机视觉联盟],回复 [西瓜书手推笔记] 可获取我的机器学习纯手推笔记! 直达笔记 ...

  7. sql azure 语法_Azure中的新SQL数据仓库

    sql azure 语法 介绍 (Introduction) In previous chapters, we taught how to create SQL Databases in Azure. ...

  8. Facade模式新解

    一. 门面(Facade)模式 外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式. 医院的例子 用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统 ...

  9. 三大设计模式详细总结

      设计模式是开发过程中常见的编程技巧,常见的三大类设计模式:结构型设计模式.创建型设计模式和行为型设计模式.下面将详细总结一下各大类中常用的设计模式.   五种创建型设计模式 这里介绍5种常用的创建 ...

最新文章

  1. webpack如何将css文件分离的,【Webpack小书】Webpack中如何将CSS样式抽取到独立文件中? - Tim的资源站...
  2. 支付宝app支付总结
  3. SOA 案例研究:SOA 设计
  4. SQLAlchemy之SQL Expression
  5. petshop 出现没有为 SQL 缓存通知启用数据库“MSPetShop4”
  6. 谁在关心toString的性能?
  7. SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据
  8. 【数学基础】拉格朗日对偶
  9. java8 json转xml_2019-08-17java对象与json,xml互转
  10. WCF学习之旅—WCF概述(四)
  11. MySQL之limit使用
  12. Java中volatile的作用以及用法
  13. 微信小程序开发基础知识总结
  14. 快逸报表4.0 分组处理
  15. color ui的使用
  16. 如何设计一份令人舒服的PPT
  17. vue项目的停止_Terminal怎么停止VUE项目
  18. typedef struct Lnode{ Elemtype data; struct Lnode *next; } Lnode,*Linklist;
  19. 【Codesys】-按钮启动外部.exe应用程序,按钮关闭HMI界面,桌面图标启动HMI界面。
  20. 所有人体胸部和下半身各部位的英语单词

热门文章

  1. oracle10g只导出某个用户所拥有的数据库表
  2. Windows Phone 7应用之Tencent微博——封装API[上篇]
  3. 在linux上搭建本地yum源
  4. 为什么Nginx性能比Apache高
  5. 4、连接Mysql数据库
  6. Linux基础常用运维操作
  7. 评 成功编SaaS的 10 大技巧
  8. 最近看的电影(乱谈)
  9. why do not do consultant any more?
  10. 链接写不到txt文件该怎么办呢