2018 ACM-ICPC 中国大学生程序设计竞赛线上赛
目录
A. Death is end
留坑
B.Goldbach
题意
每次给一个偶数(n(n<2<2^{63})),找出任意两个和为(n)的素数。
分析
从n的(frac{1}{2})往两边判素数,使用Miller Rabin随机性素数测试方法。
(ps:自己写了一个虽然过了,但是会被Carmichael数卡掉,还没搞懂板子上的算法怎么搞定Carmichael数的,留坑)
代码
```cpp #includeC. Heru and his Monitors
又要留坑-_-|||
D. Merchandise
分析
筛选出素数之后,显然同样大小素数不能分在多个组里,否则无法达到最优。
使用(dp[i][j])表示前(i)个素数分成(j)组的最小总花费,那么可以得到转移方程
[dp[i][j]=min(dp[k-1][j-1]+(a[i]-a[k])^2), (1<=k<=i)
]
(ps: 强烈谴责计蒜客的数据,交题的时候必须把(0,1)作为素数,否则就会像我一样浪费两天时间)
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <vector>
#include <cmath>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
const int maxn=10500;
const ll inf=0x3f3f3f3f3f3f3f3f;
bool isprime[1<<17];
void get_prime(){
memset(isprime,true,sizeof isprime);
// isprime[0]=isprime[1]=false;
int n=(1<<17);
for (int i = 2; i < n; ++i)
{
if(isprime[i]&&(double)i<=sqrt(n)+1){
for (int j = i*i; j < n; j+=i)
{
isprime[j]=false;
}
}
}
}
ll a[100050],dp[5050][1050];
int q[7050];
double f[7050];
int main(int argc, char const *argv[])
{
get_prime();
int t;
scanf("%d", &t);
while(t--){
int r,m;
scanf("%d%d", &r,&m);
int n=0;
for (int i = 0; i < r; ++i)
{
int x;
scanf("%d",&x);
if(isprime[x]) a[n++]=x;
}
sort(a,a+n);
n=unique(a,a+n)-a;
for (int i = n; i ; --i)
{
a[i]=a[i-1];
}
for (int j = 1; j <= m; ++j) dp[0][j]=inf;
for (int i = 0; i <= n; ++i) dp[i][0]=inf;
for (int j = 1; j <= m; ++j)
{
int h=1,t=0;
for (int i = 1; i <= n; ++i)
{
if(j==1){
dp[i][j]=(a[i]-a[1])*(a[i]-a[1]);
continue;
}
int k=q[t];
double ff=(double)(dp[i-1][j-1]-dp[k-1][j-1]+a[i]*a[i]-a[k]*a[k])/double(a[i]-a[k]);
while(t-h+1>=2&&ff<f[t]){
t--;
k=q[t];
ff=(double)(dp[i-1][j-1]-dp[k-1][j-1]+a[i]*a[i]-a[k]*a[k])/double(a[i]-a[k]);
}
++t;
q[t]=i;
f[t]=ff;
while(t-h+1>=2&&(double)2*a[i]>f[h+1]){
h++;
}
k=q[h];
dp[i][j]=dp[k-1][j-1]+(a[i]-a[k])*(a[i]-a[k]);
}
}
printf("%lld
", dp[n][m]);
}
return 0;
}
E. Copy and Submit II
太水了略
F. Clever King
(color{red}{留坑})
G. Trouble of Tyrant
H. Rock Paper Scissors Lizard Spock
I. Reversion Count
J. Bob's game
K. Ants
L. Nise-Anti-AK Problem
Click to expand
whateverhtml