usaco-3.2-msquare-pass

呵呵,这个题目有点意思,要用bfs:

/*
ID: qq104801
LANG: C++
TASK: msquare
*/

#include <iostream>
#include <fstream>
#include <queue>
#include <set>
#include <string>
#include <algorithm>

using namespace std;

struct node{
    int d;
    string st,str;
    node(string _st,string _str,int _d)
    {st=_st;str=_str;d=_d;}
};
string end="";
set<string> ss;
queue<node> q;

node bfs()
{
    string x="12345678";
    if(end==x)return node("","",0);
    q.push(node(x,"",0));
    ss.insert(x);
    while(!q.empty())
    {
        node curr=q.front();
        q.pop();
        string c=curr.st;
        string a(c.rbegin(),c.rend());
        if(a==end) return node(a,curr.str+"A",curr.d+1);
        if(!ss.count(a))
        {
            ss.insert(a);
            q.push(node(a,curr.str+"A",curr.d+1));
        }

        string b(c[3]+c.substr(0,3)+c.substr(5)+c[4]);
        if(b==end)return node(b,curr.str+"B",curr.d+1);
        if(!ss.count(b))
        {
            ss.insert(b);
            q.push(node(b,curr.str+"B",curr.d+1));
        }
        swap(c[1],c[2]);swap(c[1],c[5]);swap(c[1],c[6]);
        if(c==end)return node(c,curr.str+"C",curr.d+1);
        if(!ss.count(c))
        {
            ss.insert(c);
            q.push(node(c,curr.str+"C",curr.d+1));
        }
    }
}

void test()
{
    freopen("msquare.in","r",stdin);
    freopen("msquare.out","w",stdout);

    char c;
    for(int i=0;i<8;i++){
        cin>>c;
        end+=c;
    }
    node n=bfs();
    cout<<n.d<<endl<<n.str<<endl;
}

int main ()
{
    test();
    return 0;
}

test data

USACO Training
Grader Results
8 users online
CHN/4 KGZ/1 MYS/1 SGP/1 TTO/1

USER: cn tom [qq104801]
TASK: msquare
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.019 secs, 3524 KB]
   Test 2: TEST OK [0.003 secs, 3524 KB]
   Test 3: TEST OK [0.016 secs, 3524 KB]
   Test 4: TEST OK [0.005 secs, 3524 KB]
   Test 5: TEST OK [0.046 secs, 4052 KB]
   Test 6: TEST OK [0.092 secs, 4712 KB]
   Test 7: TEST OK [0.159 secs, 5636 KB]
   Test 8: TEST OK [0.270 secs, 6032 KB]

All tests OK.

YOUR PROGRAM (‘msquare‘) WORKED FIRST TIME! That‘s fantastic -- and a rare thing. Please accept these special automated congratulations.

Here are the test data inputs:

------- test 1 ----
2 6 8 4 5 7 3 1
------- test 2 ----
1 2 3 4 5 6 7 8
------- test 3 ----
6 7 4 1 8 5 2 3
------- test 4 ----
5 1 2 4 3 7 8 6
------- test 5 ----
6 1 5 4 3 2 7 8
------- test 6 ----
4 1 2 3 5 8 7 6
------- test 7 ----
3 4 2 1 5 6 7 8
------- test 8 ----
4 3 1 2 5 6 7 8

Keep up the good work!
Thanks for your submission!
时间: 2024-10-01 05:54:34

usaco-3.2-msquare-pass的相关文章

USACO 3.2 msquare 裸BFS

又是个裸BFS... 和西安网赛那道1006一样的,只不过加上了要记录方案.顺便复习map 记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操作序列记下来 1 /* 2 PROB:msquare 3 LANG:C++ 4 */ 5 6 #include <iostream> 7 #include <vector> 8 #include <algorithm> 9 #include <map> 10 #

[usaco3.2.5]msquare

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/msquare 这道题bfs+hash,但想到要判重的数字不多,就直接用了map,数组传递有些麻烦,所以直接写在了一起,会有点乱 /* ID:abc31261 LANG:C++ TASK:msquare */ #include<cstdio> #include<cstring> #include<queue> #include<map> #include&

Usaco Open09 Gold

Problem 1: Ski Lessons [Brian Jacokes, 2002] Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good skier. Bessie has learned that the ski resort is offering S (0 <= S <= 100) ski classes throughout the day. Les

【USACO 3.2.5】魔板

[描述] 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8种颜色用前8个正整数来表示.可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列.对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示.这是基本状态. 这里提供三种基本操作,分别用大写字母“A”,“B”,“C”来表示(可以通过这些操作改变魔板的状

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

USACO prefix TrieTree + DP

/* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>

【USACO 1.3.4】牛式

[題目描述 ] 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ---------- * * * * * * ---------- * * * * 数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0. 注意一下在美国的学校中教的"部分乘积",第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积. 写一个程序找出所有的牛式. [格式] INPUT FORMAT: (f

USACO Chapter 1 Section 1.1

USACO的题解和翻译已经很多了... 我只是把自己刷的代码保存一下. 1.PROB Your Ride Is Here 1 /* 2 ID:xiekeyi1 3 PROG:ride 4 LANG:C++ 5 */ 6 7 #include<bits/stdc++.h> 8 using namespace std ; 9 10 int main() 11 { 12 freopen("ride.in","r",stdin); 13 freopen(&quo

pass语句

Python pass是空语句,是为了保持程序结构的完整性.  pass 不做任何事情,一般用做占位语句. #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Python 的每个字母 for letter in 'Python': if letter == 'h': pass print '这是 pass 块' print '当前字母 :', letter print "Good bye!" 执行结果: 当前字母 : P 当前字母 : y 当

USACO Your Ride Is Here

[USACO]Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often come to collect loyal supporters from here on Earth. Unfortunately, they only have room to pick up one group of followers on each trip. They do,