给定三个大写英文字母,判断它们是否相同。
如果相等,输出Won
;否则,输出Lost
。
输入 | 输出 |
---|---|
SSS | Won |
WVW | Lost |
这题如果不会做,就等于没学过C++
吧……
注意:请不要将Won
和Lost
写成Yes
和No
!
#include <cstdio>
using namespace std;
int main(int argc, char** argv)
{
char a = getchar(), b = getchar(), c = getchar();
puts((a == b && b == c)? "Won": "Lost");
return 0;
}
一个人要按顺序喝杯酒。第杯酒有毫升,酒精含量为()。
他喝的酒精总含量超过毫升时将会醉酒。(如果正好喝了毫升也不会喝醉)
他喝完第几杯酒后会第一次喝醉?
如果这个人在喝完第杯酒后第一次喝醉,输出。如果他直到最后都没有喝醉,输出-1
。
2 15
200 5
350 3
2
第杯酒含有毫升的酒精。
第杯酒含有毫升的酒精。
他喝完第二杯酒后一共喝了毫升的酒精,高于最大可承受量(),所以我们输出。
2 10
200 5
350 3
2
当他正好喝了毫升的酒精时,他还没有喝醉。
3 1000000
1000 100
1000 100
1000 100
-1
他似乎免疫酒精了……
第杯酒中酒精的量是,即。
这时,我们将题目转化一下,就是求符合的最小。所以,我们很容易想到在输入的同时计算,当它大于时输出。
但是,这里有一个问题。
由于C++
存在浮点数精度误差,所以这样算可能会得到错误的结果。
例如,下面一组数据:(数据来自AtCoder官方题解)
3 13
30 13
35 13
35 13
在很多环境下,程序会输出3
,而这组数据的正确答案是-1
。所以,我们考虑把前面的式子转化一下。
这时,我们就可以用前面的思路写代码了。
#include <cstdio>
using namespace std;
int main(int argc, char** argv)
{
int n, x;
scanf("%d%d", &n, &x);
x *= 100;
for(int i=1; i<=n; i++)
{
int v, p;
scanf("%d%d", &v, &p);
x -= v * p;
if(x < 0)
{
printf("%d\n", i);
return 0;
}
}
puts("-1");
return 0;
}
Takahashi面前有个碗排成一行,从左数第个碗中装有个橙子。
他会选出以个符合下列所有条件的三元组:
然后,他在第个到第个盘子(包含和)中每个吃掉个橙子。
通过选择三元组以最大化此数目,Takahashi最多可以吃多少个橙子?
输出一行,即Takahashi最多可以吃的橙子的个数。
6
2 4 4 9 4 9
20
他可以选择,能吃个橙子。
6
200 4 4 9 4 9
200
他可以选择,能吃个橙子。
很明显,如果我们选择,则Takahashi能吃个橙子。
我们要让吃的橙子个数最大化,那么选择后,必定为。这样一来,我们就可以枚举,并记录作为,最终输出最小的。
这个算法的时间复杂度为。
#include <cstdio>
#define maxn 10005
#define INF 2147483647
using namespace std;
int a[maxn];
inline void setmin(int& a, int b) {if(b < a) a = b;}
inline void setmax(int& a, int b) {if(b > a) a = b;}
int main(int argc, char** argv)
{
int n;
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%d", a + i);
int ans = 0;
for(int l=0; l<n; l++)
{
int m = INF;
for(int r=l; r<n; r++)
{
setmin(m, a[r]);
setmax(ans, (r - l + 1) * m);
}
}
printf("%d\n", ans);
return 0;
}
给你个字符串,每个是AND
或者OR
。
找到符合下列条件的长度为的元组的数量:
AND
,;如果为OR
,则。在这里,表示与,表示或。
输出答案。
略,请自行前往AtCoder查看
其实,题目解释得有些复杂了 😦
理解时例如样例:
我们将定义为本题的答案,则
这时,我们就可以在输入时处理答案了。
#include <cstdio>
using namespace std;
int main(int argc, char** argv)
{
int n;
scanf("%d", &n);
char c[4];
long long ans = 1LL, x = 1LL;
while(n--)
{
x <<= 1LL;
scanf("%s", c);
if(c[0] == 'O')
ans ^= x; // 等同于ans += x;这样写速度更快
}
printf("%lld\n", ans);
return 0;
}