티스토리 뷰
너무너무너무너무너무너무너무 많이 틀린 문제다
틀린 이유는 mod를 잘못써서...
입력이 5000만이기 때문에 그대로 입력받고 하라는대로 하면 시간초과다
10억을 log2로 해도 30정도 되기 때문에 미리 구해놓아야 한다
그리고 모듈러를 잘써야한다
아직도 잘 모르겠지만 출력해야 할 답을 계속 모듈러 했더니 틀리고
마지막에만 하니 맞았따.. 모듈러 초보에겐 너무나 어려운 문제다
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <iostream> #include <algorithm> #include <cmath> using namespace std; #define ll long long const ll mod = 1e9 + 7; int n; ll A, D, H, MA, MD, MH, Aa, Da, Ha; ll Ap, Dp, Hp; ll nMA, nMD, nMH; ll arrMA[101], arrMD[5], arrMH[1010]; ll mypow(ll x, ll y, ll mymod) { if (!y) return 1; if (y & 1) return x*mypow(x, y - 1, mymod) % mymod; return mypow((x*x) % mymod, y / 2, mymod) % mymod; } bool war() { ll my = max((A - MD), 1LL); ll monster = max((MA - D), 1LL); return ((ll)ceil(1.0*MH / my) <= (ll)ceil(1.0*H / monster)); } int main() { scanf(" %d", &n); scanf(" %lld %lld %lld", &A, &D, &H); scanf(" %lld %lld %lld", &MA, &MD, &MH); scanf(" %lld %lld %lld %lld %lld %lld", &Ap, &Aa, &Dp, &Da, &Hp, &Ha); for (int i = 1; i <= 100; i++) arrMA[i] = mypow(i, Ap, 100LL); for (int i = 1; i <= 3; i++) arrMD[i] = mypow(i, Dp, 3LL); for (int i = 1; i <= 1000; i++) arrMH[i] = mypow(i, Hp, 1000LL); for (int i = 0; i < n; i++) { if (!war()) { puts("-1"); return 0; } A += MA; D += MD; H += MH; MA = ((arrMA[MA] + Aa) % 100LL) + 1LL; MD = ((arrMD[MD] + Da) % 3LL) + 1LL; MH = ((arrMH[MH] + Ha) % 1000LL) + 1LL; } printf("%lld %lld %lld\n", A%mod, D%mod, H%mod); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 12896 스크루지 민호 (0) | 2018.07.22 |
---|---|
[백준] 12892 생일 선물 (0) | 2018.07.22 |
[백준] 5446 용량 부족 (0) | 2018.07.18 |
[백준] 12861 죄수에게 주는 뇌물 (0) | 2018.07.18 |
[백준] 12899 데이터 구조 (0) | 2018.07.18 |
댓글