저는 온라인으로 작은 프로그래밍 경쟁에 참여하고 있습니다. 기본적으로 내가하는 일은 과제를 해결하고, 알고리즘을 작성하고, 경쟁자의 서버가 자동으로 평가할 수 있도록 코드를 보내는 것입니다.C++ 인쇄가 C보다 훨씬 빠릅니다.
서버는 다양한 프로그래밍 언어를 허용합니다. 모든 작업은 기본적으로 프로그램이 터미널에서 입력을 받아 올바른 터미널에 출력하도록 요구합니다. 따라서 경쟁 업체 웹 사이트에서 지원하는 언어 중 하나가 C++이고 g ++을 사용하여 컴파일했습니다. 글쎄, 나는 C에 능통하지 않기 때문에 + C와는 반대로 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;
}
그래서 내 알고리즘 에 정의되어있다 : 그러나 두 번째 작업에서 나는 끊임없이 프로그램 (2 초) 실행 시간에 설정 한 제한
이 내 C 코드를했다. 서버는 내 프로그램에서 3 가지 다른 테스트를 실행합니다. 각기 다른 값이 사용되며 대부분 프로그램이 더 오래 실행되도록 증가합니다.
그러나 C에서이 코드는 실행하는 데 2 초 이상 걸리므로 테스트에 실패했습니다. 아무 소용이없는 시간 동안 다른 솔루션을 시도, 마침내 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;
}
을 그리고 나는이 코드를 제출하는 경우, 모든 시험은 단지 몇 백 밀리 초마다 완벽하게 달렸다. 에 알고리즘을 변경하지 않고 인쇄 만 변경했음을 유의하십시오.
C에서 인쇄하는 속도가 C보다 훨씬 빠른 이유는 무엇입니까? (내 경우 최대 10 배 빨라짐) 가능하다면 C에서 어떻게 이러한 속도를 얻을 수 있습니까? 아마 알겠지만 나는 C++에 익숙하지 않고 이전 코드는 주로 복사 붙여 넣기입니다. 이런 이유로 저는 C로 프로그램하는 것을 선호합니다.
감사합니다.
입력이 얼마나 큽니까? –
'scanf ("% u", &n);)''n '을 완전히 초기화하지 않았을 가능성이 있으므로 for 루프가 다른 횟수로 실행될 가능성이 있습니다. 프로그램을 로컬에서 실행하여 다른 동작이 있는지 확인 했습니까? C 프로그램의 더 많은 출력 라인을 실행 하시겠습니까? –
컴파일러는''% u "'와''uint64_t'를 사용하는 것에 대한 경고를 제공해야합니다 .. 경고 플래그 켜기 – DeiDei