UVaOJ10344 - 23 out of 5

来源:互联网 发布:淘宝上很便宜的化妆品 编辑:程序博客网 时间:2024/05/22 17:05

10344 - 23 out of 5

Time limit: 3.000 seconds

Your task is to write a program that can decide whether you can find an arithmetic expression consisting of five given numbers (1<=i<=5) that will yield the value 23.
For this problem we will only consider arithmetic expressions of the following from:

 
where : {1,2,3,4,5} -> {1,2,3,4,5} is a bijective function
and  {+,-,*} (1<=i<=4)

Input

The Input consists of 5-Tupels of positive Integers, each between 1 and 50.
Input is terminated by a line containing five zero's. This line should not be processed.

Output

For each 5-Tupel print "Possible" (without quotes) if their exists an arithmetic expression (as described above) that yields 23. Otherwise print "Impossible".

Simple Input

1 1 1 1 1
1 2 3 4 5
2 3 5 7 11
0 0 0 0 0

Simple Output

Impossible
Possible
Possible

Thomas Strohmann

#include <iostream>#include <cstring>#include <cstdio>using namespace std;long a[6], t[6];bool vis[6], can;void dfs2(int depth, long nowsum) {    if (can) return;    if (depth > 5) {        if (nowsum == 23) {            can = true;        }        return;    }    dfs2(depth + 1, nowsum + t[depth]);    dfs2(depth + 1, nowsum - t[depth]);    dfs2(depth + 1, nowsum * t[depth]);}void dfs1(int depth) {    if (can) return;    if (depth > 5) {        dfs2(2, t[1]);        return;    }    for (int i = 1; i <= 5; i ++) {        if (!vis[i]) {            vis[i] = true;            t[depth] = a[i];            dfs1(depth + 1);            vis[i] = false;        }    }}int main() {    while (scanf("%ld%ld%ld%ld%ld", &a[1], &a[2], &a[3], &a[4], &a[5]) == 5) {        long sum = 0;        for (int i = 1; i <= 5; i ++) {            sum += a[i];        }        if (sum == 0) {            break;        }        memset(t, 0, sizeof(t));        memset(vis, false, sizeof(vis));        can = false;        dfs1(1);        if (can) {            printf("Possible\n");        } else {            printf("Impossible\n");        }    }    return 0;}


原创粉丝点击