https://codeforces.com/contest/1312
是否倍数
#include <bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
int main()
{
int T;
sc("%d", &T);
while (T--)
{
int a, b;
sc("%d%d", &a, &b);
if (a % b == 0 || b % a == 0)
pr("YES\n");
else
pr("NO\n");
}
}
倒序输出
#include <bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
int a[105];
int main()
{
int T;
sc("%d", &T);
while (T--)
{
int n;
sc("%d", &n);
for (int i = 0; i < n; i++)
sc("%d", &a[i]);
sort(a, a + n, greater<int>());
for (int i = 0; i < n; i++)
pr("%d%c", a[i], i == n - 1 ? '\n' : ' ');
}
}
将所有数字转换成 k 进制,每一位只能有一个 1,模拟一下。
#include <bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
ll a[105];
bool vis[100];
int main()
{
int T;
sc("%d", &T);
while (T--)
{
memset(vis, 0, sizeof(vis));
int n, k;
ll cnt = 0;
sc("%d%d", &n, &k);
for (int i = 0; i < n; i++)
sc("%lld", &a[i]);
for (int i = 0; i < n; i++)
{
int cnt = 0;
while (a[i])
{
if (a[i] % k > 1)
{
pr("NO\n");
goto qwe;
}
else if (a[i] % k == 1)
{
if (vis[cnt] == true)
{
pr("NO\n");
goto qwe;
}
vis[cnt] = true;
}
cnt++;
a[i] /= k;
}
}
pr("YES\n");
qwe:;
}
}
从 1-m 中选择 n 个数字构成一个排列,其中只有两个数字是相等的,并且满足先升序再降序(可以没有升序或者降序)
1、考虑先从 m 个数字中选出 n-1 个数字
2、考虑相等的数字不可能是最大的数字,所以可以取剩下的 n-2 个数字
3、现在考虑排列,我们将最大的数字固定,分为左右两边,除了两个相同的数字,剩下的数字可以任意选择左边或者右边,所以答案是 ,由组合数公式,式子等于
所以答案等于
#include <bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
const ll mod = 998244353;
const int MAXN = 2e5 + 5;
ll fac[MAXN], inv[MAXN];
void init()
{
fac[0] = inv[0] = 1;
fac[1] = inv[1] = 1;
for (int i = 2; i < MAXN; i++)
{
fac[i] = fac[i - 1] * i % mod;
inv[i] = inv[mod % i] * (ll)(mod - mod / i) % mod;
}
for (int i = 2; i < MAXN; i++)
inv[i] = (inv[i] * inv[i - 1]) % mod;
}
ll C(ll n, ll m)
{
ll res = fac[n] * inv[m] % mod * inv[n - m] % mod;
return res;
}
ll power(ll a, ll b)
{
ll res = 1;
while (b)
{
if (b & 1)
res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int main()
{
init();
ll n, m;
sc("%lld%lld", &n, &m);
if (n == 2)
{
pr("0");
return 0;
}
ll ans = C(m, n - 1);
ans = ans * (n - 2) % mod;
ans = ans * power(2, n - 3) % mod;
pr("%lld\n", ans);
}
占坑