虽然这次题目很水,但毕竟是人生中人生中第一次ak,还是值得写写博客的
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
现在有一个N*M的矩形星图。其中包括恒星和黑洞。恒星可以向上、下、左、右发射光束,且允许光束从其中穿过;黑洞会吸收所有经过的光束。
若一颗恒星向上、下、左、右发射光束,你能告诉我,该光束能否避免被黑洞吸收,进入星图之外的区域么?
输入描述:
单组输入。第一行三个正整数N,M,Q(1 <= N,M <= 1000,1 <= Q <= 1000000),分别表示矩阵的行列,以及询问的个数,询问之间相互独立。 然后一个N*M的矩阵,由’*’和’#’构成,表示星图。’*’表示恒星,’#’表示黑洞。 最后Q行,表示Q个询问,每行两个正整数x,y(1 <= x <= N, 1 <= y <= M)表示发光恒星的位置(从上往下数第x行,从左往右数第y列,且保证该位置一定是恒星)和一个字符p(p∈{‘L’, ‘R’, ‘D’, ‘U’},’R’表示向右;’L’表示向左;’D’表示向下’;’U’表示向上)表示该恒星产生光束的方向。
输出描述:
一共Q行。对于每个询问,若该恒星发出的光束能够进入星图之外的区域则输出“YES”;否则输出“NO”。(不包含引号)
示例1
输入
4 5 5 **##* ***** *#*#* ##**# 2 3 D 2 3 U 1 5 R 4 4 U 3 1 U
输出
YES NO YES NO YES
若a[i][j]=='*',只需判断两种情况,假设光束方向向上,则若i-1<0即a[i][j]已在边界,则可以出去,否则,判断a[i-1][j],
若a[i-1][j]可以出去,则a[i][j]也一定能出去,反之,则一定不能出去。因此只需四个方向分开讨论,当向上时,a[i][j]的
状态由a[i-1][j]得到。向下时,a[i][j]的状态由a[i+1][j]得到,因为要从i+1递推i,所以,循环从大到小进行,左右方向亦然。
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cstdio>
char
a[1002][1002];
int
d[4][2] = { { -1,0 },{ 1,0 },{ 0,-1 },{ 0,1 } };
bool
b[1002][1002][4];
using
namespace
std;
int
main()
{
int
n, m, q;
scanf
(
"%d%d%d"
, &n, &m, &q);
for
(
int
i = 0; i < n; i++)
scanf
(
"%s"
, a[i]);
memset
(b, 0,
sizeof
(b));
for
(
int
k = 0; k < 4; k++)
{
if
(k == 0 || k == 2)
{
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < m; j++)
{
if
(a[i][j] ==
'*'
)
{
int
x = i + d[k][0];
int
y = j + d[k][1];
if
(x < 0 || x >= n || y < 0 || y >= m || b[x][y][k] == 1)
{
b[i][j][k] = 1;
}
}
}
}
}
else
{
for
(
int
i = n - 1; i >= 0; i--)
{
for
(
int
j = m - 1; j >= 0; j--)
{
if
(a[i][j] ==
'*'
)
{
int
x = i + d[k][0];
int
y = j + d[k][1];
if
(x < 0 || x >= n || y < 0 || y >= m || b[x][y][k] == 1)
{
b[i][j][k] = 1;
}
}
}
}
}
}
while
(q--)
{
int
tx, ty, tz;
char
w[5];
scanf
(
"%d%d%s"
, &tx, &ty, w);
tx--, ty--;
if
(w[0] ==
'U'
) tz = 0;
else
if
(w[0] ==
'D'
) tz = 1;
else
if
(w[0] ==
'L'
) tz = 2;
else
tz = 3;
if
(b[tx][ty][tz])
printf
(
"YES\n"
);
else
printf
(
"NO\n"
);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
我们定义“好数”:对于一个正整数,若它只有0~9中的一种数字构成,我们就称其为好数。现在给你一个正整数,请判断它是否为好数。
输入描述:
单组输入。一个正整数x(1<= x <= 10100000)
输出描述:
若该数x是“好数”则输出“YES”。否则输出“NO”。(没有双引号)
示例1
输入
7777777777777777777777777777777777777888888888888888
输出
NO
示例2
输入
5555555555555555555555555555555555555555
输出
YES
示例3
输入
16146483543484318146436841468
输出
NO
水题
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
mod = 1000000007;
char
a[100003];
using
namespace
std;
int
main()
{
cin >> a;
int
len =
strlen
(a);
bool
bb = 0;
for
(
int
i = 1; i < len; i++)
{
if
(a[i] != a[i - 1])
{
bb = 1;
break
;
}
}
if
(bb == 1)
printf
(
"NO\n"
);
else
printf
(
"YES\n"
);
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
自从ZZZZone吃完糖果后,他开始改吃巧克力了,他每天想吃n个巧克力增在甜蜜值,他决定早上吃K个巧克力,晚上吃n - K个巧克力,每个巧克力在早上吃和在晚上吃的甜蜜值是不一样的,他想让自己得到的甜蜜值最大,并想知道最大是多少。
请你编程帮助他。
输入描述:
第一行包含两个数n,K表示每天要吃的巧克力数量和要在早上吃的数量。(n <= 100000, K <= n) 第二行包含n个整数Ai(1 <= i <= n) 表示个第i个巧克力在早上吃可得到的甜蜜值 (Ai <= 100000) 第三行包含n个整数Bi(1 <= i <= n) 表示个第i个巧克力在晚上吃可得到的甜蜜值 (Bi <= 100000)
输出描述:
输出仅一行包含一个整数表示ZZZZone能获得的最大甜蜜值。
示例1
输入
2 1 3 6 2 8
输出
11
说明
早上吃第一个巧克力得到3甜蜜值,晚上吃第2个巧克力得到8的甜蜜值,所以最大可得到11的甜蜜值。
假设全部在晚上吃,得到甜蜜度s,设c[i]=b[i]-a[i],c[i]可表示若第i个糖果在早上吃则损失了c[i]的甜蜜度,对c[i]排序,取最小的k个数
s减去这些数即可。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
a[100002], b[100002], c1[100002],c2[100002];
using
namespace
std;
int
main()
{
long
long
n, k;
scanf
(
"%lld%lld"
, &n, &k);
for
(
int
i = 1; i <= n; i++)
scanf
(
"%lld"
, &a[i]);
for
(
int
i = 1; i <= n; i++)
scanf
(
"%lld"
, &b[i]);
int
q = 0, w = 0;
long
long
s = 0;
for
(
int
i = 1; i <= n; i++)
{
s += b[i];
c1[i] = b[i] - a[i];
}
sort(c1 + 1, c1 + 1 + n);
for
(
int
i = 1; i <= k; i++)
s -= c1[i];
printf
(
"%lld\n"
, s);
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
ZZZZone是一个特别喜欢甜食的人。有一天,他得到了n个糖果盒子,每个盒子里都有无穷个糖果,每个盒子里的糖果都有固定的甜蜜值。
为了获得更多的甜蜜值,ZZZZone列出了m个方案:每个方案中都有一个L 、R,ZZZZone会从第L个盒子到第R个盒子这连续的R - L + 1 个盒子中,每个盒子里拿出一颗糖吃掉,来获得甜蜜值。
每个方案最多只能实现一次,当然也可以不实现,那么,ZZZZone可以获得的最大甜蜜值是多少?
输入描述:
第一行,一个整数n,表示有n个糖果盒子 (n <= 10000) 第二行包含n个整数,表示从下标为1到n的盒子的甜蜜值(-10000 <= wi <= 10000) 第三行包含一个整数m表示方案数 (m <= 10000) 接下来m行,每行两个整数L, R (1 <= L, R <= n)
输出描述:
输出一行,包含一个整数表示最大的甜蜜值.
示例1
输入
5 1 -2 3 -4 5 2 1 5 1 2
输出
3
说明
第一个方案从1到5可得到3的甜蜜值,第二个可以得到-1的甜蜜值(此时当然不会选这个方案),所以最大可得到3的甜蜜值
水题
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
using
namespace
std;
int
main()
{
long
long
n;
while
(
scanf
(
"%lld"
,&n)!=EOF)
{
long
long
a[10002];a[0]=0;
for
(
long
long
i=1;i<=n;i++)
{
scanf
(
"%lld"
,&a[i]);
a[i]+=a[i-1];
}
long
long
sum=0,m;
scanf
(
"%lld"
,&m);
while
(m--)
{
long
long
L,R;
scanf
(
"%lld%lld"
,&L,&R);
if
(L>R) swap(L,R);
long
long
t=a[R]-a[L-1];
if
(t>0) sum+=t;
}
printf
(
"%lld\n"
,sum);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
一天小明同学拿着m种颜色的油漆去涂刷n块格子,在涂刷的过程中他发现有很多种涂色方案,并很快的算出了答案,然后他发现如果涂好颜色的格子中只要存在某两个相邻的格子颜色一样,他就会感到开心,他想知道有多少种让他开心的涂刷方案。
输入描述:
输入仅包含一行,包含两个数n,m分别表示格子数和颜色数。(1 <= n <= 1e12, 1 <= m <= 1e12)
输出描述:
输出一行包含一个整数,让小明开心的涂刷方案数。 答案对1000000007取模
示例1
输入
3 2
输出
6
说明
一共有(1, 1, 2), (2, 1, 1), (2, 2, 1), (1, 2, 2), (1, 1, 1), (2, 2, 2) 这6种方案
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
mod = 1000000007;
using
namespace
std;
long
long
quick(
long
long
n,
long
long
m)
{
long
long
r = 1;
while
(m)
{
if
(m % 2 == 1)
r = (r%mod)*(n%mod) % mod;
n = (n%mod)*(n%mod) % mod;//n*n的值可能会超过long long 的范围,要取模再取模。
m = m / 2;
}
return
r;
}
int
main()
{
long
long
n, m;
while
(
scanf
(
"%lld%lld"
, &n, &m) != EOF)
{
if
(m == 1)
{
printf
(
"0\n"
);
continue
;
}
long
long
t=quick(m, n);
long
long
f = quick(m - 1, n - 1);
f = (f%mod)*(m%mod)%mod;
t+=mod;//防止出现取模后t<f的情况
printf
(
"%lld\n"
,(t - f)%mod);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
饿了很久的XzzF终于忍不住了,出去找了一份兼职。他来到一个射击训练营,他的工作呢,就是数那些运动员打的靶子,然后把运动员的数据报给主教练,方便主教练选出优秀的运动员出去参加比赛。
数靶这个活儿吧!显然是计件的,简单来说就是数的多,报酬就越高。XzzF想写个程序来做数靶这件事,不仅快,而且报酬高,岂不很nice!
靶子可以看做是一个13*13的矩阵,相应的环数对应矩阵里的某些区域,如下图所示:
1 1 1 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 4 4 4 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 3 3 3 3 3 3 3 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1
而运动员所打的靶,则看做一个13 * 13的且只包含 '.' 和 '#' 字符矩阵,'#'表示被击中,而 '.' 则表示没被击中。
现在XzzF知道运动员射击的次数N,以及射击后的靶子。(详情可见样例)主教练想知道运动员的
平均射击环数(保留两位小数)。
然而XzzF已经饿到大脑不能正常工作了,所以,请你完成这个数靶程序。
输入描述:
第一行一个整数N(1 <= N <= 169),表示射击的次数,接着输入一个13 * 13的字符矩阵,里面只包含 '.' 和 '#','#'表示被击中,而 '.' 则表示没被击中。(保证'#'恰好有N个) 多组输入,N=0表示输入结束。
输出描述:
该运动员的平均射击环数(保留两位小数)。
示例1
输入
2 ............. ............. ............. ............. ............. ............. ......#...... ...#......... ............. ............. ............. ............. ............. 0
输出
3.50
说明
射中3环一次,4环一次,平均值为3.50。
又一水题
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
mod = 1000000007;
int
a[13][13] =
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,
1,2,2,2,2,2,2,2,2,2,2,2,1,
1,2,2,2,2,2,2,2,2,2,2,2,1,
1,2,2,3,3,3,3,3,3,3,2,2,1,
1,2,2,3,3,3,3,3,3,3,2,2,1,
1,2,2,3,3,4,4,4,3,3,2,2,1,
1,2,2,3,3,4,4,4,3,3,2,2,1,
1,2,2,3,3,4,4,4,3,3,2,2,1,
1,2,2,3,3,3,3,3,3,3,2,2,1,
1,2,2,3,3,3,3,3,3,3,2,2,1,
1,2,2,2,2,2,2,2,2,2,2,2,1,
1,2,2,2,2,2,2,2,2,2,2,2,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,
};
using
namespace
std;
int
main()
{
int
n;
while
(cin >> n&&n)
{
char
b[13][13];
for
(
int
i = 0; i < 13; i++)
cin >> b[i];
int
sum = 0;
for
(
int
i = 0; i < 13; i++)
{
for
(
int
j = 0; j < 13; j++)
{
if
(b[i][j] ==
'#'
)
sum += a[i][j];
}
}
printf
(
"%.2lf\n"
, 1.00*sum / n);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld题目描述
中国文化的五行:金、木、水、火、土相生相克, 一天Alice和Bob玩起了卡牌游戏。卡牌包含5种类型Jin,Mu,Shui,Huo,Tu,分别代表金、木、水、火、土。
金克木,木克土,土克水,水克火,火克金。游戏规则如下:
两人玩n轮,每轮各自抽取一张卡牌,如果其中一个人的牌克制另一个人的牌那么这个人得3分,另一个人得0分。没有克制关系两人都得1分。最后得分高的获胜。输入描述:
第一行包含一个整数n(1 <= n <= 1000),表示两人游戏轮数。 接下来n行包含两个字符串,分别表示Alice,Bod抽到的卡牌类型 (本题为单组测评)输出描述:
输出仅一行,如果Alice获胜输出“Alice”,Bob获胜输出“Bob”,平局输出“Draw” (本题为单组测评)示例1输入
3 Jin Mu Mu Jin Huo Huo输出
Draw
水题
#include<iostream>
#include<string>
using
namespace
std;
int
main()
{
int
n;
while
(cin >> n)
{
int
q = 0, w = 0;
for
(
int
i = 1; i <= n; i++)
{
string a, b;
cin >> a >> b;
if
(a ==
"Jin"
)
{
if
(b ==
"Mu"
)
q += 3;
else
if
(b ==
"Huo"
)
w += 3;
}
else
if
(a ==
"Mu"
)
{
if
(b ==
"Tu"
)
q += 3;
else
if
(b ==
"Jin"
)
w += 3;
}
else
if
(a ==
"Shui"
)
{
if
(b ==
"Huo"
)
q += 3;
else
if
(b ==
"Tu"
)
w += 3;
}
else
if
(a ==
"Tu"
)
{
if
(b ==
"Shui"
)
q += 3;
else
if
(b ==
"Mu"
)
w += 3;
}
else
{
if
(b ==
"Jin"
)
q += 3;
else
if
(b ==
"Shui"
)
w += 3;
}
}
if
(q > w)
cout <<
"Alice"
;
else
if
(q < w)
cout <<
"Bob"
;
else
cout <<
"Draw"
;
cout << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld题目描述
XzzF is in English class, His teacher told them a story:At noon the rush hour had passed. There were few guests in the snack bar. It was not crowded.When the boss was about to take a break to read a newspaper, in came an old lady and a little boy.“How much money is a bowl of beef soup?” the grandma sat down, counted the money in her purse and ordered a bowl of beef soup. The grandma pushed the bowl to the little boy, who swallowed his saliva , looking at his grandma and saying, "Grandma, did you really have lunch?" "Of course." His grandma chewed a piece of radish slowly.Very quickly, the little boy ate up the meal.Seeing this. the boss went over to them and said, "Old lady, congratulations, you are lucky to have the free food, for you are our 100th guest."Afterwards, over a month or more, one day, the small boy squatted across the snack bar, where he seemed to be counting something, which shocked the boss when he happened to look out office window.When the small boy saw a guest walk into the snack bar, he would put a small stone into the circle he drew, but the lunch time had almost passed, the small stones he put into the circle were hardly 50.The boss was quite worried and called up all his old guests.The guests started coming one after another."81, 82, 83… " the small boy counted faster and faster. At last, when the 99th small stone was put into the circle, the little boy hurried to pull his grandma's hand and went into the snack bar. "Grandma, this time it's on me," the little boy said proudly. The grandma who had become the real 100th guest was served a bowl of beef soup by her grandson. As his grandma as before, the little boy chewed a piece of radish in his mouth.oh ! hungry ! This story is useless. You just need to guess the meaning of this problem. (- . -)输入描述:
The input will be multiple tests, and each line will contain an integer N (1 <= N <= 20).输出描述:
Just observe the example.示例1输入
2 3输出
gu...gu... The story is so boring. And I am so hungry! gu...gu...gu... The story is so boring. And I am so hungry!说明
How clear the example !
#include<iostream>
using
namespace
std;
int
main()
{
int
n;
while
(cin>>n)
{
for
(
int
i=1;i<=n;i++)
cout<<
"gu..."
;
cout<<endl;
cout<<
"The story is so boring. And I am so hungry!"
<<endl;
}
return
0;
全场最水的题}
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld题目描述
XzzF最近过着吃土的日子,饿的神魂颠倒!突然看到有人在做美食节宣传,有好多好吃的,但想吃到这些好吃的可以不容易!得答对主办方出的题。现在XzzF拿到这样一道题:长度为N的01字符串,且满足以下条件的方案数有多少种?1、串中不能有两个或多个连续的0。例如,10、10101、11101是满足条件的,而00、10001、10010是不满足条件的。XzzF已经饿的神志不清了!显然没有力气回答这道题了,所以,你一定要帮XzzF吃上那些好吃的,不然就莫得了!输入描述:
一个整数N(1 <= N <= 20)。输出描述:
满足题目所述条件的方案数。示例1输入
1输出
2示例2输入
2输出
3说明
有01、10、11三种满足条件的方案。#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
mod = 1000000007;
using
namespace
std;
int
main()
{
long
long
a[22], b[22];
a[1] = 1, b[1] = 1;
for
(
int
i = 2; i <= 21; i++)
a[i] = b[i - 1], b[i] = a[i - 1] + b[i - 1];
long
long
n;
while
(
scanf
(
"%lld"
, &n) != EOF)
{
printf
(
"%lld\n"
, a[n] + b[n]);
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld题目描述
猪妈妈让佩奇练习打字, 她给了佩奇一篇只有小写字母的字符串S ( 1 <= |S| <= 10 5)。 但是佩奇记不住键盘字母的位置,只能看着键盘一个一个打。淘气的乔治趁佩奇不注意, 偷偷的换了键盘按键的位置。 乔治是这样操作的:乔治每次扣下来两个键帽, 并且将这两个键帽互换位置重新安回去, 乔治越玩越起劲,一直重复了m(1 <= m <= 10 5)次。请输出佩奇打完字后屏幕上显示的实际字符串。输入描述:
第一行输入一个字符串S ( 1 <= |S| <= 105); 第二行输入一个数字m(1 <= m <= 105), 表示佩奇要操作m次。 之后有m行, 每行有两个字母 c1, c2 表示佩奇要把这两个键帽互换位置。输出描述:
输出一行字符串, 即佩奇用乔治玩坏的键盘输出的实际字符串。示例1输入
helloworld 3 e o h z l p输出
zoppewerpd备注:
|S| 是字符串s长度
#include<iostream>
#include<cstdio>
#include<string.h>
char
a[100002];
using
namespace
std;
int
main()
{
while
(cin>>a)
{
char
b[27];
for
(
int
i = 1; i <= 26; i++)
b[i] =
'a'
+ i - 1;//b数组存放原字母表
int
m;
scanf
(
"%d"
, &m);
while
(m--)
{
char
q, w;
cin >> q >> w;
char
t;
t = b[q -
'a'
+ 1], b[q -
'a'
+ 1] = b[w -
'a'
+ 1], b[w -
'a'
+ 1] = t;//每换一次键盘对字母表进行相应的变换。
}
int
len =
strlen
(a);
for
(
int
i = 0; i < len; i++)
{
a[i] = b[a[i] -
'a'
+ 1];此时a[i]实则对应b[j].
cout << a[i];
}
cout << endl;
}
return
0;
}
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld题目描述
TRDD开了一家免费WiFi体验店, 所有人都可以免费连接WiFi, 只有一个条件, 你要提前一天预约。今天,TRDD收到了n(1 <= n <=1000)个人的预约, 每个人有一个时间段[L, R] (1 <= L <= R <= 5000)表示这个人预约连接WiFi从L时刻到R时刻。 但是市面上只有一种路由器, 这种路由器单台最多能同时连接m(n <= 100)台设备, TRDD想要知道最少使用多少台路由器就能保证明天每个人都能连上WiFi。输入描述:
第一行包含两个数n(1 <= n <=1000), m (1 <= m <= 100)表示今天有n个人预约, 以及路由单台最大连接个数m。 之后有n行, 第i行有两个数字 [L, R] (1 <= L <= R <= 5000) 表示第i个人预约连接WiFi的时间是从L到R。输出描述:
输出一个数字表示TRDD最少需要开启的路由器的个数。示例1输入
4 1 1 5 2 7 3 4 6 9输出
3
此题数据范围太小,直接暴力即可。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
long
long
mod = 1000000007;
using
namespace
std;
int
main()
{
int
n, m;
while
(
scanf
(
"%d%d"
, &n, &m) != EOF)
{
int
a[1002][2], m1 = 0;
for
(
int
i = 1; i <= n; i++)
{
scanf
(
"%d%d"
, &a[i][0], &a[i][1]);
if
(a[i][1] > m1) m1 = a[i][1];
}
int
s = 0;
for
(
int
i = 1; i <= m1; i++)
{
int
sum = 0;
for
(
int
j = 1; j <= n; j++)
{
if
(a[j][0] <= i&&a[j][1] >= i) sum++;
}
if
(sum > s)s = sum;
}
if
(s%m == 0)
printf
(
"%d\n"
, s / m);
else
printf
(
"%d\n"
, s / m + 1);
}
return
0;
}