枚举法

 #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. Css3案例

    <!DOCTYPE html> <html> <meta charset=utf-> <head> <style> body{ backgo ...

  2. innerHTML的运用

    <!doctype html> <html> <style> li{float:left;margin:0 100px;color:red;} </style ...

  3. 使用 Nuget打包类库

    使用 Nuget打包类库 NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget ...

  4. web安全:HTTPS

    E1:搭建zoobar网站开启apache服务和mysql服务service apache2 startservice mysql start 建立数据库和表mysql->create data ...

  5. build.prop各种优化代码

    1.首先要准备RE管理器以及root权限.2.在根目录里的system文件夹找到build.prop文件.3.打开build.prop文件后找到代码ro.sf.lcd_density=240(这里的2 ...

  6. 转:成为JavaGC专家Part I — 深入浅出Java垃圾回收机制

    文章来自于:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解 ...

  7. Update主循环、状态机的实现

    从写一段程序,到写一个app,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已. 游戏中存在一个帧的概念.   这个概念大家都知道,类比的话,它就是电影胶卷的 ...

  8. Oracle 序列(sequence)

    序列是Oracle特有的,他可以维护一个自增的数字序列,通常从1开始增长,但可以设置. (1)创建序列: increment (2)使用序列: insert into student(sno,name ...

  9. Altium Designer6打印PCB转印纸设置方法

    在学校经常要用热转印法做一些简单的PCB板,自己用的AD6.6,学校的打印店用99的比较多,这就造成打印不方便.为了充分利用自己实验室的打印机,今天买回来两张PCB打印纸.发现用AD6打印同比例的PC ...

  10. WIN7下关闭驱动数字签名检查的方法

    内容是转的,最后一步貌似没什么用处,水印是去不掉的,不过也无所谓,关键是驱动能用了,要不完全瞎了 实测win7 32位旗舰版可用   ================================= ...