PE刷题记录
PE刷题记录
PE60 / 20%dif
这道题比较坑爹.
所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素数的关系,然后dfs这张图找出大小为5的团.
/***
* @name Prime pair sets
* @author zball
* @algorithm Sieve for primes and dfs search for finding a set of primes
*/
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 100000000
#define maxq 10000000
#define loop(i,f,t) for(int i=f;i<t;++i)
using namespace std;
struct nod{
vector<int> n;
} node[1400];
#define nodes node
bool isp[maxn];
int p[maxq],pl;
void sieve(){
for(int i=2;i<maxn;++i){
if(!isp[i]) p[pl++]=i;
for(int j=0;j<pl;++j){
int k=p[j];
if(i*k>=maxn) break;
isp[i*k]=1;
if(!(i%k)) break;
}
}
}
int u[maxq];
void constructLUT(){
loop(i,1,10) u[i]=10;
loop(i,10,100) u[i]=100;
loop(i,100,1000) u[i]=1000;
loop(i,1000,10000) u[i]=10000;
loop(i,10000,100000) u[i]=100000;
loop(i,100000,1000000) u[i]=1000000;
loop(i,1000000,10000000) u[i]=10000000;
}
inline bool isok(int n,int m){
n=p[n],m=p[m];
return !isp[u[n]*m+n];
}
inline void ins(int n,int m){
node[n].n.push_back(m);
node[m].n.push_back(n);
}
inline void constructGraph(int ma){
loop(i,0,ma){
loop(j,i+1,ma) if(isok(i,j)&&isok(j,i)) ins(i,j);
}
}
int uu[10],ul;
#define dep 4
#define depm1 3
int dfs(int n,int d,int su){
int mi=0x7fffffff,q=nodes[n].n.size(),mix;
loop(i,0,d){
if((!isok(uu[i],n)) || (!isok(n,uu[i]))) return 0x7fffffff;
}
su+=p[n];
uu[d]=n;
if(d==dep) return su;
loop(i,0,q){
if(nodes[n].n[i]<n) continue;
mix=dfs(nodes[n].n[i],d+1,su);
if(mix<mi){
mi=mix;
if(d==depm1) break;
}
}
return mi;
}
int getGraph(int f,int t){
int mi=0x7fffffff,mix;
loop(i,f,t){
mix=dfs(i,0,0);
if(mix<mi) mi=mix;
}
return mi;
}
int main(){
sieve();
constructLUT();
constructGraph(1229);
int qsum=getGraph(0,10);
printf("%d\n",qsum);
return 0;
}
在我的机子上都要跑0.7s+,-O2.我猜不用vector可能会好些.
PE刷题记录的更多相关文章
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- 刷题记录:[DDCTF 2019]homebrew event loop
目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
- 刷题记录:[CISCN 2019 初赛]Love Math
目录 刷题记录:[CISCN 2019 初赛]Love Math 思路一 思路二 总结 刷题记录:[CISCN 2019 初赛]Love Math 题目复现链接:https://buuoj.cn/ch ...
随机推荐
- Linq之Lambda表达式初步认识
目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...
- 第十七章:jQuery类库
javascript的核心API设计的很简单,但由于浏览器之间的不兼容性,导致客户端的API过于复杂.IE9的到来缓解了这种情况.然而使用javascript的框架或者工具类库,能简化通用操作,处理浏 ...
- 笔记:js的replace函数
replace函数 js的replace函数与c#的有一个不同,js的只替换第一个字符 例如,var a=',1,2' var b=a.replace(',','') 结果b='1,2'(ps:这是一 ...
- Mysql-提示java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 7 to TIMESTAMP.
在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp ...
- Java基础-内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...
- 【codevs1044】导弹拦截问题与Dilworth定理
题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...
- 编译rnnlib
rnnlib,一个多年不更新的rnn库,编译的过程有点麻烦,好多东西要选特定版本的.这里记录一下我的配置脚本,在ubuntu14.04下测试ok. P.S fedora下好像不能直接用包管理来安装指定 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- Swift开发学习-01 Swift介绍
本教程是笔者在自学IOS/Swift知识的总结,适用于通过对Objictive C编程的运用并需要了解基于iOS程序的iPhone和iPad的程序员.做一个有bigger的’攻城狮‘,有尊严的工作,快 ...