枚举法

 #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. JavaScript获取Select下拉框Option的Value和Text值的方法

    Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个 ...

  2. 深入浅出Java 重定向和请求转发的区别

    深入浅出Java 重定向和请求转发的区别 <span style="font-family:FangSong_GB2312;font-size:18px;">impor ...

  3. HTML5 + CSS3 + JavaScript

    http://www.programmer.com.cn/14761/#more-14761 文/李晶 随着互联网产业的爆炸式增长,与之伴生的Web前端技术也在历经洗礼和蜕变.尤其是近几年随着移动终端 ...

  4. mybatis mapper namespace

    http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#insert_update_and_delete org.apache.ibatis.excep ...

  5. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  6. hdu-1598

    思路: 首先如果想到了Kruskal算法,那么下一步我们可能马上会想:那我们就从头开始写这个算法吧.然后一写就很容易发现一个问题——如果按照正常的Kruskal算法来做,那么start到end的舒适度 ...

  7. tomcat主目录

    简单显示天气预报js 代码

  8. LINQ 用法,返回结果不是在定义时取值,而是在调用时实时取值,有意思!

    var names = new List<string> { "Nino o", "Alberto", "Juan", &quo ...

  9. 你需要知道的九大排序算法【Python实现】之堆排序

    六.堆排序 ​堆排序是一种树形选择排序,是对直接选择排序的有效改进. ​堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(h ...

  10. eclipse format的时候如何让@param后不换行