2013長沙網路賽G Goldbach

2021-06-18 11:44:35 字數 708 閱讀 6762

一開始以為是找規律,寫了個樸素的,沒找到規律。

忘dp上想,想著想著就出思路了。

一開始dp[i][j]表示用用i個素數的和為j的方案。

把乘和加寫到一起dp[i][j][k]。在統計的時候++或**會有重複。

這樣,對於2*3*5 ,2*5*3,3*5*2重複三次,而2*2*5只重複兩次,那麼2*2*5要多加一次。

另外注意判斷三個數相同的情況。唉,比賽的時候就差了乙個點就寫對了,真可惜。

#include #include #include #include #include #include #include #include #include #include using namespace std;

#define l(t) t<<1

#define r(t) t<<1|1

#define eps 1e-7

typedef long long ll;

const int inf=1000000010;

const int maxn=80001;

const int mod=1000000007;

bool a[maxn];

ll prim[maxn],tot;

ll dp[3][2][maxn][2];

void init()

{ a[0]=1;

a[1]=1;

for(int i=2;i

2013 長沙網路賽J題

思路 這題對於其他能退出所有值的情況比較好像,唯一不能確定的是xxoxxoxxoxx這個形式的序列,其中xx表示未知,o表示已知。我們令num 1 0,那麼num 4 sum 3 sum 2 num 1 可以遞推,num i sum i 1 sum i 2 num i 3 i 3 1 這樣求出來的每...

2013長沙現場賽C Collision

題意 圓的座標是 0,0 給它的半徑,再給乙個範圍半徑,再給乙個硬幣的座標和它的半徑,還有他的速度向量,問這個硬幣在給定範圍裡面待了多久。硬幣碰到圓會彈開。這道題直接畫圖推公式就好了,下面給 include include include include include include includ...

2013 ACM ICPC 長沙網路賽J題

題意 乙個數列,給出這個數列中的某些位置的數,給出所有相鄰的三個數字的和,數列頭和尾處給出相鄰兩個數字的和。有若干次詢問,每次問某一位置的數字的最大值。分析 設數列為a1 an。首先通過相鄰三個數字的和我們可以求出a3,a6,a9 是多少。a3 sum a1,a2,a3 sum a1,a2 a6 s...