牛客練習賽 71 AC
A - 迴文數
迴文數條件:奇數個數的個數最多有一個
如果0的數量是0,那麼直接先找到奇數個數的數是誰,然後正序輸出一半逆序輸出一半即可。
如果0的數量不是0,只需要找到一個偶數個個數的數放置第一個即可(只需要放一個最開頭一個末尾)
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=20;
int cnt[N];
int now[N];
int main()
{
IO;
int T=1;
//cin>>T;
while(T--)
{
int odd=0;
for(int i=0;i<=9;i++)
{
cin>>cnt[i];
if(cnt[i]&1) odd++;
}
if(odd>1)
{
cout<<-1;
continue;
}
if(!cnt[0])
{
int p=-1;
// 找到奇數個的數
for(int i=1;i<=9;i++)
if(cnt[i]&1) p=i;
// 先輸出一半
for(int i=1;i<=9;i++)
for(int j=1;j<=cnt[i]/2;j++) cout<<i;
if(p!=-1) cout<<p;
// 再倒序輸出一半
for(int i=9;i>=1;i--)
for(int j=1;j<=cnt[i]/2;j++) cout<<i;
}
else
{
int p=-1;
for(int i=1;i<=9;i++)
if(cnt[i])
if(p==-1||cnt[p]==1)
p=i;
if(p==-1)
{
if(cnt[0]==1) cout<<0;
else cout<<-1;
continue;
}
else
{
if(cnt[p]==1)
{
cout<<-1;
continue;
}
int q=-1;
for(int i=0;i<=9;i++)
if(cnt[i]&1) q=i;
cout<<p;
cnt[p]-=2;
for(int i=0;i<=9;i++)
for(int j=1;j<=cnt[i]/2;j++) cout<<i;
if(q!=-1) cout<<q;
for(int i=9;i>=0;i--)
for(int j=1;j<=cnt[i]/2;j++) cout<<i;
cout<<p;
}
}
}
return 0;
}
C - 數學考試
狀態表示:
f
i
f_i
fi表示
1
∼
p
i
1 \sim p_i
1∼pi是
p
i
p_i
pi的排列,且
1
∼
p
j
1 \sim p_j
1∼pj不是是
p
j
p_j
pj的排列
j
<
i
j<i
j<i情況下的方案數
狀態計算:
f
i
=
p
i
!
−
∑
j
=
1
i
−
1
f
j
×
(
p
i
−
p
j
)
!
f_i=p_i!-\sum_{j=1}^{i-1}f_j×(p_i-p_j)!
fi=pi!−∑j=1i−1fj×(pi−pj)!
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=2010;
const int mod=20000311;
int n,m;
ll f[N],fact[N],p[N];
int main()
{
IO;
int T=1;
//cin>>T;
while(T--)
{
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>p[i];
fact[0]=1;
for(int i=1;i<=n;i++) fact[i]=fact[i-1]*i%mod;
sort(p+1,p+1+m);
for(int i=1;i<=m;i++)
{
f[i]=fact[p[i]];
for(int j=1;j<i;j++)
f[i]=(f[i]-f[j]*fact[p[i]-p[j]]%mod)%mod;
}
ll res=fact[n];
for(int i=1;i<=m;i++)
res=(res-f[i]*fact[n-p[i]]%mod)%mod;
cout<<(res%mod+mod)%mod<<'\n';
}
return 0;
}
相關文章
- 牛客練習賽
- 牛客練習賽60
- 牛客練習賽 26
- 牛客練習賽129 A-數數
- 牛客練習賽26 A 平面【遞推】
- 牛客周賽 Round 36 (小白練習記)
- 牛客練習賽73 D題:離別
- 【牛客訓練記錄】牛客周賽 Round 69
- 【牛客訓練記錄】牛客周賽 Round 70
- Mysql 練習(牛客網)MySql
- 牛客練習賽40 B 小A與任務(貪心)
- 牛客小白月賽95 (賽前的練習之我是小菜雞)
- 牛客練習賽14B 區間的連續段
- 牛客練習賽27【C 水圖 dfs求最長路】
- 牛客練習賽26 C 城市規劃【思維+貪心】
- 牛客SQL練習第21題SQL
- 牛客練習賽74 E CCA的期望(算概率的技巧+floyd處理)
- 牛客周賽48
- 牛客小白月賽105
- 牛客周賽 Round 63
- 牛客周賽 Round 57
- 牛客周賽 Round 56
- 牛客小白月賽97
- 牛客小白月賽88
- 牛客周賽 Round 40
- 牛客小白月賽89
- 牛客周賽 Round 47
- 牛客周賽 Round 1
- 牛客周賽 Round 3
- 牛客周賽 Round 7
- 牛客小白月賽94
- 牛客周賽 Round 8
- 牛客周賽Ronud 46
- 牛客周賽 Round 38
- 牛客挑戰賽58
- 牛客小白周賽9
- 數理統計筆記[牛客專項練習]筆記
- 牛客周賽 Round 67 A~F