Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

哪位大神给看看一直RE什么情况

Posted by 134215090059 at 2016-01-28 11:36:25 on Problem 3414
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>

using namespace std;

#define N 106
#define met(a, b) memset (a, b, sizeof (a))

typedef long long LL;
//const int INF = ((1<<31)-1);

struct node
{
    int prea, preb, op;
}pots[N][N];

struct node1
{
    int a, b, step;

    bool friend operator < (const node1 &a, const node1 &b)
    {
        return a.step > b.step;
    }
}pre, p;

int vis[N][N], a, b, c, flag, path[N*20000];

node1 BFS ()
{
    priority_queue <node1> que;

    pre.a = pre.b = pre.step = 0;
    pots[0][0].prea = pots[0][0].preb = pots[0][0].op = 0;

    met (vis, 0);
    vis[0][0] = 1;

    que.push (pre);

    while (que.size())
    {
        pre = que.top(); que.pop();

        if (pre.a == c || pre.b == c)
        {
            flag = 1;
            return pre;
        }

        for (int i=1; i<=6; i++)
        {
            if (i == 1)//FILL(a)
            {
                p.a = a;
                p.b = pre.b;
            }

            else if (i == 2)//FILL(b)
            {
                p.a = pre.a;
                p.b = b;
            }

            else if (i == 3)//DROP(a)
            {
                p.a = 0;
                p.b = pre.b;
            }

            else if (i == 4)//DROP(b)
            {
                p.a = pre.a;
                p.b = 0;
            }

            else if (i == 5)//POUR(a, b)
            {
                if (pre.b + pre.a > b)
                {
                    p.a = pre.a - (b-pre.b);
                    p.b = b;
                }
                else
                {
                    p.a = 0;
                    p.b = pre.a + pre.b;
                }
            }

            else//POUR(b, a)
            {
                if (pre.a + pre.b > a)
                {
                    p.a = a;
                    p.b = pre.b - (a-pre.a);
                }
                else
                {
                    p.a = pre.a + pre.b;
                    p.b = 0;
                }
            }

            if (!vis[p.a][p.b])
            {
                vis[p.a][p.b] = 1;
                p.step = pre.step + 1;

                pots[p.a][p.b].prea = pre.a;
                pots[p.a][p.b].preb = pre.b;
                pots[p.a][p.b].op = i;

                que.push (p);
            }
        }
    }
}

int main ()
{
    node1 ans;
    int i, x, y, step;

    while (scanf ("%d %d %d", &a, &b, &c) != EOF)
    {
        met (path, 0);
        flag = 0;

        ans = BFS ();

        if (!flag)
        {
            puts ("impossible");
            continue;
        }

        printf ("%d\n", ans.step);

        step = ans.step;
        x = ans.a, y = ans.b;

        for (i=step; i>=1; i--)
        {
            path[i] = pots[x][y].op;
            int xx = x;
            x = pots[xx][y].prea;
            y = pots[xx][y].preb;
        }

        for (i=1; i<=step; i++)
        {
            if (path[i] == 1) puts ("FILL(1)");
            if (path[i] == 2) puts ("FILL(2)");
            if (path[i] == 3) puts ("DROP(1)");
            if (path[i] == 4) puts ("DROP(2)");
            if (path[i] == 5) puts ("POUR(1,2)");
            if (path[i] == 6) puts ("POUR(2,1)");
        }
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator