最好不要使用gets,因为它在Linux环境(洛谷就是Linux环境)下会多读一些东西。
我AC之后的代码:
```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int i;
long long int t,cl;
char command[5005];
//对象钢达姆模型
struct dmF{
//属性只有坐标而已
long long int x,y;
}dm;
//对象:移动一个周期之后所在的位置
struct posF{
long long int x,y;
}pos;
//让钢达姆模型移动
void move(){
switch(command[i]){
case 'E':
dm.x++;
break;
case 'S':
dm.y--;
break;
case 'W':
dm.x--;
break;
case 'N':
dm.y++;
}
}
//让钢达姆模型移动许多个周期,直到剩下的移动次数小于移动一个周期所需要的移动次数为止(just like fly)
void fly(){
//当t小于移动一个周期所需要的次数时就打断循环,否则就让它一直飞
while(t > cl){
//移动一个周期之后的位置
dm.x += pos.x;
dm.y += pos.y;
//移动的次数减少
t -= cl;
}
}
int main(){
//得到命令串
scanf("%s",command);
//得到总共行走的时间
scanf("%lld",&t);
//得到命令串的长度
cl = strlen(command);
//得到钢达姆模型移动了一个周期之后所在的位置
//移动一个周期(也就是移动命令串的长度次)
for(i=0;i<cl;i++){
//让钢达姆模型移动(此时应该移动的是pos对象而不是真正的钢达姆模型对象dm)
move();
}
//保存钢达姆模型此时的位置
pos.x = dm.x;
pos.y = dm.y;
//让钢达姆模型回到原来的位置(刚才只是测试而已,但调用move函数就代表改变了dm对象的坐标)
dm.x = dm.y = 0;
//飞
fly();
//剩下的次数好好一步一步循环
for(i=0;i<t;i++){
move();
}
//输出坐标
printf("%lld %lld",dm.x,dm.y);
return 0;
}
```
by 黑猫_琉璃 @ 2018-08-25 22:28:47
@[俞科chen21](/space/show?uid=56090) 刚才以为这么长的一段回复没有了,既然还在就再发一遍。
呜额……首先,建议日后做题代码写注释,这样自己的逻辑会更加清楚(帮你调错的人也能瞬间get到关键点)。
其次,建议不要使用gets()函数,因为它在Linux的运行环境(洛谷就是Linux运行环境)之下会多读一点东西,而scanf就没有这样的问题啦。所以建议你这样写:
```cpp
scanf("%s",c);
```
你的样例过了吗?你有下载过第一个测试点的数据然后在本机上测试过吗?如果有,并且本机上的答案都是正确的,那你错误的原因大概就是上述的了。
还有一些有关于代码的问题:
1. 你有许多弃之不用的变量乃至数组,建议在写完代码并确定这些变量不使用之后就删除声明它们的语句,不然如果错了你自己调错的时候有可能会被它们所困扰。而且有可能会MLE掉一两个点(这才是最重要的)
2. 建议不要使用万能头文件(虽然它的确好用),因为这样做的话会让你分不清哪个函数是包含在哪个头文件里的。(悄悄告诉你一个秘密,万能头文件也并不是包含了所有的头文件。)
3. 可以通过增加空行、语句块(也就是大括号括住,哪怕只有一条语句)的方法来增强你的代码的美观度。(当然这只是我个人的代码风格,你不喜欢也可以啦。)
4. 建议使用scanf和printf来替代cin/cout,这样子速度会更快一点。具体用法可以问你们OI队的教练,不过TA之后也应该会教的。(曾经我有一次用cin/cout时TLE了一个点,但用scanf/printf就AC了,可能我的代码是真的慢)
5. 建议使用for循环时循环体内的变量i,j之类的东西在循环体内声明,就像这样:
```cpp
for(int i=0;i<5;i++){
printf("这是第%d次循环\n",i+1);
}
```
6. for循环中的条件语句完全可以用switch替代if,这样整体的代码看起来更加规整。
by 黑猫_琉璃 @ 2018-08-25 22:30:26
@[黑猫_琉璃](/space/show?uid=83985) 谢谢,本人已A,不过大佬的思路和方法还是不错的。
by RKcer21 @ 2018-08-26 14:22:58
@[黑猫_琉璃](/space/show?uid=83985) 第5条我还是喜欢单步调试,那样可以跟踪很多变量,
```
printf("这是第%d次循环\n",i+1);
```
这句话假设考试时没删的话就要炸的,考完后要后悔莫及的(就跟文件名打错一样)
by RKcer21 @ 2018-08-26 14:39:11