uva 296 - Safebreaker
枚举法
#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的更多相关文章
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- 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 ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
随机推荐
- HTTPS 服务器搭建
利用NGINX搭建HTTPS服务器不是一件困难的事情,过程包括以下几步 第一步:利用OpenSSL制作证书 第二步:安装NGINX,configure中保证加入ngx_http_ssl_module. ...
- Struts2请求处理流程及源码分析
1.1 Struts2请求处理 1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionConte ...
- recovery编译汉化源码开源地址
本Recovery基于xiaolu开源的不完全汉化版源码,进行完全汉化,并合并Philz的最新源码. 汉化耗费我将近一整天的精力,纯手打,可能有遗漏或翻译不准的地方,请到微博反馈 本Rec完全开源,便 ...
- 2015年6月股灾永远载入A股史册
之前很奇怪这次牛市行情的暴涨与暴跌,后来发现成交量是以往不可想象的,而这一切的源头就是融资融券,也就是杠杆. 杠杆的作用是无穷的,就像阿基米德说的那样“给我一个支点,我就能撬起地球”. 杠杆是个放大器 ...
- 转: ubuntu配置NFS,挂载开发板
====================================== 命令: 1. $sudo apt-get install nfs-kernel-server (安装N ...
- Linux服务器间信任关系建立方法
http://blog.csdn.net/jiangzeyun/article/details/42489359
- HDOJ 1236 排名(练耐心题)
Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通 ...
- HDU 2187 A sequence of numbers
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2817 题意: 给定三个数,判断是等差数列还是等比数列,然后输出第k项. 做法:直接判断即可 #inc ...
- hadoop2.2.0的ha分布式集群搭建
hadoop2.2.0 ha集群搭建 使用的文件如下: jdk-6u45-linux-x64.bin hadoop-2.2.0.x86_64.tar zookeeper-3.4.5. ...
- 面试al tx
阿里: 一面: 1:写代码,给三个数组abc,每个数组若干数字,判断一个数字在不在三个数组中.用的map解决. 2:例举知道的排序,写出归并排序代码. 3:剩下的都是小题目了:包括三次握手,tc ...