2019ccpc哈爾濱補題

2021-10-25 04:48:12 字數 2008 閱讀 7669

因為每個字串只能取乙個,剛開始是覺得全部列舉也不會超,後來想想列舉也要用深搜,所以就先記錄擁有各個字元的串,然後深搜;

#include

using

namespace std;

const

int maxn=

2e6+10;

int t;

char s[maxn]

;vector<

int>v[10]

;bool vis[10]

;bool

dfs(

int k)

else}}

//cout}int

main()

for(

int j=

0;j<

strlen

(s);j++

)else

if(s[j]

=='a'

&&!num[2]

)else

if(s[j]

=='r'

&&!num[3]

)else

if(s[j]

=='b'

&&!num[4]

)else

if(s[j]

=='i'

&&!num[5]

)else

if(s[j]

=='n'

&&!num[6]

)}}for

(int i=

1;i<=

6;i++

) vis[i]

=false

;printf

("%s\n"

,dfs(1

)?"yes"

:"no");

}}

大致方法就是以數字大小將h分為各個層級,求各個層級可以取的數的排列數。注釋掉的地方是剛開始想用預處理階乘節省時間然後找到乙個公式,但這樣寫一直錯,所以就試了發模擬,以為會t結果稀里糊塗過了。有時間的話再推具體公式。

#include

using

namespace std;

const

int maxn=

1e5+10;

#define ll long long

const ll mod=

1e9+7;

int t,n;

ll num[maxn]

;ll f[maxn]

;vector<

int>p;

vector<

int>v;

intmain()

*/while

(t--)*/

}if(!flag||num[1]

!=0||num[2]

==0||num[n]

!=n-1)

ll ans=1;

ll t1=

1;ll t2=1;

for(

int i =

2;i <= n;i++

)else

if(num[i]

> num[i-1]

)}/* for(int i=1;iprintf

("%lld\n"

,ans*t2%mod);}

}

偶數拿2奇數拿3(無腦素數篩,測試的時候才看出來規律)

#include

using

namespace std;

const

int maxn=

1e5+10;

intmain()

else

}}

按比例加就好了

#include

using

namespace std;

const

int maxn=

1e5+10;

intmain()

for(

int i=

0;i}

2019CCPC哈爾濱站 E題 O n

在此貼另外乙個簡單題 吃糖果 如果ac上面乙個題目之後,發現兩個吃的方法其實一模一樣,但是又來了乙個問題,因為這個題目資料很大,卡 o nlogn 則我們如何 o n 求出現次數最多的數。在此貼另外乙個簡單題 2456.mode 過了上面乙個題目你會發現,這個是求出現次數 n 1 2的數,但是如果我...

2019CCPC網路選拔賽補題

hdu6703 題意就不說了,直接分析吧。對於1操作,a pos 1e7,但是我們每次詢問是 1,n 範圍內的,這個操作顯然就是把這個點給刪了。對於2操作,詢問 1,r 區間內 k且不等於a i 1 i r 的最小的數。題目做法如下 對位置建權值線段樹,每個結點表示乙個區間,每個結點維護乙個區間的位...

2019CCPC哈爾濱A題 差分約束系統 二分

題目大意 有n 3e3個格仔,你可以任意給每個格仔染色,但是要滿足m 3e3限制條件,限制條件有兩種型別 1.區間 l,r 中被染色的格仔數量不少於k。2.區間 l,r 外被染色的格仔數量不少於k。在滿足所有限制條件下求染色格仔數量的最小值。題解 算作是差分約束 二分的板子題,比賽時還不知道差分約束...