枚举法

 #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. js 邮箱正则匹配

    $(function(){ var valAttr = '746979855qq.com'; \-])+\.)+([a-zA-Z0-]{,})+$/; var tmpresult = mail_fil ...

  2. Css3动态伪类

    通常我们可以用CSS中伪类和js中的鼠标事件来定义. 动态伪类 起作用的元素 描述 :link 只有链接 未访问的链接 :visited 只有链接 访问过的链接 :hover 所有元素 鼠标经过元素 ...

  3. PHP学习系列(1)——字符串处理函数(3)

    11.crc32() 函数计算一个字符串的 crc32 多项式.生成 string 参数的 32 位循环冗余校验码多项式.该函数可用于验证数据的完整性. 语法:crc32(string) 注意:由于 ...

  4. C程序设计语言练习题1-15

    练习1-15 重新编写1.2节中的温度转换程序,使用函数实现温度转换计算. 代码如下: #include <stdio.h> // 包含标准库的信息. float fahrToCelsiu ...

  5. 利用FbinstTool+大白菜u盘工具,制作多系统启动U盘【转】

    一般制作多系统启动盘的教程都会要用到rub4dos+grubinst+ultraiso+msgdiyerl等等工具,一大串的工具列表让人望而生畏.其实大白菜里已经对这些工具做了非常好的封装,利用大白菜 ...

  6. ASP.NET Web.Config 读资料 (学习笔记)

    refer : http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 上面这篇写很好了. 在做项目时,我们经常会遇到一些资料,我 ...

  7. Open Wifi SSID Broadcast vulnerability

    Open Wifi SSID Broadcast vulnerability 0x00 前言 前几天,看到微博上@RAyH4c分享了一份老外关于wifi钓鱼的文章,觉得挺好的,便翻译了一下.第一次翻译 ...

  8. Delphi 调试BPL包中引用另外的BPL的方法。

    在实际程序中,遇到1.bpl 引用了2.bpl中的方法,2.bpl的方法进入后又引用了3.bpl ,刚开始挺蒙,怎么调试呢,  其实bpl就是dll, 故, 1.我在Delphi的run->pa ...

  9. 笔记:java并发编程实践1

    Java 5.0 adds ConcurrentHashMap, a replacement for synchronized hash-based Map implementations, and ...

  10. Android中几种常用的话框

    1.普通对话框: Builder alert=new AlertDialog.Builder(MainActivity.this); alert.setTitle("提示"); a ...