1 条题解
-
0
自动搬运
来自洛谷,原作者为

RKcer21
这个蒟蒻很懒,什么也没有留下搬运于
2025-08-24 21:28:20,当前版本为作者最后更新于2018-08-19 18:35:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这题是一道不错的题目 首先,让我们来晒一下0分WA代码
#include<bits/stdc++.h> using namespace std; int a[10001]; char c[5001]; int i,j,k,n,m,t,x,y; int main() { gets(c); cin>>n; m=strlen(c); for (i=0; i<n; i++) { if (c[i%m]=='E') x+=1; else if (c[i%m]=='S') y-=1; else if (c[i%m]=='W') x-=1; else y+=1; } cout<<x<<' '<<y; return 0; }乍一眼看,没毛病,模拟大法啊,可是,luogu评测机似乎是用linux的,gets会出问题(注:noip也是用linux评测的) 具体怎么解决呢?请看下集(走开)
如果你坚持要用,你可以选择度娘(玄学啊)
现在让我们来看改了gets的程序
#include<bits/stdc++.h> using namespace std; int a[10001]; string c; int i,j,k,n,m,t,x,y; int main() { cin>>c; cin>>n; m=c.length(); for (i=0; i<n; i++) { if (c[i%m]=='E') x+=1; else if (c[i%m]=='S') y-=1; else if (c[i%m]=='W') x-=1; else y+=1;//按题意模拟即可 } cout<<x<<' '<<y; return 0; }怎么只有60分啊,我们可以看一下数据。
对于60%的数据:T <= 500,000且命令串长度 <= 5,000
对于100%的数据:T <= 2,000,000,000且命令串长度<= 5,000
哦,原来是那40%的大数据惹的祸。
再看一下题目与程序,你会发现,有很多个步骤是在重复运行的 于是乎,我们可以将每一轮的运动方式给记录下来(记录每一轮x与y的变化),再将剩余的步骤直接暴力即可(不要说的这么难听,模拟好不好)
#include<bits/stdc++.h> using namespace std; int a[10001],xx,yy;//xx与yy记录每一轮的运动方式,即每一轮x与y的变化 string c; int i,j,k,n,m,t,x,y; int main() { cin>>c; cin>>n; m=c.length(); for (i=0; i<m; i++) if (c[i%m]=='E') xx+=1; else if (c[i%m]=='S') yy-=1; else if (c[i%m]=='W') xx-=1; else yy+=1;//记录每一轮的运动方式 for (i=0; i<n%m; i++) if (c[i%m]=='E') x+=1; else if (c[i%m]=='S') y-=1; else if (c[i%m]=='W') x-=1; else y+=1; //将剩余进行模拟 cout<<x+n/m*xx<<' '<<y+n/m*yy; return 0; }
- 1
信息
- ID
- 702
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者