首页 > 解决方案 > 我需要有关 cpp 中奇怪的时间限制超出错误的帮助

问题描述

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

#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";
    }
}

你能说出为什么吗?(比赛现已结束)这是一个问题,以防万一

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

标签: c++

解决方案


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

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

C++:cout 语句是否会使代码变慢

这样的事情会更好:

#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";
    }
}

推荐阅读