【问题标题】:I need help regarding weird time limit exceeded error in cpp我需要有关 cpp 中奇怪的时间限制超出错误的帮助
【发布时间】:2020-07-25 18:17:42
【问题描述】:

所以当我在向量中获取它的输出时,这个代码被接受了

#include <iostream>
#include<vector>
using namespace std;
int main(){
    int t; cin >> t;
    while(t--){
        vector<int>v;
        int n,k; cin >> n >> k;
        for(int i=0;i<n;i++){
            int x; cin >> x;
            if(x%k==0) v.push_back(1);
            else v.push_back(0);
        }
        for(auto x:v) cout <<x <<"";
        cout << endl;
    }
    return 0;
}

但是当我直接打印时,这段代码给出了超出时间限制的错误

#include <bits/stdc++.h> 
using namespace std;
#define ll long long int

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll k,d;
        int n,i;
        cin>>n>>k;
        for(i=0;i<n;i++)
        {
            cin>>d;
            if(d%k==0)
                cout<<"1";
            else
                cout<<"0";
        }
        cout<<"\n";
    }
}

你能说出原因吗? (比赛现已结束)Here is the question in case

编辑:1 我使用 int 而不是 long long 以及 printf 和 cin.tie(NULL) 东西,但仍然无济于事

【问题讨论】:

  • 控制台 I/O 很昂贵。如果可能,您应该避免将其置于繁忙的循环中。我认为这可能会对性能产生巨大影响。在大多数情况下,您最好先获取所有输入、处理,然后打印所有输出,因为在这种情况下,I/O 可能是您的瓶颈。
  • 可能无关紧要,但代码中还有其他区别:您在第二个中使用long long,并打印字符串而不是整数。比较 2 段代码时,请尝试删除除您要比较的内容之外的所有差异。
  • ... 这只是第 n 个例子,说明如果某人的目标是学习 C++,他们不会从这些毫无价值的竞赛中学到任何东西。在几乎所有情况下,就像这个一样,正确的解决方案是需要了解特定的编程技巧。如果您不知道诀窍是什么并尝试编写蛮力方法,则程序运行缓慢并因此而失败。如果你想学习 C++,你不会从毫无意义的在线竞赛网站 but only from a good C++ textbook 学到任何东西。
  • @SamVarshavchik -- 不幸的是,似乎很多新手都在专注于解决这些问题,因为他们被告知如果他们能解决这些问题,他们将在一家大型软件公司获得一份丰厚的工作并获得某种“高等级”来展示一些招聘人员。当我问他们“这些测试有什么好处?”时,我似乎得到了反驳。这可能也是为什么你看到很多绝望的呼喊,有时在这些问题上没有任何努力的原因——必须在问题网站上获得这些排名点。
  • 我不知道它是否会提供一份有利可图的工作,但它绝对是 Google Code Jam 或 Kickstart 或 FB Hacker's cup 的一个很好的练习场

标签: c++


【解决方案1】:

在 for 循环体中使用 cout 的实现肯定会在 cout 输出上出现瓶颈,特别是考虑到模运算相比之下非常便宜。

请参阅以下问题作为参考:

C++: Does cout statement makes code slower

这样会更好:

#include <bits/stdc++.h> 
#include <vector>
using namespace std;
#define ll long long int

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll k,d;
        int n,i;
        cin>>n>>k;
        
        std::vector<bool> r(n);
        for(i=0;i<n;i++)
        {
            cin>>d;
            if(d%k==0)
                r[i] = true;
        }
        
        for(auto i : r)
            cout<<(i ? '1' : '0')<<endl;
        
        cout<<"\n";
    }
}

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2010-09-23
    • 2023-03-08
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多