我好菜鸭
A.除了二,其他都可以减n-1,所以除了二都能减到一
#include<cstdio>
int main()
{
int n;scanf("%d",&n);
if(n!=2)
printf("1\n");
else
printf("2\n");
return 0;
}
B.对于数字相同的,颜色可能相同,把一个数字看作一个颜色则该颜色的个数为n-arr[i]
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int arr[100010],g[100010];
int color[100010];
bool cmp(int a,int b)
{
return arr[a]<arr[b];
}
int main()
{
int n;cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
for(int i=0;i<=n;i++)
g[i]=i;
sort(g,g+n,cmp);
bool ok=1;
int j=1;
for(int i=0;i<n;)
{
int u=arr[g[i]];
int d = n - u;
for(int k=0;k<d;k++)
if(arr[g[i+k]]!=u)
ok=0;
else
color[g[i+k]]=j;
i=i+d;
j++;
}
if(ok)
{
cout<<"Possible"<<endl;
for(int i=0;i<n;i++)
cout<<color[i]<<" ";
cout<<endl;
}
else
cout<<"Impossible"<<endl;
return 0;
}
C.推出公式C(n-1,k)*m*(m-1)^k
#include<cstdio>
#define ll long long
const int N = 2000 + 5;
const ll MOD = 998244353;
int comb[N][N];
void init(){
for(int i = 0; i < N; i ++){
comb[i][0] = comb[i][i] = 1;
for(int j = 1; j < i; j ++){
comb[i][j] = comb[i-1][j] + comb[i-1][j-1];
comb[i][j] %= MOD;
}
}
}
ll qpow(ll a,ll b)
{
ll ret=1;
while(b)
{
if(b&1)ret=(ret*a)%MOD;
a=(a*a)%MOD;
b>>=1;
}
return ret%MOD;
}
int main(){
init();
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
printf("%I64d\n",((comb[n-1][k]%MOD*m%MOD*qpow(m-1,k)%MOD)%+MOD)%MOD);
return 0;
}