pichulia   3년 전

무슨 마법을 부리면 이 문제를 accept 받을 수 있나요?ㄷㄷ

보다시피 testcase마다
글자 1개를 읽고, 그것을 처리하는 것이 이 프로그램의 끝입니다.

그런데 시간초과 가 뜹니다.

문자수의 최대 수는 약 10^10개인데
(테스트케이스 10^3, 문자길이 10^7)
지금 제 풀이대로 10^10번 계산하면 시간초과가 뜨니 안됩니다..
그렇다고 문자열로 받아서 처리하자니 메모리 제한이 4MB라 10,000,000 짜리 배열을 만들지도 못하죠...

이거 맞으신 분들은 무슨 마법을 부리신겁니까?ㄷㄷㄷ

august14   3년 전

scanf가 아니고 getchar를 쓰시면 될겁니다...

pichulia   3년 전

헐ㅋ 감사합니다..
뭐 이런...ㅋㅋㅋ

hihihi   3년 전

우와 글 이쁘게 잘쓰신당

psychobabo   8달 전

pichulia 님 소스 활용해서 문제를 풀긴 했는데.. 왜 이렇게 동작하는지 이해가 안가네요 ㅠㅠ

예제의 1234567(7진법) 으로 봤을때,

7진법수 1000000, 200000, 30000, 4000, 500, 60, 7을 10진법으로 변환하고 mod 6를 하면,

각각 1, 2, 3, 4, 5, 6, 7이 나와서 이걸 더해서 다시 mod 6를 하면 답이 나오네요..


mod 연산은 덧셈에 닫혀 있어서 더해서 mod 6를 하는 부분은 알고 있습니다만,

왜 7진법수를 각자리수별로 mod 6를 했을 때 각 자리의 숫자가 나오는지 궁금하네요.

(1000000을 mod 6 했을때 왜 1이 나오는지가 궁금합니다. 10진법으로 변환하고 mod 6를 해서 나온 결과인건 아는데.. 그게 왜 그렇게 되는지가 ㅠㅠ 질문이 너무 이상한가요)


혹시 참고할만한 자료가 있을까 싶어 이렇게 댓글 답니다!

dtc03012   8달 전

1*(6+1)^8+0*(6+1)^7 .... 이렇게 했을때

(6+1)^8 -> 6^8+ a*6^7.... (1)*8이렇게 되므로 마지막 값만 다 더해서 mod 7 해주시면 됩니다.

댓글을 작성하려면 로그인해야 합니다.