我们有一种每毫升含有千卡热量的饮料。毫升的这种饮料含有多少千卡热量?
输出毫升这种饮料包含的的千卡数。最大允许浮点数精度误差。
输出 | ||
---|---|---|
废话不多说,答案就是~
#include <cstdio>
using namespace std;
int main()
{
int a, b;
scanf("%d%d", &a, &b);
a *= b;
printf("%d.%d\n", a / 100, a % 100);
return 0;
}
给定长度为的序列。
判断是否为的一种排列。
如果是的一种排列,输出Yes
;否则,输出No
。
5
3 1 2 4 5
Yes
是的一种排列,所以我们输出Yes
。
6
3 1 4 1 5 2
No
不是的一种排列,所以我们输出No
。
3
1 2 3
Yes
1
1
Yes
由于题目保证,所以的一种排列定义如下:
因此,我们可以用数组记录每个数字是否出现,所以总时间复杂度为。
#include <cstdio>
#define maxn 1005
using namespace std;
bool used[maxn];
int main()
{
int n;
scanf("%d", &n);
for(int i=0; i<n; i++)
{
int a;
scanf("%d", &a);
if(used[a])
{
puts("No");
return 0;
}
used[a] = true;
}
puts("Yes");
return 0;
}
给定三个整数,判断和哪个更大。
本题分如下三种情况输出:
<
;>
;=
。输出 | |||
---|---|---|---|
> |
|||
= |
|||
< |
首先,由于负负得正,。
这样,我们可以根据奇偶性得出,如果为偶数,;但如果为奇数,则。
因此,我们只需判断如果为偶数,将替换为,再将替换为。
最后,和的大小关系就是和的大小关系。
#include <cstdio>
using namespace std;
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(!(c & 1))
{
if(a < 0) a = -a;
if(b < 0) b = -b;
}
puts(a < b? "<": a > b? ">": "=");
return 0;
}
给定长度为的正整数序列和次查询。
在第次查询中,给定正整数,求第小的不在中的正整数。
输出行。第行应该包含第小的不在中的正整数。
4 3
3 5 6 7
2
5
3
2
9
4
不在中的正整数有,其中有:
因此,我们应该依次输出2
,9
,4
。
5 2
1 2 3 4 5
1
10
6
15
本题我们可以先预处理出中每个元素比它小的元素的数量,再二分查找即可。
#include <cstdio>
#include <algorithm>
#define maxn 100005
using namespace std;
using LL = long long;
LL a[maxn];
int main()
{
int n, q;
scanf("%d%d", &n, &q);
for(int i=0; i<n; i++)
{
scanf("%lld", a + i);
a[i] -= i;
}
while(q--)
{
LL k;
scanf("%lld", &k);
printf("%lld\n", k + (upper_bound(a, a + n, k) - a));
}
return 0;
}
有多少种排列个白球和个黑球的方法使得下列条件成立?
答案对取模。
输出答案,对取模。
输出 | |||
---|---|---|---|
首先,本题中合法排列数就是如下符合任意的的最短路径的数量:
由此可见,如果(即终点超出限制),答案一定为。
我们还可以发现,如果没有这个限制,答案为。
我们再考虑不合法的路径数,数量为。
因此,答案为。
这里用AtCoder Library
好像比较方便唉~
#include <iostream>
#include <atcoder/modint>
using namespace std;
using modint = atcoder::modint1000000007;
modint f(int n, int m)
{
if(n < 0 || m < 0)
return 0;
modint ret = 1;
for(int i=1; i<=m; i++)
ret = ret * (n + i) / i;
return ret;
}
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
if(n > m + k) puts("0");
else printf("%d\n", (f(n, m) - f(n - k - 1, m + k + 1)).val());
return 0;
}