2269.cpp

来自「哈尔滨工业大学ACM 竞赛网上在线试题集锦的源代码」· C++ 代码 · 共 41 行

CPP
41
字号
/*  This Code is Submitted by wywcgs for Problem 2269 on 2006-07-26 at 10:04:47 */ 
#include <cstdio>
#include <algorithm>
using namespace std;
 
const int CN = 13;
 
int main()
{
	int cd[CN], ap[CN], i, j, k;
	
	while(true) {
		memset(ap, 0, sizeof(ap));
		for(i = 0; i < CN; i++)
			if(scanf("%d", &cd[i]) != 1) return 0;
			else ap[cd[i]]++;
		int pn = 0;
		for(i = 1; i < 10; i++) {
			int ncd[CN]; memcpy(ncd, ap, sizeof(ap));
			ncd[i]++; bool can;
			for(j = 1; j < 10; j++) {
				if(ncd[j] < 2) continue;
				can = true;
				int tmp[CN]; memcpy(tmp, ncd, sizeof(tmp));
				tmp[j] -= 2;
				for(k = 1; k < 8 && can; k++) {
					tmp[k] %= 3;
					while(tmp[k] != 0)
						if(tmp[k+1] && tmp[k+2]) { tmp[k]--; tmp[k+1]--; tmp[k+2]--; }
						else { can = false; break; }
				}
				if(tmp[8]%3 || tmp[9]%3) can = false;
				if(can) break;
			}
			if(can && ap[i] != 4) { printf("%s%d", pn == 0 ? "" : " ", i); pn++; }
		}
		if(pn == 0) printf("no solution");
		putchar('\n');
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?