1、
时间限制:1秒
空间限制:32768K
牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。
输出描述:
输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。
输入例子1:
3
LRR
输出例子1:
E
#include
#include
using namespace std;
int main()
{
string DREC = { 'N','E','S','W' };
int N,i = 0,temp = 0;
cin >> N;
string str1;
cin >> str1;
while (i < N)
{
if (str1[i] == 'R')
temp += 1;
else
temp -= 1;
i++;
}
int index = (temp % 4 + 4) % 4;
cout << DREC[index] << endl;
return 0;
}
2、
[编程题] 数对
时间限制:1秒
空间限制:32768K
牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。
输入描述:
输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
输出描述:
对于每个测试用例, 输出一个正整数表示可能的数对数量。
输入例子1:
5 2
输出例子1:
7
例子说明1:
满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
分析:(借鉴大佬思路)首先 ,因为x%y>=k,则y一定是要大于k的(若y小于等于k, 余数不可能大于等于k),所以y的取值应该从k+1到n;
然后看x。首先,从1到n闭区间的范围内,可以划分为若干的段,比如[1,y] [y+1,2y] [2y+1,3y]……[my+1,n]每个长度为y的段中,都有k个数([my+1,my+k))除以y的余数是小于k的,则这一段中余数大于等于k的有y-k个(注意x不能等于y,所以是y-k个,不是y-k+1个)。所以统计,一共有n/y个长度为y的段,共有n/y*(y-k)个数字满足条件;
然后考虑最后剩余的那一段,即[my+1,n],这段的长度为n%y,要判断其长度,如果大于k,则说明有满足条件的数字,要统计其个数并加上;如果小于k则说明没有把满足条件的数字包含进来。
#include
using namespace std;
int main()
{
long n, k, temp,res = 0,a;
cin >> n >> k;
if (k == 0)
{
res = n * n;
}
else
{
for (long y = k; y <= n; y++)
{
temp = n / y*(y - k);
if (n % y >= k)
{
a = (n % y - k + 1);
}
else
a = 0;
res = res + temp + a;
}
}
cout << res << endl;
return 0;
}
3、[编程题] 矩形重叠
时间限制:1秒
空间限制:32768K
平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。
如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。
请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。
输入描述:
输入包括五行。
第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。
第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。
第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。
第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。
第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。
输出描述:
输出一个正整数, 表示最多的地方有多少个矩形相互重叠,如果矩形都不互相重叠,输出1。
输入例子1:
2
0 90
0 90
100 200
100 200
输出例子1:
2
答案来自https://www.nowcoder.com/questionTerminal/a22dd98b3d224f2bb89142f8acc2fe57
import sys
lines = sys.stdin.readlines()
n = int(lines[0])
x1 = list(map(int,lines[1].split()))
y1 = list(map(int,lines[2].split()))
x2 = list(map(int,lines[3].split()))
y2 = list(map(int,lines[4].split()))
res = 1
for x in x1+x2:
for y in y1+y2:
cnt = 0
for i in range(n):
if x > x1[i] and y > y1[i] and x <= x2[i] and y <= y2[i]:
cnt += 1
res = max(res,cnt)
print(res)