这次比赛就过了五个签到题,真的菜。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
“伟大的勇栗兔栽栗女王,所有栗子看到您都不寒而栗,但也非常尊重您。您骑着威风凛凛的小白兔,带领栗子们奋勇前行。伟大史诗告诉我们,烈兔勇栗从大草原飞奔出来,
冲在每场战争的前线——无论您在哪里,他们都能找到您。骑小白兔飞驰吧,凶猛的女王,但愿您有真正的朋友和软弱的敌人。”
今天,冰雪聪明的栗酱终于玩到了她梦寐很久的文明游戏。
不过作为一个萌新,兔头獐脑的栗酱自然不愿意第一次玩就遇到一个尴尬的结局,于是希望通过你来寻找一个完美结局。
已知游戏结束前场上有n个国家,第i个国家有ai块土地,任意2个国家若是想建立外交关系,则需要互相在对方的一块土地上建立一个大使馆。
一块土地只能建立一个大使馆,若一个国家和其他国家存在外交关系,则需要征用一块己方土地作为备用大使馆。
完美结局的定义是:找到最多数量的国家,使他们相互之间存在外交关系。
冲在每场战争的前线——无论您在哪里,他们都能找到您。骑小白兔飞驰吧,凶猛的女王,但愿您有真正的朋友和软弱的敌人。”
今天,冰雪聪明的栗酱终于玩到了她梦寐很久的文明游戏。
不过作为一个萌新,兔头獐脑的栗酱自然不愿意第一次玩就遇到一个尴尬的结局,于是希望通过你来寻找一个完美结局。
已知游戏结束前场上有n个国家,第i个国家有ai块土地,任意2个国家若是想建立外交关系,则需要互相在对方的一块土地上建立一个大使馆。
一块土地只能建立一个大使馆,若一个国家和其他国家存在外交关系,则需要征用一块己方土地作为备用大使馆。
完美结局的定义是:找到最多数量的国家,使他们相互之间存在外交关系。
输入描述:
第一行一个数T,表示有T组数据。对于每组数据,第一行输入一个数n,表示国家的数量,接下来一行输入n个数,a 1,a 2,…,a n,其中a i表示第i个国家拥有的土地数量。每两个相邻的数之间用空格隔开。
输出描述:
对于每一个询问,输出一个数,即完美结局下,相互建立外交关系的国家数量。
示例1
输入
2 5 2 2 2 2 2 10 8 6 5 9 2 7 10 3 3 9
输出
2 6
说明
对于第一个样例: 最多只能找到2个国家,使他们互相建立外交关系。 对于第二个样例: 第1,2,4,6,7,10个国家间可互相建立外交关系,最多数量为6。
备注:
T≤101≤n≤10001≤a i≤n
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cstdio>
using
namespace
std;
bool
cmp(
int
a,
int
b)
{
return
a > b;
}
int
main()
{
int
T;
scanf
(
"%d"
, &T);
while
(T--)
{
int
n;
scanf
(
"%d"
, &n);
int
a[1001];
for
(
int
i = 1; i <= n; i++)
scanf
(
"%d"
, &a[i]);
sort(a+1, a + n+1, cmp);
for
(
int
i = 1; i <= n; i++)
{
if
(a[i] <i) //a[i]只需大于i,便可与前i个国家建立外交关系并留下一块空地;
{
printf
(
"%d\n"
, i-1);
break
;
}
}
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
栗酱有一个长度为n的数列A,一个长度为m的数列B,现在询问A中有多少个长度为m的连续子序列A',
满足(a' 1+b 1)%k = (a' 2+b 2)%k = …… = (a' m + b m)%k。
满足(a' 1+b 1)%k = (a' 2+b 2)%k = …… = (a' m + b m)%k。
输入描述:
第一行一个数T,表示有T组数据。对于每组数据,第一行三个整数,n, m, k。第一行输入n个数, a 1,a 2,…,a n, 表示A数列中的数,第二行输入m个数, b 1,b 2,…,b m, 表示B数列中的数。
输出描述:
每一组数据输出一行,满足条件的连续子序列数量。
示例1
输入
2 3 2 5 7 8 7 8 7 3 2 5 7 8 9 8 7
输出
1 2
备注:
T≤15,2≤m≤n≤2×10 5,1≤a i,b i,k≤10 9
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
int
a[200001],b[200001];
using
namespace
std;
int
main()
{
int
T;
scanf
(
"%d"
,&T);
while
(T--)
{
int
n,m,k;
scanf
(
"%d%d%d"
,&n,&m,&k);
for
(
int
i=1;i<=n;i++)
scanf
(
"%d"
,&a[i]);
for
(
int
j=1;j<=m;j++)
scanf
(
"%d"
,&b[j]);
int
s=0;
for
(
int
i=1;i<=n-m+1;i++)
{
int
t=(a[i]+b[1])%k;
int
wh=1;
for
(
int
j=i+1; ;j++)
{
if
((a[j]+b[wh+1])%k==t&&wh<m) wh++;
else
break
;
}
if
(wh==m)s++;
}
printf
(
"%d\n"
,s);
}
return
0;
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
有不等式
y⋅x3≤ n,已知y为正整数,x为大于1的正整数,问当x和y的解数量刚好为m的时候n的最小值,如果不存在输出 -1。
输入描述:
多组数据读入。 每组数据一个数字m,如题所示。
输出描述:
每组数据输出一行,输出答案。
示例1
输入
1
输出
8
说明
当方案恰好只有一种的时候,n的最小值为8,此时y=1,x=2。
备注:
1 ≤ m ≤ 1016
#include<iostream>
#include<string.h>
#include<cstdio>
#include<algorithm>
#include<cmath>
using
namespace
std;
int
main( )
{
long
long
m;
while
(
scanf
(
"%lld"
, &m) != EOF)
{
long
long
l = 2, r = 9*m;
while
(l <= r)
{
long
long
p = (l + r) / 2;
long
long
s = 0;
for
(
long
long
i = 2; i <= 1000000; i++)
{
if
(p < i*i*i)
break
;
s = s + p /(i*i*i);
}
if
(s >= m) r = p-1;
else
l = p + 1;
}
long
long
sum = 0;
for
(
long
long
i = 2; i <= 1000000; i++)
{
if
(l < i*i*i)
break
;
sum = sum + l / (i*i*i);
}
if
(sum == m)
printf
(
"%lld\n"
, l);
else
printf
(
"-1\n"
);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
小周最近在玩一款二战游戏,他因而对曲射炮的轨迹产生了很大的兴趣,但是在尝试计算后,小周发现这个问题并不是那么简单,他因而来请教你这位计算机高手,请你来帮帮他吧。问题大致可描述为,在二维平面的原点(0,0)处有一曲射炮,炮口可沿任意方向发出初速度为v的炮弹,小周想要把炮弹投射到点(x,y)处,现在你需要帮助小周得出炮口与地面夹角的弧度。为使问题简化,我们忽略空气阻力,x轴沿水平方向分布。设重力加速度g=9.8。
输入描述:
第一行为一个整数T,表示输入的数据组数。 每组数据对应一行输入, 依次为三个正整数x,y,v,含义如题面所示。
输出描述:
每组数据输出一行,如果无论如何挑战炮口与地面夹角都无法将炮弹投射这目标处,输出“NO SOLUTION.”(不包括引号),否则从小到大输出所有可能的弧度(均四舍五入至小数点后5位,如果有两个解四舍五入至小数点后5位后相同,只视为一个解),中间用一个空格分隔。
示例1
输入
4 45 56 78 32 78 55 33 33 25 12 25 25
输出
0.93196 1.53271 1.24254 1.50973 NO SOLUTION. 1.25456 1.43951
备注:
1≤T≤200, 0 < x ≤ 10000 0 < y ≤ 10000 0 < v ≤ 20000
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#include<cmath>
using
namespace
std;
int
main()
{
int
T;
scanf
(
"%d"
,&T);
while
(T--)
{
int
x,y,v;
scanf
(
"%d%d%d"
,&x,&y,&v);
double
a=9.8*x*x/(2.00*v*v); 设一个角度,把所有变量带入,最后转化成一个关于tan()的一元二次方程;
double
b=-1.00*x;
double
c=9.8*x*x/(2.00*v*v)+1.00*y;
if
(b*b-4*a*c<0)
printf
(
"NO SOLUTION.\n"
);
else
if
(b*b-4*a*c==0)
{
double
h1=(-b+
sqrt
(b*b-4*a*c))/(2.00*a); 直接求根
printf
(
"%.5lf\n"
,
atan
(h1));
}
else
{
double
h1=(-b+
sqrt
(b*b-4*a*c))/(2.00*a);
double
h2=(-b-
sqrt
(b*b-4*a*c))/(2.00*a);
if
(h1>h2) swap(h1,h2);
printf
(
"%.5lf %.5lf\n"
,
atan
(h1),
atan
(h2));
}
}
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
栗酱突发闲心,玩了一会儿仙剑。
她玩的这个版本的仙剑非常简单,打架的时候,每次只有一个小怪,栗酱也只有一个主角,主角在每回合开始先攻击小怪,小怪有a点生命值,主角有b点生命值,小怪有c点攻击力,主角有d点攻击力,每次攻击都会造成确确实实的攻击力的伤害。
生命值小于等于零时就会挂掉。
栗酱发现好像战斗一开始就已经能知道结果了,请你帮她算一下,这样她就可以挂机去做更有趣的事了。
数据保证攻击力和初始生命值均大于等于1。
输入描述:
第一行一个数据组数T。 每组数据一行4个整数a,b,c,d,数据之间用一个空格隔开。
输出描述:
对于每组数据每行给出一个"Yes"或"No",代表栗酱能否取得胜利。
示例1
输入
2 1 2 3 4 84 3 23 6
输出
Yes No
说明
样例1解释: 第一回合时栗酱先发动攻击,小怪的生命值:1−4≤0,所以栗酱取得了胜利。
备注:
T≤1000, 1≤a,b,c,d≤1000
#include<iostream>
#include<cstdio>
using
namespace
std;
int
main()
{
int
T; cin >> T;
while
(T--)
{
int
a, b, c, d;
cin >> a >> b >> c >> d;
while
(1)
{
a = a - d;
if
(a <= 0)
break
;
b = b - c;
if
(b <= 0)
break
;
}
if
(a <= 0) cout <<
"Yes"
;
else
cout <<
"No"
;
cout << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
栗酱一个人闲得无聊的时候总是会一个人玩一些有趣的游戏。
有一天,她在机房里看见了一张图,可能是做acm的学长留下的:
栗酱想知道每一个数字,横着竖着分别有几根火柴呢?(由于火柴商偷工减料,我们认定,只要存在棍子,它就是火柴!)
输入描述:
第一行一个数据组数T。 每组数据一行给出一个数字'a'。
输出描述:
对于每个数字给出两个值,分别是横着有几根火柴,竖着有几根火柴。
示例1
输入
1 0
输出
2 4
#include<iostream>
#include<cstdio>
#include<iomanip>
using
namespace
std;
int
main()
{
int
a[10][2];
a[0][0] = 2, a[0][1] = 4;
a[1][0] = 0, a[1][1] = 2;
a[2][0] = 3, a[2][1] = 2;
a[3][0] = 3, a[3][1] = 2;
a[4][0] = 1, a[4][1] = 3;
a[5][0] = 3, a[5][1] = 2;
a[6][0] = 3, a[6][1] = 3;
a[7][0] = 1, a[7][1] = 2;
a[8][0] = 3, a[8][1] = 4;
a[9][0] = 3, a[9][1] = 3;
int
T; cin >> T;
while
(T--)
{
int
n; cin >> n;
cout << a[n][0] <<
' '
<< a[n][1] << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
自从学姐拒绝了qwb之后,qwb开始了疯狂的骚扰。qwb来到了一个公共电话亭,他摸摸口袋只有n元钱。
已知该公用电话的规则是,前3分钟一共收费x元(不到3分钟也要收x元),超过3分钟每分钟收费y元(不到1分钟也要收y元)。(先扣钱再打电话。)
那么问题来了,qwb最多骚扰学姐几分钟?(假设学姐不会挂qwb电话)
已知该公用电话的规则是,前3分钟一共收费x元(不到3分钟也要收x元),超过3分钟每分钟收费y元(不到1分钟也要收y元)。(先扣钱再打电话。)
那么问题来了,qwb最多骚扰学姐几分钟?(假设学姐不会挂qwb电话)
输入描述:
第一行输入一个整数T,表示数据组数, 接下来T行,每行三个整数n,x,y 。
输出描述:
每行输出一个整数,表示qwb最多骚扰学姐的分钟数。
示例1
输入
2 10 5 1 5 4 1
输出
8 4
备注:
1≤T≤10000, 1≤n,x,y≤10000
#include<iostream>
#include<cstdio>
using
namespace
std;
int
main()
{
int
T; cin >> T;
while
(T--)
{
int
n, x, y;
cin>>n>>x>>y;
int
sum = 0;
if
(n >= x)
{
sum = 3;
if
(x >= 3 * y)
sum += (n - x) / y;
else
sum =( n / x)*3 + (n - (n / x)*x) / y;
}
cout << sum << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
qwb闲着无聊,就开始拆自己的电脑,他发现主板上某个元件可以视作如图所示无限长的电路。已知该电路由三种不同的电阻r
1,r
2,r
3构成,他想要计算ab之间的电阻。
输入描述:
第一行输入一个整数T,表示数据组数,接下来T行,每行三个整数r 1,r 2,r 3。
输出描述:
每组数据输出一行,保留两位小数。
示例1
输入
2 1 1 1 1 2 3
输出
2.73 5.46
备注:
T≤10 4,1≤r 1,r 2,r 3≤10 4
#include<iostream>
#include<cstdio>
#include<iomanip>
using
namespace
std;
int
main()
{
int
T; cin >> T;
while
(T--)
{
double
r1, r2, r3;
cin >> r1 >> r2 >> r3;
double
R = r2*1.00;
for
(
int
i = 1; i <= 1000; i++)
{
R = 1.00*r2*(r1 + r3 + R) / (r2 + r1 + r3 + R);
}
cout << setiosflags(ios::fixed) << setprecision(2) << r1 + r3 + R << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
栗酱这次遇到了一个大麻烦,她手里只有一张大钞,面值为A元,但是现在临时需要花费B块钱了。
她的花费非常紧急,所以她来到一个小卖部来兑,可是小卖部的老板态度极差,拒绝了栗酱的直接兑换请求。
栗酱没有办法,周边也没有别的店,栗酱只好在店里强行花费一些钱来获取这个零散的B块钱了。
但是这个店家十分奇怪,在知道栗酱需要B块钱后,会尽可能地不找给栗酱相应的钱,以获取利益。栗酱赶时间,花多少钱反而不那么重要了,请帮栗酱算一下,只买一次东西,一定能得到B块零钱的最少花费是多少。(货币的面值仅存在这些取值{0.01,0.02,0.05,0.10,0.50,1.00,2.00,5.00,10.00,20.00,50.00,100.00})
输入描述:
多组数据,数据第一行T表示数据组数。 每组数据一行,A,B分别代表栗酱当前的大钞和需要的零钱。
输出描述:
每组数据一行,输出最少花费。
示例1
输入
2 0.05 0.01 0.10 0.05
输出
0.02 0.01
说明
第一个样例: 如果付0.01块,老板会找你两个0.02。 花0.02老板就没办法了,只能找你一个0.02,一个0.01,或三个0.01
备注:
T≤100, a>b, a,b∈{0.01,0.02,0.05,0.10,0.50,1.00,2.00,5.00,10.00,20.00,50.00,100.00}
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
using
namespace
std;
int
main()
{
int
T;
scanf
(
"%d"
, &T);
while
(T--)
{
double
a, b;
scanf
(
"%lf%lf"
, &a, &b);
if
(b == 0.01)
{
if
(a == 0.02)
printf
(
"0.01\n"
);
else
printf
(
"%.2lf\n"
, a - 0.03);
}
else
if
(b == 1.00)
{
if
(a == 2.00)
printf
(
"0.01\n"
);
else
printf
(
"%.2lf\n"
, a - 3.99);
}
else
if
(b == 10.00)
{
if
(a == 20.00)
printf
(
"0.01\n"
);
else
printf
(
"%.2lf\n"
, a - 39.99);
}
else
printf
(
"0.01\n"
);
}
return
0;
}