- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试解决 UVA 在线判断上的 12503 问题。我想我已经找到了解决方案,但它给了我 TLE。这是问题所在:
你有一个机器人站在 x 轴的原点上。机器人将得到一些指令。你的任务是在执行完所有指令后预测它的位置。
• LEFT:向左移动一个单位(p减1,p为机器人移动前的位置)
• RIGHT:向右移动一个单位(p 增加 1)
• 与 i 相同:执行与第 i 条指令相同的操作。保证i是正数
输入整数不大于在此之前的指令数。第一行包含测试用例数量 T(T <= 100)。每个测试用例都以一个整数 n (1 <= n <= 100) 开头,即指令数。以下 n 行中的每一行都包含一条指令。
输出
对于每个测试用例,打印机器人的最终位置。请注意,在处理完每个测试用例之后,机器人应该复位到原点。
示例输入
2
3
LEFT
RIGHT
SAME AS 2
5
LEFT
SAME AS 1
SAME AS 2
SAME AS 1
SAME AS 4
Sample Output
1
-5
这是我在 C 中的代码:
#include <stdio.h>
char com[102][20];
int command(char comd[], int pos);
int main() {
int t;
int pos;
int i, n;
char tmp[20];
scanf("%d", &t);
for(i = 0; i < t; i++) {
scanf("%d", &n);
int j;
pos = 0;
for (j = 0; j < n; j++) {
gets(com[j]);
if (strcmp(com[j], "LEFT") == 0)
pos--;
else if(strcmp(com[j], "RIGHT") == 0)
pos++;
else {
pos = command(com[j], pos);
}
}
printf("%d\n", pos);
}
return 0;
}
int command(char comd[], int pos) {
if (strcmp(comd, "LEFT") == 0) {
pos--;
return pos;
}
else if (strcmp(comd, "RIGHT") == 0) {
pos++;
return pos;
}
else{
int a = atoi(&comd[8]);
return command(com[a-1], pos);
}
}
为什么这段代码给出 TLE 有什么建议吗?
最佳答案
在 int command(char comd[], int pos)
函数中,您在最后一行使用了递归调用。这可能会导致 TLE。
要解决此问题,您可以使用另一个数组来存储机器人执行命令所走的步数。您只需稍后访问数组的索引即可获取上一个命令的步骤。
下面是我会怎么做-
#include <stdio.h>
#include <string.h>
int move[110];
int getMove(char inp[], int);
int main()
{
int t, n;
char inp[50];
scanf(" %d ",&t);
while(t--)
{
scanf(" %d ",&n);
int i, pos = 0;
for(i = 0; i < n; i++)
{
gets(inp);
pos += getMove(inp, i);
}
printf("%d\n",pos);
}
return 0;
}
int getMove(char inp[], int i)
{
if(inp[0]=='S')
{
int j;
sscanf(strrchr(inp,' ')," %d",&j);
move[i] = move[j - 1];
}
else
{
move[i] = (inp[0] == 'L') ? -1 : 1;
}
return move[i];
}
关于c - UVA 问题 12503 给 TLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923330/
有一个未排序的列表 a 和一个范围列表,如 ranges = [(10, 20), (30, 50), (15, 35) ...]。 a 中的最大值为 uint64_t。目标是计算每个范围的元素数量。
在没有Maps帮助的情况下通过Memoization解决问题,由于读取文件的方法,我得到了TLE,根据我的说法,这不应该是这种情况。可能的原因是什么? 这是给出 AC - http://ideone.
我正在用 C 语言编写一个宾果游戏程序,该程序出现“时间限制”当在线评委给我巨大的宾果游戏板(例如 256*256 板 1 人或 150*150 板 6 人)时,我超出了”。我如何优化我的代码以避免
我真的很困惑,为什么我的 Java 代码无法正常工作,它在 Hacker Earth 上的 Code Monks 上提供了 TLE。这是 1 的链接 Link to Question第一个问题 MON
我正在尝试来自 Interviewbit 的以下问题: Given a m x n grid filled with non-negative numbers, find a path from to
Question Given N and M, write an equation using left shift operators whose result will be equal to t
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试使用ephem TLE 数据跟踪月球的位置,然后将其存储在data.csv 文件中。但是,我找不到它! 下面的代码是我正在尝试做的事情的示例,这是针对国际空间站的,它是我找不到的月球的“第
当我在 hackerearth 提交此代码时,我得到了 TLE。 任何建议我如何优化这个代码。 #include #include int checkPrime(int); int main()
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试解决这个问题:http://olimpiada-informatica.org/?cmd=downloadE&pbm=velo101&ext=pdf它是西类牙语,但我会尝试在这里翻译它: Y
我有顺时针旋转 2D 矩阵的工作代码,但当 k 达到大数时,我遇到了 TLE(超出时间限制)问题。我不知道如何简化我的代码,我猜是 for 循环导致了问题,但我看不出没有它们就可以使我的代码工作的方法
我正在解决 this problem通过使用线段树。我在每个节点保存总和、最大值、最左边的最大值和最右边的最大值。然后我搜索图表以找到特定时间间隔的答案。我怎样才能提高这段代码的速度? import
当我将我的解决方案提交给 codechef 时,我不断收到时间限制错误。我从扫描仪切换到缓冲阅读器,但这并没有解决它。我认为它在我的算法中,但我不确定在哪里,除了检查每 5 个减量之外可能是不必要的。
我正在重新尝试这个 problem statement , now that the contest is all over (所以这不是作弊或任何东西,只是想学习,因为答案没有公布,只有给定测试用例
问题的链接是 - spoj question 我尝试通过这种方法解决问题 - N 范围内的对数 = N-1 范围内的对数 + 一些新对。 但我不知道这里还应该做哪些优化来避免 TLE。我还阅读了有关
问题:Ekka 和他的 friend Dokka 决定买一个蛋糕。他们都喜欢蛋糕,这就是为什么他们买了蛋糕后想分享蛋糕。顾名思义,Ekka 非常喜欢奇数,Dokka 非常喜欢偶数,他们想分蛋糕,让 E
我正在尝试解决 UVA 在线判断上的 12503 问题。我想我已经找到了解决方案,但它给了我 TLE。这是问题所在: 你有一个机器人站在 x 轴的原点上。机器人将得到一些指令。你的任务是在执行完所有指
标准的两行元素 (TLE) 格式包含 2 位数年份加小数天的时间,因此 16012.375 将是 2016 年 1 月 12 日 09:00。使用 python 的 time 或 datatime 模
这是我要解决的问题,我正在使用 The Fact That Prefix Sum[i] - Prefix Sum[i-1] Leads to Frequency being greater than
我是一名优秀的程序员,十分优秀!