超过时间限制-简单程序-可分割性测试
Time Limit Exceeded - Simple Program - Divisibility Test
输入输入以两个正整数nk(n,k<=10^7)开始。接下来的n行输入分别包含一个不大于10^9的正整数ti。
输出写一个整数输出,表示有多少整数ti可以被k整除。
示例
输入:
7 3
1
51
966369
7
9
999996
11
输出:
4
我的代码:
#include <iostream>
using namespace std;
int main()
{
long long n,k, i;
cin>>n;
cin>>k;
int count=0;
for(i=0;i<n;i++)
{
int z;
cin>>z;
if(z%k == 0) count++;
}
cout<<count;
return 0;
}
现在,此代码生成正确的输出。然而,CodeChef不接受它(http://www.codechef.com/problems/INTEST)原因如下:超过时限。如何进一步优化?
正如caleb所说,该问题被标记为"巨大的输入测试",因此需要使用一些更好/更快的I/O方法
用printf替换cout,用scanfcin将给你一个AC,但为了提高执行时间,你需要使用一些更快的IO方法,例如使用getchar_unlocked()逐字符读取将给你更好的执行时间
因此,您可以使用这样的函数读取值,以获得更好的执行时间。
inline int read(){
char c=getchar_unlocked();
int n=0;
while(!(c>='0' && c<='9'))
c=getchar_unlocked();
while(c>='0' && c<='9'){
n=n*10 + (c-'0');
c=getchar_unlocked();
}
return n;
}
链接的问题包含以下描述:
这个问题的目的是验证你的方法使用读取输入数据的速度足以处理问题印有巨大的输入/输出警告。你应该是能够在运行时每秒处理至少2.5MB的输入数据。
考虑到这一点,使用iostreams一次从输入中读取几个字节的值不会减少。我在谷歌上搜索了一下,发现了CodeChef上描述的cin
和cout
的替代品。您可以尝试的其他一些方法包括使用内存映射文件和stdio。
这也可能有助于寻找优化计算的方法。例如,如果ti<k、 那么你知道k不是ti的因子。根据k的大小和ti值的分布,单独进行观测可以节省大量时间。
请记住:您的代码短并不意味着它快。
相关文章:
- 如何在对<char>C++程序进行逆向工程的同时将 std::basic_string 转换为 Rust 可读值?
- 用于检查数字是否有数字或可被该数字的值整除的程序
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 将第三方库与程序可执行文件分开
- 是在同一体系结构上运行的静态编译的纯标准C 程序可移植
- 使文件仅对程序可读
- 在一个动态分配的数组的程序中分割故障
- 编写并执行一个C或C++程序,该程序可创建无限数量的进程
- openCV程序可编译,但在运行时崩溃
- 根据用户输入计算数组中的可分割数字
- SDL在程序可执行文件中嵌入图像
- 如何在c++中检查一个很长的数的可分割性
- 编译后的应用程序可执行文件崩溃,除非重命名.为什么
- Qt:从应用程序/可执行目录获取设置ini文件的问题
- 关于如何创建一个文件只有我的程序可读的任何想法
- 使用Graphviz为Windows程序可视化函数调用
- 超过时间限制-简单程序-可分割性测试