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\n", 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
