NOI 2015 壽司晚宴

2021-07-29 22:26:47 字數 1939 閱讀 9797

4197: [noi2015]壽司晚宴

time limit: 10 sec memory limit: 512 mb

submit: 813 solved: 508

[submit][status][discuss]

description

為了慶祝 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 取模)。注意乙個人可以不吃任何壽司。

input

輸入檔案的第 1 行包含 2 個正整數 n,p,中間用單個空格隔開,表示共有 n 種壽司,最終和諧的方案數要對 p 取模。

output

輸出一行包含 1 個整數,表示所求的方案模 p 的結果。

sample input

3 10000

sample output

9 hint

2≤n≤500

0 < p≤1000000000

題解:可以發現,選了乙個數等於是選了它的質因子。首先n只有500,所以小於根號500的質因子只有8個。我們可以把這8個質因子壓成二進位制位,形成2^8個集合。對於每個數,只可能含有不超過1個大於根號500的質因子,我們按這個將每個數分類。

把每個數存到乙個結構體s裡,s.kind表示這個數里大於根號500的質因子是什麼,沒有的話為1,s.se表示這個數小於根號500的質因子的包含情況,用二進位制位壓一下。

然後我們按kind排序。dp即可。

dp的時候把kind相同的放在一起dp。

設f[i][j]表示第乙個人選了i這個質因數集合,第二個人選了j這個質因數集合的方案數。

對於每一類數開始dp時。先把f陣列複製兩遍到p[1]和p[2];

p[i][j][k]表示當前是第i個人進行操作,第1個人選的集合是j第二個人是k的方案數。

用p陣列進行更新。

dp結束後要用p陣列更新f陣列。f=p1+p2-f; 因為兩個p陣列中都包含了選當前數的情況,然而這顯然是不可以的,所以要減去之前的f。

**唉感覺自己好菜

【**】

#include

#include

#include

#include

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

int f[515][515],p[3][515][515],q,n,ans;

int pri[8]=;

struct node s[515];

inline

bool comp(const node &x,const node &y)

s[i].kind=tmp;

}sort(s+2,s+n+1,comp);

f[0][0]=1;

fo(i,2,n)

for(j=255;j>=0;j--) for(k=255;k>=0;k--) if((j&k)==0)

if(s[i].kind==1||s[i].kind!=s[i+1].kind)

} fo(j,0,255) fo(k,0,255) if((j&k)==0) ans=(ans+f[j][k])%q;

printf("%d\n",ans);

return

0;}

NOI 2015 壽司晚宴

description 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i 1 即壽司的美味度為從 2 到 n...

NOI2015 壽司晚宴

題目 這是一篇需要龜速乘的思博題解 我們考慮一下 n leq 30 的睿智暴力,顯然質因數個數少得一批,互質的條件又等價於沒有公共的質因子,所以我們直接狀壓質因子,dp i s 1 s 2 表示前 i 個數考慮完了,第乙個人選擇的質因子狀態為 s 1 第二個人選擇的質因子狀態為 s 2 轉移的話就考...

NOI2015 壽司晚宴

嘟嘟嘟 昨天模擬t2 lba和dukelv都說和這題特別像 然而他倆還是沒做出來hhhh 我今天一看,果不其然,大體思路都一樣。但自認為這題比模擬題要難一些,自己也是因為沒有徹底理解浪debug了半天,導致費了很長時間。當 n leqslant 30 時,因為質數只有最多10個,所以可以狀壓每乙個數...