DODO作为班级的体育委员,在每一次上体育课前,要把队伍整好。除了他之外的N位同学有固定的编号1...N,但是每一次上课前学生们总是随意站队,这个时候就需要DODO来进行整队。
整队要求:由于同学们都很调皮,DODO任何时刻都只能对面向自己的同学发送指令。每一次他可以让这位同学沿着队伍向后移动k个位置,k可以是1~N−1中的任意数字。他经过的k位同学会向前移动,腾出空间使得他能够插入到队伍中。
例如,假设N=4,一开始的顺序是:
DODO: 4,3,2,1
此时DODO只能对4号学生发送指令,当这位学生向后移动3步之后,队伍的顺序变成:
DODO: 3,2,1,4
此时DODO只能对3号学生发送指令,如此进行直到学生们拍好顺序。
DODO急需完成排序,这样他就可以开始体育锻炼了。请帮助他求出这N位同学排好顺序所需要的最小操作次数。
注意: DODO总是站在队伍的前面面向学生。
输入第一行包含N
第二行包含N个空格分隔的整数,表示学生们初始的顺序。
输出一个整数,为DODO采用最佳策略可以将这N位同学排好顺序所需要的操作次数。
4
1 2 4 3
3
5
5 1 4 2 3
3
对于前 40% 的数据:1≤n≤106
众所周知,在《我的世界》这款游戏中,玩家只能放置各种各样的方块。
现在史蒂夫想在游戏中建造一个球体,但是只用方块是不可能建成完美的球形的。
聪明的史蒂夫想到了,球形的边界距离球心的距离即为半径R,这个数值是固定的。所以他打算将所有距离球心≤R的位置全部放置方块,这样就能组成一个近似的球形。
史蒂夫将问题简化成了一个三维坐标系。在这个坐标系中,球心的坐标是原点(即(0,0,0),他想知道在坐标系中有多少个整点,距离球心的距离≤R
求出这个数字后,他就能知道自己该准备多少方块了。
输入仅一个整数R, 表示球的半径。
输出仅一个整数,表示在三维坐标系中,有多少个整点被球心为原点,半径为R的球覆盖。
1
7
10
4169
#include <bits/stdc++.h>
using namespace std;
int cntF(int R) {
int cnt = 0;
for (int x = -R; x <= R; x++) {
for (int y = -R; y <= R; y++) {
long long mx = static_cast<long long>(x) * x + static_cast<long long>(y) * y;
if (mx > static_cast<long long>(R) * R) {
continue;
}
int mxn = static_cast<int>(sqrt(R * R - mx));
for (int z = -mxn; z <= mxn; z++) {
cnt++;
}
}
}
return cnt;
}
int main() {
int R;
scanf("%d", &R);
printf("%d\n", cntF(R));
return 0;
}
如果能将这两道题解出来的大佬,感激不尽!!!