Codechef拒绝我的解决方案
Codechef is rejecting my solution
我是codechef的新手,我试图解决以下问题,但是我的代码在我的机器上运行良好,我还在某些情况下测试了它。
问题如下:-
在英国,军官们最担心的事情就是正确地指挥士兵们参加阅兵。幸运的是,命令士兵并不是一个真正的问题。如果一个排由n个人组成,他们都有不同的等级(从1 -最低到n -最高),在游行中他们应该从左到右排列,按等级递增的顺序排列。
听起来很简单,不是吗?嗯,约翰尼军士也是这么想的,直到有一天他面临一个新的命令。他很快发现他的精英突击队员更喜欢战斗,而把思考留给他们的上级。所以,当第一次点名时,士兵们以相当随机的顺序排列,这并不是因为他们缺乏纪律,而仅仅是因为他们不知道如何以正确的顺序排列。约翰尼中士一点也不觉得好笑,尤其是他很快发现,没有一个士兵记得他自己的军衔。经过多年的服役,每个士兵都只知道谁是他的上级。但是,当面对真正的军事挑战时,约翰尼中士并不是一个轻易放弃的人。他想了一会儿,想到了一个非常简单明了的办法,于是下达了下面的命令:"大家从左边开始,一个接一个地向前走;向左走,直到没有人在你的左边;回去排队)。这确实在几分钟内就把这些人整理好了。问题解决了……暂时。
第二天,士兵们的顺序和前一天完全一样,必须用同样的方法重新安排。历史重演。几个星期后,约翰尼军士设法迫使他的每个士兵记住他离开时经过了多少人,从而使分类过程更快。
如果你知道每个人必须向左走多少个位置,你能试着找出士兵最初排队的顺序吗?
输入第一行输入包含一个整数t<=50,测试用例的数量。后面是t个测试用例,每个用例由2行组成。第一行包含一个整数n (1<=n<=200000)。第二行包含n个以空格分隔的整数wi,表示当应用Sgt Johnny的算法时,队列中的第i个士兵必须向左走多远。
输出对于每个测试用例,输出由n个空格分隔的整数组成的单行——士兵的军衔,按初始排列从左到右给出。
例子输入:23.0 1 050 1 2 0 1
输出:2 1 33 2 1 5 4警告:输入/输出数据大,使用某些语言要小心
#include <iostream>
#include <string.h>
using namespace std;
int main ()
{
int t,n;
cin >> t;
while(t>0){
cin >> n;
int array[n+1];
int stepsmoved,i;
for(i = 1; i <= n; i++){
array[i] = i;
}
for(i = 1; i <=n; i++){
cin >> stepsmoved;
if(stepsmoved == 0){}
else{
int x;
x = array[i];
for (int j = i; j> i- stepsmoved; j--){
array[j] = array[j-1];
}
array[i-stepsmoved] = x;
}
}
for(i = 1; i <= n; i++){
cout<<array[i]<<" ";
}
cout<<endl;
t--;
}
return 0;
}
那么在逻辑上或语法上有什么错误吗?
排序的'unwind '顺序是相关的。下面的代码演示了上面的语句(排名以1为基础,1
-最高,10
-最低,数组索引以0为基础):
#include <stdio.h>
void dump(int *a) {
int i;
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("n");
}
int main() {
int array[10] = {0}, steps[10] = {0};
int i,j;
srand(0);
// Assign ranks in random order
for (i = 0; i < 10;) {
j = rand() % 10;
if (!array[j])
array[j] = ++i;
}
dump(array);
// Sort according to the Sgt Johnny's initial idea
for (i = 1; i < 10; i++) {
for (j = 0; array[j] < array[i]; j++);
if (j < i) {
int k, temp = array[i];
for (k = i; k > j; k--) {
array[k] = array[k-1];
steps[temp-1]++;
}
array[j] = temp;
dump(array);
}
}
printf("Steps:n");
dump(steps);
printf("n");
// reconstruct the origina order
#if 1
for (i = 10-1; i >= 0; i--)
#else
for (i = 0; i < 10; i++)
#endif
{
int s = steps[array[i]-1];
for (j = i; s; s--, j++) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
dump(array);
}
}
如果以相反的顺序进行重构,则得到与原始序列匹配的序列:
8 7 5 1 10 4 2 3 9 6
7 8 5 1 10 4 2 3 9 6
5 7 8 1 10 4 2 3 9 6
1 5 7 8 10 4 2 3 9 6
1 4 5 7 8 10 2 3 9 6
1 2 4 5 7 8 10 3 9 6
1 2 3 4 5 7 8 10 9 6
1 2 3 4 5 7 8 9 10 6
1 2 3 4 5 6 7 8 9 10
Steps:
3 5 5 4 2 4 1 0 1 0
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 10 9
1 2 3 4 5 6 7 8 10 9
1 2 3 4 5 6 8 7 10 9
1 2 3 4 5 8 7 10 9 6
1 2 3 4 8 7 5 10 9 6
1 2 3 8 7 5 10 4 9 6
1 2 8 7 5 10 4 3 9 6
1 8 7 5 10 4 2 3 9 6
8 7 5 1 10 4 2 3 9 6
否则,重建的顺序与原始顺序不匹配:
8 7 5 1 10 4 2 3 9 6
7 8 5 1 10 4 2 3 9 6
5 7 8 1 10 4 2 3 9 6
1 5 7 8 10 4 2 3 9 6
1 4 5 7 8 10 2 3 9 6
1 2 4 5 7 8 10 3 9 6
1 2 3 4 5 7 8 10 9 6
1 2 3 4 5 7 8 9 10 6
1 2 3 4 5 6 7 8 9 10
Steps:
3 5 5 4 2 4 1 0 1 0
2 3 4 1 5 6 7 8 9 10
2 4 1 5 6 7 3 8 9 10
2 4 5 6 7 1 3 8 9 10
2 4 5 7 1 3 8 6 9 10
2 4 5 7 3 8 6 1 9 10
2 4 5 7 3 8 6 1 9 10
2 4 5 7 3 8 1 9 10 0
2 4 5 7 3 8 1 10 9 0
2 4 5 7 3 8 1 10 0 9
2 4 5 7 3 8 1 10 0 6
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- 此解决方案背后的直觉
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- 在解决方案中的项目中使用时缺少 NuGet 包
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- NULL指针解决方案中的C 分割故障
- C++ VS:多 DLL 解决方案中的'new'和'delete'覆盖
- 在同一解决方案中的项目之间传递 CStrings
- 如何将解决方案中的项目从应用程序更改为静态库
- 使用解决方案上的msbuild来调用某些项目上的自定义目标
- VS2012 如何将 C# 的 AnyCPU 配置的输出目录设置为各自解决方案配置的 x86 和 x64 文件夹?
- 正在将控制台输出重定向到同一解决方案中的MFC屏幕输出
- 为Visual Studio解决方案中的所有项目设置目录结构
- 一个解决方案中的多个项目与cmake和Visual Studio
- 跨 VC 解决方案中的多个项目访问同一对象
- c++11 是否提供与 python maketrans/translate 中实现的解决方案类似的解决方案?
- 我的$Foo ATL解决方案中的($Foo)PS项目用于什么