[Marbles] ===== ì†Œê° ===== ì¼ì¢…ì˜ ì‚°ìˆ˜ë¬¸ì œ ê°™ê¸°ë„ í•˜ê³ , 수ì‹ì„ ìƒê°í•˜ëŠ”ê²ƒì€ ì–´ë µì§€ 않았지만 í”„ë¡œê·¸ëž¨ì˜ ì‹¤í–‰ì‹œê°„ì„ ì¤„ì´ëŠ”ë° ì‹œê°„ì´ ë“¤ì—ˆë‹¤. í”„ë¡œê·¸ëž¨ì€ ë‹¤ìŒê³¼ ê°™ì€ ì›ë¦¬ë¡œ ë™ìž‘한다. ex) 43 1 3 -> ê°œë‹¹ìˆ˜ë‚©ë¹„ìš©ì´ ìµœì†Œ 2 4 ì¼ë•Œ n = bq+r ì´ìš© 43 = 14*3+1 = 3333333333333+3+1 = 3333333333333+4 => 13, 1 35 1 5 -> ê°œë‹¹ìˆ˜ë‚©ë¹„ìš©ì´ ìµœì†Œ 20 7 ì¼ë•Œ 35 = 7*5+0 = 5555555+0 =>7, 0 <ìˆ˜ì • 05 05 15> ì´ í”„ë¡œê·¸ëž¨ì˜ ì•½ì ì€ n2ì˜ í¬ê¸°ê°€ 커지면 ì‹¤í–‰ì‹œê°„ì´ ëŠ˜ì–´ë‚œë‹¤ëŠ” ì ì´ë‹¤. n2ê°€ ìž‘ì€ ìˆ˜ë¼ë©´ 금방 ë나지만 다ìŒê³¼ ê°™ì€ worst caseì¼ë•ŒëŠ” 약 ëª‡ì–µë²ˆì˜ ë£¨í”„ë¥¼ ëŒì•„야 한다. 2000000000 1 3 1900000000 1900000000 ê·¸ ì ì„ ìˆ˜ì •í•˜ì—¬ 굉장히 ë¹ ë¥¸ ì†ë„ë¡œ 처리 가능하게 함. ë•ë¶„ì— ì½”ë“œê°€ 복잡해ì§;; ì•„.. ìˆ˜ì •í›„ 버그ì†ì¶œ ã… ã… ===== 코드 ===== {{{~cpp #include <iostream> using namespace std; void main(){ int N[100], n1[100], c1[100], n2[100], c2[100]; int tot_arr = 0; for(int i=0;i<100;i++){ cin >> N[i]; if(N[i] == 0) break; cin >> c1[i]>> n1[i]>> c2[i] >> n2[i]; tot_arr++; } for(i=0;i<tot_arr;i++){ if(c1[i]/(double)n1[i] > c2[i]/(double)n2[i]) //n1ì— ê°œë‹¹ìˆ˜ë‚©ë¹„ìš©ì´ ìµœì†Œì¸ ìƒìžê°€ 오게함. swap(n1[i],n2[i]); int r = N[i]%n1[i]; int m1 = N[i]/n1[i]; int m2 = -1; for(int k=0; k<=n2[i] ;k++){ if(r%n2[i]==0){ m2=r/n2[i]; cout <<n1[i]<<"들ì´ë°•ìŠ¤ "<<m1<<"ê°œ í•„ìš” "<<n2[i]<<"들ì´ë°•ìŠ¤ "<<m2<<"ê°œ í•„ìš” "<<"\n"; break; } r = ((n2[i]/n1[i]==0?1:n2[i]/n1[i])*k+1)*n1[i] + (N[i]%n1[i]); //rì€ n2보다 í° ê°€ìž¥ ìž‘ì€ n1ì˜ ë°°ìˆ˜ì— N[i]%n1[i]ì„ ë”í•œ ê°’. if(r-n2[i]>=n1[i]) r-=n1[i]; if(r>N[i] || r<0){ int tempk; if(n2[i]*k>N[i]) tempk = k-1; else tempk = k; if((N[i]-n2[i]*tempk)%n1[i] == 0) r = n2[i]*tempk; else break; } m1=(N[i]-r)/n1[i]; } if(m2 == -1) cout << "failed\n"; cout <<"total " << k << " roops\n"; } } }}} ìˆ˜ì • ì „ {{{~cpp #include <iostream> using namespace std; void main(){ int N[100], n1[100], c1[100], n2[100], c2[100]; int tot_arr = 0; for(int i=0;i<100;i++){ cin >> N[i]; if(N[i] == 0) break; cin >> c1[i]>> n1[i]>> c2[i] >> n2[i]; tot_arr++; } for(i=0;i<tot_arr;i++){ if(c1[i]/(double)n1[i] > c2[i]/(double)n2[i]) //n1ì— ê°œë‹¹ìˆ˜ë‚©ë¹„ìš©ì´ ìµœì†Œì¸ ìƒìžê°€ 오게함. swap(n1[i],n2[i]); int r = N[i]%n1[i]; int m1 = N[i]/n1[i]; int m2 = -1; for(int roop=0; roop<=n2[i] ; roop++){ //루프는 n2ë§Œí¼ ëŒë¦°ë‹¤. 아래ì—ì„œ rì— n1ì´ n2ë§Œí¼ ë”해지면 n2*n1+rì´ ë˜ë©° //ì´ëŠ” (n2*n1+r)%n2 == r%n2ê°€ ë˜ê¸° ë•Œë¬¸ì— roop=n2ì´í›„부터는 ì´ì „ê²ƒì˜ ìˆœí™˜ì´ ëœë‹¤. if(r%n2[i]==0){ m2=r/n2[i]; cout <<n1[i]<<"들ì´ë°•ìŠ¤ "<<m1<<"ê°œ í•„ìš” "<<n2[i]<<"들ì´ë°•ìŠ¤ "<<m2<<"ê°œ í•„ìš” "<<"\n"; break; } r+=n1[i]; m1--; } if(m2 == -1) cout << "failed\n"; } } }}}