一件商品原价为元,现价为元,现价优惠了百分之几?
输出答案(不加%
)。最大允许误差为。
输出 | ||
---|---|---|
这里答案可以直接使用求得结果。
#include <cstdio>
#include <tuple>
using namespace std;
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%.6lf", (a - b) * 100.0 / a);
return 0;
}
Takahashi想要买一件商品,它叫Play Snuke。
有家商店售卖Play Snuke。Takahashi从家到第个商店需要分钟,这家商店的卖价是
元且库存件Play Snuke。
现在,Takahashi想要去这家店中的某一家并且买一个Play Snuke。
但是,每家店的Play Snuke都会在第分钟被买掉一个。
判断Takahashi到底能不能买到Play Snuke。如果能,请输出他最少要花的钱。
如果Takahashi能买到Play Snuke,输出他最少要花的钱数;否则,输出-1
。
3
3 9 5
4 8 5
5 7 5
8
Takahashi可以去号商店,需要花元。
3
5 9 5
6 8 5
7 7 5
-1
无论Takahashi去哪个商店,到达时Play Snuke都卖光了,因此输出-1
。
10
158260522 877914575 602436426
24979445 861648772 623690081
433933447 476190629 262703497
211047202 971407775 628894325
731963982 822804784 450968417
430302156 982631932 161735902
880895728 923078537 707723857
189330739 910286918 802329211
404539679 303238506 317063340
492686568 773361868 125660016
861648772
对于第个商店,如果,则Takahashi到达时商品没有卖光,这时取最大的输出即可。如果没有符合条件,则输出-1
。
#include <cstdio>
#define maxn 100005
#define INF 2147483647
using namespace std;
int main()
{
int n, ans = INF;
scanf("%d", &n);
for(int i=0; i<n; i++)
{
int a, p, x;
scanf("%d%d%d", &a, &p, &x);
if(x > a && p < ans)
ans = p;
}
if(ans == INF) puts("-1");
else printf("%d\n", ans);
return 0;
}
给你一个整数。有多少个在~之间的整数不能表示为(和都是不少于的整数)?
输出答案。
输出 | |
---|---|
其实能表示为的整数并不多。我们只要枚举所有的(),再把它的不超过的所有整数次方放入一个set
中(去重),再用即可。
#include <cstdio>
#include <cmath>
#include <set>
using namespace std;
using LL = long long;
set<LL> s;
int main()
{
LL n;
scanf("%lld", &n);
LL tmp = sqrt(n);
for(LL a=2; a<=tmp; a++)
{
LL res = a; // res = a ^ b
while((res *= a) <= n)
s.insert(res);
}
printf("%lld\n", n - s.size());
return 0;
}
略,请自行前往AtCoder查看
输出一行,即Takahashi的胜率(不要使用百分数,请使用到之间的小数)。最大允许误差。
输出 | |||
---|---|---|---|
1144# |
2233# |
||
9988# |
1122# |
||
1122# |
2228# |
||
3226# |
3597# |
(参考AtCoder官方题解)
对于每一对,Takahashi有卡牌且Aoki有卡牌的总组合数为:
枚举每一对,拿最终的结果除以即可。
#include <cstdio>
using namespace std;
using LL = long long;
char s[7], t[7];
int score(const char* cards)
{
int cnt[10];
for(int i=0; i<10; i++) cnt[i] = i;
for(int i=0; i<5; i++)
cnt[cards[i] - '0'] *= 10;
int res = 0;
for(int x: cnt) res += x;
return res;
}
int main()
{
int k;
scanf("%d%s%s", &k, s, t);
int cnt[10];
for(int i=1; i<10; i++) cnt[i] = k;
for(int i=0; i<4; i++)
cnt[s[i] - '0'] --,
cnt[t[i] - '0'] --;
LL win = 0LL;
for(int x=1; x<10; x++)
if(cnt[x])
{
s[4] = '0' + x;
int sscore = score(s);
for(int y=1; y<10; y++)
if(cnt[y])
{
t[4] = '0' + y;
if(sscore > score(t))
win += cnt[x] * LL(cnt[y] - (x == y));
}
}
LL tmp = 9LL * k - 8LL;
printf("%.8lf\n", double(win) / tmp / double(tmp - 1LL));
return 0;
}