|  | 
|  | 
| back to board | Where is the bug?!!! I don't know how this did happen... It's the first time I've been encountered with such a trouble... Everything seems to be correct, all "home" tests having passed, but... WA2Somebody, please help me!
 
 My code:
 #include <cstdio>
 #include <algorithm>
 using namespace std;
 
 struct Card
 {
 int value;
 char color;
 Card(int value = 0, char color = 0) : value(value), color(color) {}
 bool in()
 {
 char c;
 while(1)
 {
 c = getchar();
 if(c == EOF)
 return false;
 if((c >= '1') && (c <= '9'))
 break;
 if(c == 'A' || c == 'J' || c == 'Q' || c == 'K')
 break;
 if(c >= 'A' && c <= 'Z')
 for(;;);
 if(c >= 'a' && c <= 'z')
 for(;;);
 if(c == '0')
 for(;;);
 }
 switch(c)
 {
 case '1':
 value = 10;
 getchar();
 break;
 case 'J':
 value = 11;
 break;
 case 'Q':
 value = 12;
 break;
 case 'K':
 value = 13;
 break;
 case 'A':
 value = 14;
 break;
 default:
 if(c < '1' || c > '9')
 for(;;);
 value = c - '0';
 }
 color = getchar();
 if(!(color == 'H' || color == 'D' || color == 'S' || color == 'C'))
 for(;;);
 if(value < 1 || value > 14)
 for(;;);
 return true;
 }
 };
 
 bool operator<(Card c1, Card c2)
 {
 return c1.value < c2.value;
 }
 
 bool operator==(Card c1, Card c2)
 {
 return (c1.value == c2.value) && (c1.color == c2.color);
 }
 
 enum cname {SINGLE = 1, PAIR = 2, FLASH = 3, STREET = 4, THREE = 5, STREETFLASH = 6, MAJOR = 7};
 struct Combination
 {
 cname Name;
 int val;
 Combination() {}
 Combination(Card *cds)
 {
 sort(cds, cds + 3);
 if((cds[0].value == cds[1].value) && (cds[1].value == cds[2].value))
 {
 if(cds[0].value == 3)
 Name = MAJOR;
 else
 {
 Name = THREE;
 val = cds[0].value;
 }
 return;
 }
 if((cds[0].color == cds[1].color) && (cds[1].color == cds[2].color))
 {
 if((cds[0].value + 1 == cds[1].value) && (cds[0].value + 2 == cds[2].value))
 {
 Name = STREETFLASH;
 val = cds[2].value;
 }
 else
 {
 Name = FLASH;
 val = 10000 * cds[2].value + 100 * cds[1].value + cds[0].value;
 }
 return;
 }
 if((cds[0].value + 1 == cds[1].value) && (cds[0].value + 2 == cds[2].value))
 {
 Name = STREET;
 val = cds[2].value;
 return;
 }
 if(cds[1].value == cds[2].value)
 {
 Name = PAIR;
 val = 100 * cds[1].value + cds[0].value;
 return;
 }
 if(cds[1].value == cds[0].value)
 {
 Name = PAIR;
 val = 100 * cds[1].value + cds[2].value;
 return;
 }
 Name = SINGLE;
 val = 10000 * cds[2].value + 100 * cds[1].value + cds[0].value;
 }
 };
 
 bool operator<(Combination c1, Combination c2)
 {
 if((int)c1.Name == (int)c2.Name)
 {
 return c1.val < c2.val;
 }
 return (int)c1.Name < (int)c2.Name;
 }
 
 bool operator==(Combination c1, Combination c2)
 {
 return (c1.Name == c2.Name) && (c1.val == c2.val);
 }
 
 int main()
 {
 #ifndef ONLINE_JUDGE
 freopen("input.txt", "r", stdin);
 freopen("output.txt", "w", stdout);
 #endif
 Card Sasha[3], Dima[5];
 char Winner[3][10] = {"Sasha", "Artyom", "Dima"};
 int dc;
 while(1)
 {
 dc = 3;
 for(int i = 0; i < 3; ++i)
 Sasha[i].in();
 for(int i = 0; i < 3; ++i)
 Dima[i].in();
 dc = 3;
 for(int i = 0; i < 2; ++i)
 {
 Card cheat;
 if(cheat.in() == false)
 return 0;
 bool ok = true;
 for(int k = 0; k < 3; ++k)
 {
 if(cheat == Dima[k] || cheat == Sasha[k])
 {
 ok = false;
 break;
 }
 }
 if(cheat == Dima[dc - 1])
 ok = false;
 if(ok)
 Dima[dc++] = cheat;
 }
 Combination SComb(Sasha);
 Combination DComb;
 int res = 0;
 Card comb[3];
 for(int i = 0; i < dc - 2; ++i)
 {
 comb[0] = Dima[i];
 for(int j = i + 1; j < dc - 1; ++j)
 {
 comb[1] = Dima[j];
 for(int k = j + 1; k < dc; ++k)
 {
 comb[2] = Dima[k];
 DComb = Combination(comb);
 if(SComb < DComb)
 res = 2;
 else if(DComb == SComb)
 res = max(res, 1);
 }
 }
 }
 puts(Winner[res]);
 }
 //    return 0;
 }
 | 
 | 
|