【发布时间】:2016-10-12 17:33:42
【问题描述】:
我想以特定方式从用户那里获取输入,例如以下方式:
L1 L2 L3 N
L1,L2,L3 是由空格分隔的字符串。 N是一个整数。我尝试使用cin,但速度很慢。我需要快速获得输入。字符串 L2 也重复了 N 次。所以我必须存储l1 + l2*N + l3。我尝试了字符串,但它变得太慢了。我得了 TLE。
这是我存储它们的方式:
#include<bits/stdc++.h>
using namespace std;
int main (){
string l1,l2,l3;
int n;
cin>>l1>>l2>>l3>>n;
string r;
r.reserve(l1.size()+n * l2.size()+l3.size());
r += l1;
for (int i=0; i<n;i++)
r +=l2;
r += l3;
cout<<r<<endl;
return 0;
}
And then iterated it in 2 separate for loops with maximum 1000 iterations in each loop.
我怎样才能有效地存储它们?我知道向量,但我不擅长它们。因此,如果有人知道如何将它们按此序列存储在向量中,请帮助我。或者如果它们可以存储在字符数组中,那么该怎么做呢?
【问题讨论】:
-
你确定是输入让你慢了下来,而不是你的算法吗?
-
我怀疑是
cin太慢了,这很可能是您当前读取字符串的方法。字符串是/是 L2*N 空格分隔的,还是/是/它们连接在一起(所以技术上只是一个长字符串)?你应该如何存储它们的答案完全取决于你想在以后使用这些字符串。 -
是的,我想是的,因为我在其余代码中所做的只是迭代字符串,即
(l1+l2*n+l3)在 2 个单独的for loop中,这将在最坏的情况下运行 1000 次。 -
如果您向我们展示一个输入格式的具体示例,以及您当前代码的相关部分以供阅读,怎么样?
-
for (int i=0; i<n;i++) r +=l2;会做很多工作。特别是如果您在一些嵌套的 for 循环中执行此操作多达 1,000,000 次。
标签: c++ arrays string vector character