#include <iostream>
#include <vector>
#include <cassert>
struct Balance {
int maxUses;
Balance( int maxUses) : maxUses( maxUses) { }
int compare( int a, int b)
{
if ( -- maxUses < 0 ) throw "Sử dụng quá số lần cân" ;
return a - b;
}
} ;
struct Stones {
std:: vector < int > stones;
Stones( int fakeId, int fakeWeight) : stones( 12 , 0 )
{ stones[ fakeId] = fakeWeight; }
int operator[ ] ( int i) const { return stones[ i- 1 ] ; } //-1
} ;
int findFakeId( const Stones& s, Balance b)
{
int comp1 = b.compare ( s[ 5 ] + s[ 6 ] + s[ 7 ] + s[ 8 ] , s[ 9 ] + s[ 10 ] + s[ 11 ] + s[ 12 ] ) ;
if ( ! comp1) {
int comp2 = b.compare ( s[ 1 ] + s[ 2 ] , s[ 5 ] + s[ 6 ] ) ;
if ( comp2) return b.compare ( s[ 1 ] , s[ 5 ] ) ? 1 : 2 ;
else return b.compare ( s[ 3 ] , s[ 5 ] ) ? 3 : 4 ;
} else if ( comp1 < 0 ) {
int comp2 = b.compare ( s[ 5 ] + s[ 6 ] + s[ 9 ] , s[ 7 ] + s[ 8 ] + s[ 10 ] ) ;
if ( comp2 < 0 ) {
int comp3 = b.compare ( s[ 5 ] , s[ 6 ] ) ;
return comp3 ? ( comp3 > 0 ? 6 : 5 ) : 10 ;
} else if ( comp2 > 0 ) {
int comp3 = b.compare ( s[ 7 ] , s[ 8 ] ) ;
return comp3 ? ( comp3 > 0 ? 8 : 7 ) : 9 ;
} else return b.compare ( s[ 11 ] , s[ 1 ] ) ? 11 : 12 ;
} else {
int comp2 = b.compare ( s[ 5 ] + s[ 6 ] + s[ 9 ] , s[ 7 ] + s[ 8 ] + s[ 10 ] ) ;
if ( comp2 < 0 ) {
int comp3 = b.compare ( s[ 7 ] , s[ 8 ] ) ;
return comp3 ? ( comp3 > 0 ? 7 : 8 ) : 9 ;
} else if ( comp2 > 0 ) {
int comp3 = b.compare ( s[ 5 ] , s[ 6 ] ) ;
return comp3 ? ( comp3 > 0 ? 5 : 6 ) : 10 ;
} else return b.compare ( s[ 11 ] , s[ 1 ] ) ? 11 : 12 ;
}
return - 1 ;
}
int main( )
{
for ( int w = - 1 ; w <= 1 ; w + = 2 )
{
std:: cout << ( w < 0 ? "Nhẹ" : "Nặng" ) << " hơn:\n " ;
for ( int i = 0 ; i < 12 ; ++ i)
{
assert ( findFakeId( Stones( i,w) , 3 ) == i+ 1 ) ;
std:: cout << i+ 1 << " chính xác\n " ;
}
std:: cout << "\n " ;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2Fzc2VydD4KCnN0cnVjdCBCYWxhbmNlIHsKCWludCBtYXhVc2VzOwoJQmFsYW5jZShpbnQgbWF4VXNlcykgOiBtYXhVc2VzKG1heFVzZXMpIHt9CglpbnQgY29tcGFyZShpbnQgYSwgaW50IGIpIAoJewoJCWlmICgtLW1heFVzZXMgPCAwKSB0aHJvdyAiU+G7rSBk4bulbmcgcXXDoSBz4buRIGzhuqduIGPDom4iOwoJCXJldHVybiBhIC0gYjsKCX0KfTsKCnN0cnVjdCBTdG9uZXMgewoJc3RkOjp2ZWN0b3I8aW50PiBzdG9uZXM7CglTdG9uZXMoaW50IGZha2VJZCwgaW50IGZha2VXZWlnaHQpIDogc3RvbmVzKDEyLCAwKQoJeyBzdG9uZXNbZmFrZUlkXSA9IGZha2VXZWlnaHQ7IH0KCWludCBvcGVyYXRvcltdKGludCBpKWNvbnN0IHsgcmV0dXJuIHN0b25lc1tpLTFdOyB9IC8vLTEKfTsKCmludCBmaW5kRmFrZUlkKGNvbnN0IFN0b25lcyYgcywgQmFsYW5jZSBiKQp7CglpbnQgY29tcDEgPSBiLmNvbXBhcmUoc1s1XStzWzZdK3NbN10rc1s4XSwgc1s5XStzWzEwXStzWzExXStzWzEyXSk7CglpZiAoIWNvbXAxKSB7CgkJaW50IGNvbXAyID0gYi5jb21wYXJlKHNbMV0rc1syXSwgc1s1XStzWzZdKTsKCQlpZiAoY29tcDIpIHJldHVybiBiLmNvbXBhcmUoc1sxXSwgc1s1XSkgPyAxIDogMjsKCQllbHNlCSAgIHJldHVybiBiLmNvbXBhcmUoc1szXSwgc1s1XSkgPyAzIDogNDsKCX0gZWxzZSBpZiAoY29tcDEgPCAwKSB7CgkJaW50IGNvbXAyID0gYi5jb21wYXJlKHNbNV0rc1s2XStzWzldLCBzWzddK3NbOF0rc1sxMF0pOwoJCWlmIChjb21wMiA8IDApIHsKCQkJaW50IGNvbXAzID0gYi5jb21wYXJlKHNbNV0sIHNbNl0pOwoJCQlyZXR1cm4gY29tcDMgPyAoY29tcDMgPiAwID8gNiA6IDUpIDogMTA7CgkJfSBlbHNlIGlmIChjb21wMiA+IDApIHsKCQkJaW50IGNvbXAzID0gYi5jb21wYXJlKHNbN10sIHNbOF0pOwoJCQlyZXR1cm4gY29tcDMgPyAoY29tcDMgPiAwID8gOCA6IDcpIDogOTsKCQl9IGVsc2UgcmV0dXJuIGIuY29tcGFyZShzWzExXSwgc1sxXSkgPyAxMSA6IDEyOwoJfSBlbHNlIHsKCQlpbnQgY29tcDIgPSBiLmNvbXBhcmUoc1s1XStzWzZdK3NbOV0sIHNbN10rc1s4XStzWzEwXSk7CgkJaWYgKGNvbXAyIDwgMCkgewoJCQlpbnQgY29tcDMgPSBiLmNvbXBhcmUoc1s3XSwgc1s4XSk7CgkJCXJldHVybiBjb21wMyA/IChjb21wMyA+IDAgPyA3IDogOCkgOiA5OwoJCX0gZWxzZSBpZiAoY29tcDIgPiAwKSB7CgkJCWludCBjb21wMyA9IGIuY29tcGFyZShzWzVdLCBzWzZdKTsKCQkJcmV0dXJuIGNvbXAzID8gKGNvbXAzID4gMCA/IDUgOiA2KSA6IDEwOwoJCX0gZWxzZSByZXR1cm4gYi5jb21wYXJlKHNbMTFdLCBzWzFdKSA/IDExIDogMTI7Cgl9CglyZXR1cm4gLTE7Cn0KCmludCBtYWluKCkKewoJZm9yIChpbnQgdyA9IC0xOyB3IDw9IDE7IHcgKz0gMikKCXsKCQlzdGQ6OmNvdXQgPDwgKHcgPCAwID8gIk5o4bq5IiA6ICJO4bq3bmciKSA8PCAiIGjGoW46XG4iOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgMTI7ICsraSkKCQl7CgkJCWFzc2VydChmaW5kRmFrZUlkKFN0b25lcyhpLHcpLCAzKSA9PSBpKzEpOwoJCQlzdGQ6OmNvdXQgPDwgaSsxIDw8ICIgY2jDrW5oIHjDoWNcbiI7CgkJfQoJCXN0ZDo6Y291dCA8PCAiXG4iOwoJfQp9