time limit: 10 sec memory limit: 512 mb
submit: 694 solved: 440
[submit][status][discuss]
為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。
在晚宴上,主辦方為大家提供了 n−1 種不同的壽司,編號 1,2,3,…,n−1,其中第 i 種壽司的美味度為 i+1 (即壽司的美味度為從 2 到 n)。
現在小 g 和小 w 希望每人選一些壽司種類來品嚐,他們規定一種品嚐方案為不和諧的當且僅當:小 g 品嚐的壽司種類中存在一種美味度為 x 的壽司,小 w 品嚐的壽司中存在一種美味度為 y 的壽司,而 x 與 y 不互質。
現在小 g 和小 w 希望統計一共有多少種和諧的品嚐壽司的方案(對給定的正整數 p 取模)。注意乙個人可以不吃任何壽司。
輸入檔案的第 1 行包含 2 個正整數 n,p,中間用單個空格隔開,表示共有 n 種壽司,最終和諧的方案數要對 p 取模。
輸出一行包含 1 個整數,表示所求的方案模 p 的結果。
3 10000
92≤n≤500
0這資料範圍一眼看上去是沒什麼頭緒的,但是可以進行一些猜想
選乙個數,相當於選他的質因子,所以考慮篩一下$500$以內的質數,發現有接近$100$個,然後對於乙個數$n$,它的大於等於$\sqrt n$的質因數至多有乙個
然後$\sqrt 500$以內的質數只有$8$個,這就很好搞了,狀壓一下.
對於每個數記錄它小於$\sqrt 500$以內的質因數的情況,再額外記錄一下它大於$\sqrt 500$的質因數,這樣就可以dp了.
顯然對於大於$\sqrt 500$的質因數相同的數需要同時dp,這樣分兩次dp即可.
#include#include#include#include#includeusing namespace std;#define maxn 510
int flag[maxn],prime[maxn],cnt;
inline void pre()
}// for (int i=1; i<=cnt; i++) printf("%d ",prime[i]); puts("");
}struct nodea[maxn];
inline bool cmp(node a,node b)
sort(a+1,a+n-1+1,cmp);
dp[0][0]=1;
int last=1;
for (int i=1; i<=n-1; last++,i++)
for (int j=0; j<(1<<8); j++)
for (int k=0; k<(1<<8); k++)
dp[j][k]=((tmp[0][j][k]+tmp[1][j][k]-dp[j][k])%p+p)%p;
}while (last=0; j--)
for (int k=(1<<8)-1; k>=0; k--)
if (a[i].p2!=a[i+1].p2) break;
}last++;
for (int j=0; j<(1<<8); j++)
for (int k=0; k<(1<<8); k++)
dp[j][k]=((tmp[0][j][k]+tmp[1][j][k]-dp[j][k])%p+p)%p;
}for (int j=0; j<(1<<8); j++)
for (int k=0; k<(1<<8); k++)
if (!(j&k)) (ans+=dp[j][k])%=p;
printf("%d\n",ans);
return 0;
}
BZOJ 4197 Noi2015 壽司晚宴
為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i 1 即壽司的美味度為從 2 到 n 現在小 g 和小 w ...
bzoj4197 NOI2015 壽司晚宴
題意 有n 1 個數從 2 n 從中選出兩個集合 s 和 u 可以為 要求對於 x s,y u,都有gc d x,y 1 求方案總數 n 500 解法 狀壓dp 首先看到互質這一條件,可以想到利用質因子來判斷 很同意證明,對於乙個數 x 大於x 的質因子至多有乙個。假設存在兩個及兩個以上大於x 的質...
BZOJ4197 NOI2015 壽司晚宴
bzoj luogu 從 2 到 n 中選出兩個不相交子集使得這兩個集合中的任一對元素互質。問總方案數模 mod 的結果。n le500 首先有 30 的部分分是 n le30 考慮到 30 以內的質因數只有 10 個,因此可以狀壓 dp 即設 f s 1 s 2 表示第乙個人選出的質因數集合為 s...