枚举法

 #include <cstdio>
using namespace std; int main()
{
int t, n, i, j, k;
scanf("%d", &t);
char f[][];
for(i = ; i <= ; i++)
sprintf(f[i], "%04d", i); while(t--)
{
scanf("%d", &n);
char G[][], A[], B[];
for(i = ; i < n; i++)
scanf("%s %d/%d", G[i], &A[i], &B[i]); int cnt = , ans;
char s[];
for(i = ; i <= ; i++)
{
s[] = f[i][];
s[] = f[i][];
s[] = f[i][];
s[] = f[i][];
for(j = ; j < n; j++)
{
int num[] = {}, a = , b = ; for(k = ; k < ; k++)
num[G[j][k] - ''] ++; for(k = ; k < ; k++)
if(num[s[k]-''] > )
b++, num[s[k]-'']--; for(k = ; k < ; k++)
if(s[k] == G[j][k])
a++, b--; if(A[j] == a && B[j] == b) continue;
else break;
}
if(j == n)
{
cnt ++;
ans = i;
if(cnt == )
break;
}
}
if(cnt == ) printf("%04d\n", ans);
else if(cnt == ) puts("impossible");
else puts("indeterminate");
}
return ;
}
 #include <iostream>
#include <set>
#include <stdio.h> using namespace std;
struct Combination {
int num[];
int taken[];
Combination(int N) {
for (size_t i = ; i < ; i++)
num[i] = N % , N /= , taken[i] = ;
}
int matches(Combination & o) {
int count = ;
for (size_t i = ; i < ; i++) {
if (this->num[i] == o.num[i]) {
count++;
taken[i] = o.taken[i] = ;
}
}
return count;
}
int contains(Combination & o) {
int count = ;
for (int i = ; i < ; i++) {
if (taken[i])
continue;
for (int j = ; j < ; j++) {
if (o.taken[j])
continue;
if (o.num[j] == num[i]) {
count++;
taken[i] = o.taken[j] = ;
}
}
}
return count;
}
};
struct Guess {
int n, r, w;
Combination com;
Guess() :
r(), w(), com(Combination()) {
}
;
Guess(int N, int R, int W) :
n(N), r(R), w(W), com(Combination(N)) {
}
bool apply(Combination& c) {
int m = com.matches(c), co = com.contains(c);
return m == r && co == w;
}
void reset() {
com = Combination(n);
}
};
int main(void) {
int T, g, N, R, W; scanf("%d", &T);
while (T--) {
scanf("%d", &g);
Guess guesses[g];
for (size_t i = ; i < g; i++) {
scanf("%d %d/%d", &N, &R, &W);
guesses[i] = Guess(N, R, W);
}
int matches = ;
Combination match();
for (int n = ; n < ; n++) {
for (size_t i = ; i < g; i++) {
guesses[i].reset();
}
bool applyToAll = true; Combination abc = Combination(n); if (abc.valid())
for (size_t i = ; i < g; i++) {
Combination ab = Combination(n);
applyToAll &= guesses[i].apply(ab);
} if (applyToAll) {
matches++;
match = Combination(n);
}
}
if (!matches)
printf("impossible\n");
else if (matches == )
printf("%d%d%d%d\n", match.num[], match.num[], match.num[], match.num[]);
else if (matches > )
printf("indeterminate\n");
}
return ;
}

uva 296 - Safebreaker的更多相关文章

  1. Fast Matrix Operations(UVA)11992

    UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...

  2. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  3. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  4. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  5. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  6. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  7. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

  8. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  9. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

随机推荐

  1. centos6.2下安装星际译王stardict3.0

    星际译王是一个Linux下很好的翻译软件. 我的系统是centos6.2 32位版.本来在http://code.google.com/p/stardict-3/downloads/list 上下的源 ...

  2. iOS开发——C篇&函数解析

    关于函数,作为一个开发者事必须掌握的知识不管你在那一个领域,所以今天我就来说一说函数. 一:函数的介绍 关于函数,其实笔者在前面都已经演示不少了,其中用的最多的就是main函数,虽然直接说函数可能不太 ...

  3. Struts2请求处理流程及源码分析

    1.1 Struts2请求处理 1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionConte ...

  4. CSS浮动属性Float详解

    什么是CSS Float? float 是 css 的定位属性.在传统的印刷布局中,文本可以按照需要围绕图片.一般把这种方式称为“文本环绕”.在网页设计中,应用了CSS的float属性的页面元素就像在 ...

  5. 18个SaaS及其功能评价

    SAAS软件及其功能评价1. 360 两个同步功能都不错,却被埋没了2. 够快云3. DBFen4. Seafile5. 坚果云6. DZ7. 百度云8. 1159. 迷你云10. 微云11. Dro ...

  6. Android中观察者模式的升入理解

    以前对Java中的观察者模式只知道一点皮毛,在接触Android的过程中,逐渐认识到观察者模式是如此的重要,android中许多地方都用到了观察者模式例如ContentResolver操作,来总结一下 ...

  7. 如何打一手好Log(转)

    如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...

  8. 【转】JAVA 读写二进制文件

    原文网址:http://shiminghua234.blog.163.com/blog/static/263912422011619102350866 import java.io.*; /** * ...

  9. 【转】android UI进阶之实现listview中checkbox的多选与记录--不错

    原文网址:http://www.cnblogs.com/notice520/archive/2012/02/17/2355415.html 今天继续和大家分享涉及到listview的内容.在很多时候, ...

  10. Android adb

    查看原文:http://blog.csdn.net/u010818425/article/details/52266593 (一)基础操作 安装app adb install -r xxx.apk / ...