#include <iostream>
#include <cstdlib>
using namespace std;
long long mod = 1200000000LL;
long long mod2 = mod * mod;
int main(void) {
long long ret = 0;
for(int i=0;i<100000000;i++) {
int tmp1 = rand() % mod;
int tmp2 = rand() % mod;
ret += (long long)tmp1 * tmp2;
ret %= mod;
}
cout << ret << endl;
}
이거랑
#include <iostream>
#include <cstdlib>
using namespace std;
long long mod = 1200000000LL;
long long mod2 = mod * mod;
int main(void) {
long long ret = 0;
for(int i=0;i<100000000;i++) {
int tmp1 = rand() % mod;
int tmp2 = rand() % mod;
ret += (long long)tmp1 * tmp2;
if(ret >= mod2) ret -= mod2;
}
ret %= mod;
cout << ret << endl;
}
이거의 속도를 비교해보면(srand를 쓰지 않았으니 결과는 두 코드 모두 동일)
1번 타자 : 4.996s
2번 타자 : 3.645s
실제 SRM 연습에선 이 차이가 더 극명하게 나와서, 위 방법으로 matrix multiplication을 하면 2초 TLE가 나던 코드가, 아래 방법으로 최적화를 거치니까 0.5초로 결과가 나오더라능...
생각보다 mod 연산의 비용이 엄청 크다는 걸 알았습니다 OTL
13년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
Neon
SRM 554를 연습하다가 멘붕해서 남깁니다.
이거랑
이거의 속도를 비교해보면(srand를 쓰지 않았으니 결과는 두 코드 모두 동일)
1번 타자 : 4.996s
2번 타자 : 3.645s
실제 SRM 연습에선 이 차이가 더 극명하게 나와서, 위 방법으로 matrix multiplication을 하면 2초 TLE가 나던 코드가, 아래 방법으로 최적화를 거치니까 0.5초로 결과가 나오더라능...
생각보다 mod 연산의 비용이 엄청 크다는 걸 알았습니다 OTL
13년 전