因為每個字串只能取乙個,剛開始是覺得全部列舉也不會超,後來想想列舉也要用深搜,所以就先記錄擁有各個字元的串,然後深搜;
#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。在滿足所有限制條件下求染色格仔數量的最小值。題解 算作是差分約束 二分的板子題,比賽時還不知道差分約束...