NOI Online 2022 普及組題解

2022-10-09 09:51:08 字數 2089 閱讀 8816

暴力記錄每一列的1的個數,在判斷是否超過一半,統計答案。

#include#define n 1005

using namespace std;

int n,m,x,ans,a[n];

int main()

\)。因此 \(\frac | (\gcd(x,y))^2\)。

又有 \(x | \gcd(x,y)\),所以 \(x^2 | (\gcd(x,y))^2\)。

要最小化 \(y\),就要最大化 \(\gcd(x,y)\),即最大化 \(\gcd(x,y)^2\)。而 \(\gcd(x,y)^2\) 又同時是 \(x^2\) 和 \(\frac\) 的因數, 所以可得,\(\gcd(x,y)^2=\gcd(x^2,\frac)\)。

接下來只需要開方求出 \(\gcd\),隨後求出 \(y\) 並判斷是否符合要求。

#include#include#include#define n 405

#define mod 1000000007

#define ll long long

using namespace std;

int t,n,m,cnt[n];

ll ans,f[n][n][n];

char s[n],t[n];

int main()

memset(f,0,sizeof(f));

f[0][0][0]=1;

for (int i=1;i<=n;++i)

for (int j=0;j<=min(i,m);++j)

for(int x=0;x<=i;++x)

else

}ans=0;

for (int x=0;x<=n;++x)

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

} return 0;

}

主要到每個字元最後要麼保留,要麼從左邊刪,要麼右邊刪。因此可以考慮使用 \(dp\)。

設 \(f_\) 表示 \(s\) 中到了第 \(i\) 個字元,\(t\) 中匹配到第 \(j\) 個字元,左邊還要刪除 \(x\) 個,右邊 \(y\) 個。

考慮轉移。如果當前這個位置是-,則從左刪轉移和從右刪轉移過來。

否則,先考慮右邊多乙個要刪的(因為加是加在右邊)。

然後考慮能不能放左邊,前提是當前沒有已匹配的並且右邊沒有要刪的。

最後如果可以匹配,再加到匹配中,前提是右邊沒有要刪的。

時空複雜度都是 \(\mathcal o(n^4)\),無法通過此題。

注意到 \(x\),\(y\),\(i\) 和 \(j\) 之間是有一定關係的,令 \(cnt_i\) 表示 \(i\) 之前-的個數,則有 \(i-j-x-y=2\times cnt_i\)。

解釋一下。\(j\) 是已匹配的,\(x\) 和 \(y\) 分別表示左邊和右邊還沒刪除的,\(i\) 表示當前是第幾個字元,那麼 \(i-j-x-y\) 就表示已經刪除的字元個數加上-的個數。而乙個-就對應著乙個被刪除的字元,所以 \(i-j-x-y=2\times cnt_i\)。

#include#include#include#define n 405

#define mod 1000000007

#define ll long long

using namespace std;

int t,n,m,cnt[n];

ll ans,f[n][n][n];

char s[n],t[n];

int main()

memset(f,0,sizeof(f));

f[0][0][0]=1;

for (int i=1;i<=n;++i)

for (int j=0;j<=min(i,m);++j)

for(int x=0;x<=i;++x)

else

}ans=0;

for (int x=0;x<=n;++x)

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

} return 0;

}

雜題 普及組難度

打怪 題目鏈結 哥斯拉打敗基多拉後覺得意猶未盡,叫來了 n 個怪獸跟他操練。然而哥斯拉在戰勝基多拉後只剩下了 w 個能量單位,所以他並不一定能打敗所有怪獸。哥斯拉有乙個基礎攻擊力 a,還有乙個技能攻擊力加成 b 釋放技能傷害為 a b 每乙個怪獸都有兩個屬性,攻擊力 xi 和生命值 yi,如果哥斯拉...

NOIP普及組複賽題集

題目描述 牛倌被通知,他的乙隻牛逃逸了!所以他決定,馬上出發,盡快把那只牛抓回來 他們都站在數軸上 牛倌在n 0 n 100000 處,牛在k 0 k 100000 處 約翰有兩種辦法移動,步行和瞬移 步行每秒種可以讓約翰從x處走到x l或x l處 而瞬移則可讓他在1秒內從x處消失,在2x處出現 然...

玩具(普及組複賽模擬題)

問題描述 有一種玩具,在玩具上有乙個紅色按鈕,乙個黃色按鈕和一萬個能坐能站的小木偶,按一次紅色的按鈕,就會有乙個站著的小木偶坐下去,按一次黃色按鈕,就可以使站著的小木偶增加一倍。開始時有三個小木偶站著,要想使站著的小木偶增加到n個,最少按幾次按鈕就行了?請編一程式,由鍵盤輸入n輸出最少按的次數。輸入...