Designer, selects a secret code. The other, Breaker, tries to break it. A code is no more than a row of colored dots. At the beginning of a game, the players agree upon the length N that a code must have and upon the colors that may occur in a code.
match is a pair (i,j), and , such that . Match (i,j) is called strong when i =j, and is called weak otherwise. Two matches (i,j) and (p,q) are called independent when i = p if and only if j = q. A set of matches is called independent when all of its members are pairwise independent.
M of matches for which the total number of matches and the number of strong matches are both maximal. The hint then consists of the number of strong followed by the number of weak matches in M. Note that these numbers are uniquely determined by the secret code and the guess. If the hint turns out to be (n,0), then the guess is identical to the secret code.
N (the length of the code). Following these will be the secret code, represented as N integers, which we will limit to the range 1 to 9. There will then follow an arbitrary number of guesses, each also represented as N integers, each in the range 1 to 9. Following the last guess in each game will be N zeroes; these zeroes are not to be considered as a guess.
N. The last game in the input will be followed by a single zero (when a value for N would normally be specified). The maximum value for N will be 1000.
exact format.
41 3 5 51 1 2 34 3 3 56 5 5 16 1 3 51 3 5 50 0 0 0101 2 2 2 4 5 6 6 6 91 2 3 4 5 6 7 8 9 11 1 2 2 3 3 4 4 5 51 2 1 3 1 5 1 6 1 91 2 2 5 5 5 6 6 6 70 0 0 0 0 0 0 0 0 00
Game 1: (1,1) (2,0) (1,2) (1,2) (4,0)Game 2: (2,4) (3,2) (5,0) (7,0)
i,j) is called strong when i =j, and is called weak otherwise.
i,j) and (p,q) are called independent when i = p if and only if j = q. A set of matches is called independent when all of its members are pairwise independent.
M of matches for which the total number of matches and the number of strong matches are both maximal.
M.
相同列相同數位統計一遍,然後相同列相同數字對應的個數減一。
統計1~9在兩序列中出現的個數,每個數字加其再兩個序列中出現個數的較小值,詳見代碼。
/*0.019s*/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int s[1005], g[1005];int a[15], b[15], c[15];int main(void){int cas = 0, n;while (scanf("%d", &n), n){memset(c, 0, sizeof(c));for (int i = 0; i < n; i++){scanf("%d", &s[i]);c[s[i]]++;}printf("Game %d:\n", ++cas);while (true){memcpy(a, c, sizeof(c));// 技巧:用memcpy將c[]中統計的1-9的數的個數賦給a[]memset(b, 0, sizeof(b));for (int i = 0; i < n; i++){scanf("%d", &g[i]);b[g[i]]++;}if (!g[0]) break;int x = 0, y = 0;for (int i = 0; i < n; i++)if (s[i] == g[i]){a[s[i]]--;b[s[i]]--;x++;}for (int i = 1; i <= 9; i++)y += min(a[i], b[i]);printf(" (%d,%d)\n", x, y);}}return 0;}