我正在网上参加一个小型的编程竞赛.基本上我所做的就是解决任务,编写算法并发送我的代码,由竞争对手的服务器自动评估.
服务器接受各种编程语言.所有任务基本上都要求程序从终端获取输入并输出正确的终端.所以在竞争对手的网站上,我注意到他们支持的语言之一是C++,他们使用g ++来编译它.好吧,因为我不是那么流利的C++,而不是CI的想法,我会用C回答我的答案.
这对第一项任务非常有用.但是在第二个任务中,我经常达到程序执行时间的限制(2秒)
这是我的C代码:
#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <stdlib.h>
uint8_t get_bit(uint64_t k) {
...
}
int main(int argc, char *argv[]) {
uint64_t n;
uint64_t k;
scanf("%u", &n);
uint64_t i;
for (i = 0; i < n; i++) {
scanf("%u", &k);
printf("%d\n", get_bit(k));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我的算法定义在get_bit.服务器在我的程序上运行3个不同的测试,具有不同的值,大多数增加以使程序运行更长时间.
但是,由于运行时间超过2秒,因此C中的此代码未通过测试.几个小时尝试不同的解决方案无济于事,我终于尝试使用一些不同的打印方法将我的代码作为C++提交.
这是我的C++主程序(程序的其余部分基本保持不变):
int main(int argc, char *argv[]) {
uint64_t n;
uint64_t k;
cin >> n;
uint64_t i;
for (i = 0; i < n; i++) {
cin >> k;
cout.operator<<(get_bit(k)) << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我提交此代码时,所有测试都在几百毫秒内完美运行.请注意,我没有改变我的算法,get_bit只改变了打印.
为什么在C++中打印比在C中打印快得多?(在我的情况下,速度提高了10倍)如果可能的话,我怎样才能在C中实现这些速度?您可能会注意到,我不熟悉C++,之前的代码主要是复制粘贴.出于这个原因,我更愿意用C编程.
先感谢您.
这可能是因为你的代码是可能(见注释)不正确.你不能使用%u带有scanf64位整数.
在这里查看第三个表http://www.cplusplus.com/reference/cstdio/scanf/.您应该使用某物像%llu.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |