UVALive 6163 - Myth Busters
2013-08-20 10:13
399 查看
状态压缩dp。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<sstream>
#include<vector>
#include<string>
#include<bitset>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define FF(i, a, b) for(int i=a; i<b; i++)
#define REP(i, n) for(int i=0; i<n; i++)
#define FD(i, a, b) for(int i=a; i>=b; i--)
#define CLR(a, b) memset(a, b, sizeof(a))
#define debug puts("**debug**")
#define PB push_back
#define LL long long
const int N = 11111;
using namespace std;
set <int> dp[17];
set <int> :: iterator lt;
set <int> :: iterator kt;
bool get(char tmp[])
{
int i, j, k, l;
i = 0;
for(i = 0; i < 16; i ++) dp[i].clear();
for(i = 0; i < 4; i ++)
{
dp[(1 << i)].insert(tmp[i] - '0');
}
for(i = 1; i < 16; i ++)
{
for(j = 1; j < i; j ++)
{
if((i & j) == j)
{
for(kt = dp[i-j].begin(); kt != dp[i-j].end(); kt++)
{
for(lt = dp[j].begin(); lt != dp[j].end(); lt++)
{
k = *kt, l = *lt;
dp[i].insert(k + l);
dp[i].insert(k * l);
dp[i].insert(abs(l - k));
if(l) dp[i].insert(k / l);
if(k) dp[i].insert(l / k);
}
}
}
}
}
return dp[15].count(10);
}
int main()
{
//freopen("input.txt", "r", stdin);
int n, i, j, flag;
char tmp[6];
while(cin >> n, n)
{
flag = 1;
while(n --)
{
cin >> tmp;
if(!get(tmp)) flag = 0;
}
if(flag) cout << "TRUE" << endl;
else cout << "BUSTED" << endl;
}
return 0;
}
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<sstream>
#include<vector>
#include<string>
#include<bitset>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define FF(i, a, b) for(int i=a; i<b; i++)
#define REP(i, n) for(int i=0; i<n; i++)
#define FD(i, a, b) for(int i=a; i>=b; i--)
#define CLR(a, b) memset(a, b, sizeof(a))
#define debug puts("**debug**")
#define PB push_back
#define LL long long
const int N = 11111;
using namespace std;
set <int> dp[17];
set <int> :: iterator lt;
set <int> :: iterator kt;
bool get(char tmp[])
{
int i, j, k, l;
i = 0;
for(i = 0; i < 16; i ++) dp[i].clear();
for(i = 0; i < 4; i ++)
{
dp[(1 << i)].insert(tmp[i] - '0');
}
for(i = 1; i < 16; i ++)
{
for(j = 1; j < i; j ++)
{
if((i & j) == j)
{
for(kt = dp[i-j].begin(); kt != dp[i-j].end(); kt++)
{
for(lt = dp[j].begin(); lt != dp[j].end(); lt++)
{
k = *kt, l = *lt;
dp[i].insert(k + l);
dp[i].insert(k * l);
dp[i].insert(abs(l - k));
if(l) dp[i].insert(k / l);
if(k) dp[i].insert(l / k);
}
}
}
}
}
return dp[15].count(10);
}
int main()
{
//freopen("input.txt", "r", stdin);
int n, i, j, flag;
char tmp[6];
while(cin >> n, n)
{
flag = 1;
while(n --)
{
cin >> tmp;
if(!get(tmp)) flag = 0;
}
if(flag) cout << "TRUE" << endl;
else cout << "BUSTED" << endl;
}
return 0;
}
相关文章推荐
- ACM 计算器 类似24点 UVALive 6163 Myth Busters
- 【UVALive】6163 Myth Busters 类24点
- UVALive 6163
- UVALive 6163(暴力枚举)
- UVALive 4881
- UVALive 5058 Counting BST 数学
- UVa 1586 / UVALive 3900 Molar mass (字符串)
- UVAlive 6697 - Homework Evaluation(DP)
- UVA10041 UVALive2202 Vito's Family【中位数+排序】
- UVALive 5983 MAGRID
- UVa 227 / UVALive 5166 Puzzle 谜题 (结构体)
- UVALive 5871 Arnooks's Defensive Line (cdq分治)
- UVALive 7269 (构造)
- UVALive 6886 Golf Bot 桶排+剪枝
- UVALive 4794 Sharing Chocolate(状压,枚举子集)
- uvalive 6609 - Minimal Subarray Length(离散化+树状数组)
- UVALive 4870 Roller Coaster --01背包
- UVALive 4643 Twenty Questions
- UVALive 3621 Power Calculus n次幂最少需要几次乘除得到 搜索
- UVA355 UVALive5249 The Bases Are Loaded【进制】