A - T-shirt
题意: 在某个编程比赛中,根据以下规则向参赛者发放T恤衫。所有排名在第A名或更高的参赛者都会获得一件T恤。此外,在排名在第(A+1)名到第B名(包括A+1和B)之间的参赛者中,随机选择C名参赛者可以获得一件T恤。选择是均匀随机的。这次比赛中,共有1000名参赛者,且他们的排名各不相同。伊罗哈参加了这次比赛,她的排名是第X名。求她获得T恤的概率。
思路:直接if判断即可要不就输出1,要不就是0,要不就是概率事件
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1010, INF = 0x3f3f3f3f, Mod = 998244353;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, -1, 0, 1};
int n;
map<int, int> mp;
bool st[N];
int a, b, c, x;
int main()
{
cin >> a >> b >> c >> x;
if(x <= a) cout << 1.000000000000;
else if(x > b) cout << 0;
else
{
//cout << (double)c / (b - a);
printf("%.12lf", (double)c / (b - a));
}
return 0;
}
B - Minimize Ordering
题意: 给定一个字符串S,找到通过对S的字符进行排列得到的字典序最小的字符串S’。这里,对于两个不同的字符串s = s1s2 … sn和t = t1t2 … tm,当满足以下条件之一时,s在字典序上小于t:
存在一个整数i(1≤i≤min(n, m)),使得si < ti,并且对于所有整数j(1≤j<i),都有sj = tj。
对于所有整数i(1≤i≤min(n,m)),都有si = ti,并且n < m。
思路:需要通过对字符串S进行字符排列来创建一个字典序最小的字符串S’。所以直接sort排序在输出即可
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1010, INF = 0x3f3f3f3f, Mod = 998244353;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, -1, 0, 1};
int n;
map<int, int> mp;
bool st[N];
string s;
int main()
{
cin >> s;
sort(s.begin(), s.end());
cout << s;
return 0;
}
C - 1111gal password
题意: 给定一个整数N,找出满足以下所有条件的整数X的数量,取模为998244353。
X是一个N位正整数。
设X1, X2, …, XN是X从高位到低位的数字。它们满足以下所有条件:
- 对于所有整数1≤i≤N,有1≤Xi≤9;
- 对于所有整数1≤i≤N-1,有|Xi-Xi+1|≤1。
思路: 可以使用动态规划来计算满足条件的整数X的数量。定义一个二维数组dp,其中dp[i][j]表示i位数的整数,最后一位为j的整数的数量。初始时,仅有一位数的整数的数量为1,即dp[1][j]=1,其中1≤j≤9。然后,根据题目给出的条件进行递推计算。对于每个位数i(2≤i≤N),可以根据前一位的数字和当前位的数字之间的关系,计算出当前位的数字的数量
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010, mod = 998244353;;
typedef long long LL;
LL dp[N][10];
LL n;
int main()
{
cin >> n;
dp[2][1] = 2;
for (int i = 2; i <= 8; i ++)
{
dp[2][i] = 3;
}
dp[2][9] = 2;
for (int i = 3; i <= n; i ++)
{
for (int j = 1; j <= 9; j ++)
{
if (j == 1) dp[i][j] = (dp[i - 1][1] + dp[i - 1][2]) % mod;
else if (j == 9) dp[i][j] = (dp[i - 1][8] + dp[i - 1][9]) % mod;
else dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j] + dp[i - 1][j + 1]) % mod;
}
}
LL ans = 0;
for (int i = 1; i <= 9; i ++)
{
ans += (dp[n][i]) % mod;
}
cout << (ans) % mod;
return 0;
}