1065: Operations on Grids

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 17  Solved: 4
[Submit][Status][Web
Board
]

Description

你有一个  9  位数字串,现在你把这个数字的每一位填到  3 × 3  格子上。如果数
字是  123456789,那么填到  3 × 3  格子上会得到: 
123
456
789
现在你可以对这  3 × 3  格子做四种操作:

现在给你这个  9  位数字串,你需要做  a  次左旋转操作, b  次右旋转操作, c  次
横向翻转操作,d  次纵向翻转操作,这些操作之间的先后顺序随便你定。 
问最终能得到多少种不同的  3 × 3  格子。两个  3 × 3  格子视为不同,当且仅当
格子中存在至少有一个位置上的数字不同。

Input

输入第一行是一个整数  T,表示有  T  组数据。
每组数据有两行。第一行为一个  9  位的数字串。第二行包含  4  个整数  a, b, c  和
d (0 <= a, b, c, d <= 2)。

Output

对于每组测试数据,输出一个整数表示最终能得到多少种不同的  3 × 3  格子。

Sample Input

1
000000000
1 2 1 2

Sample Output

1

这题开始想了很久——在不知道有几层循环的条件下如何进行暴力?后来发现用字母来代表操作可以比较方便。比如例子1 2 1 2那么每一个数字代表有几次操作,化为字符串就是abbcdd。那么还有一个问题:如何枚举所有情况?用next_permutation即可。忘记把转化的字符串要初始化,WA一次+TLE两次....还有最后改为do-while才AC,while是WA,因为next会直接跳到第二种情况,因此用do-while

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
inline string zuo(const string &s)
{
string t="";
t=t+s[2]+s[5]+s[8]+s[1]+s[4]+s[7]+s[0]+s[3]+s[6];
return t;
}
inline string you(const string &s)
{
string t="";
t=t+s[6]+s[3]+s[0]+s[7]+s[4]+s[1]+s[8]+s[5]+s[2];
return t;
}
inline string heng(const string &s)
{
string t="";
t=t+s[2]+s[1]+s[0]+s[5]+s[4]+s[3]+s[8]+s[7]+s[6];
return t;
}
inline string zong(const string &s)
{
string t="";
t=t+s[6]+s[7]+s[8]+s[3]+s[4]+s[5]+s[0]+s[1]+s[2];
return t;
}
inline string fx(const string &s,string p)//按照字符串进行操作
{
int len=(int)s.size();
for (int i=0; i<len; i++)
{
switch(s[i])
{
case 'a':p=zuo(p);break;
case 'b':p=you(p);break;
case 'c':p=heng(p);break;
case 'd':p=zong(p);break;
}
}
return p;
}
int main(void)
{
ios::sync_with_stdio(false);
string s,t;
int i,T,a,b,c,d;
cin>>T;
while (T--)
{
cin>>s;
cin>>a>>b>>c>>d;
t="";
for (i=0; i<a; i++)//四个for来转化字符串
{
t=t+'a';
}
for (i=0; i<b; i++)
{
t=t+'b';
}
for (i=0; i<c; i++)
{
t=t+'c';
}
for (i=0; i<d; i++)
{
t=t+'d';
}
set<string>sist;
do
{
sist.insert(fx(t,s));
}while (next_permutation(t.begin(),t.end()));
cout<<sist.size()<<endl;
}
return 0;
}

ACM程序设计选修课——1065: Operations on Grids(暴力字符串)的更多相关文章

  1. ACM程序设计选修课——1040: Alex and Asd fight for two pieces of cake(YY+GCD)

    1040: Alex and Asd fight for two pieces of cake Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 27   ...

  2. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  3. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  4. ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

  6. ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)

    Problem D: (ds:树)合并果子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 80  Solved: 4 [Submit][Status][ ...

  7. ACM程序设计选修课——1076汇编语言(重定向+模拟)

    1076: 汇编语言 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 34  Solved: 4 [Submit][Status][Web Board] ...

  8. ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)

    1057: Beautiful Garden Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 25  Solved: 12 [Submit][Statu ...

  9. ACM程序设计选修课——1041: XX's easy problem(神烦的多次字符串重定向处理)

    1041: XX's easy problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 41  Solved: 7 [Submit][Statu ...

随机推荐

  1. Python-OpenCV中的cv2.inpaint()函数

    概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...

  2. 我的offer之路(一)

    目录 1.职业规划. 2.刷题. 3.看书. <剑指offer> <数据结构算法与应用:C++语言描述 > <Effective C++> <C与指针> ...

  3. Unity基础-Input接口

    input 底层的设备输入接口,在开发中很少用到 Input.GetKey() // Update is called once per frame void Update () { if (Inpu ...

  4. docker镜像下载

    获得CentOS的Docker CE 预计阅读时间: 10分钟 要在CentOS上开始使用Docker CE,请确保 满足先决条件,然后 安装Docker. 先决条件 Docker EE客户 要安装D ...

  5. 【Maven】 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    在使用mvn install编译maven项目时,报了 “ (请使用 -source 8 或更高版本以启用 lambda 表达式)”错误,是因为设置的maven默认jdk编译版本太低的问题. 可使用两 ...

  6. 补之前 如何改变jupyter打开文件的路径

    目录 如何改变jupyter打开文件的路径 第一种方法: 第二种方法 第三种方法 如何改变jupyter打开文件的路径 当我们直接打开jupyter时,直接加载的是我们的C盘文件 现在我们想打开其他盘 ...

  7. 2018 Multi-University Training Contest 1 Distinct Values(set)

    题意: t组数据,每组数据给定n,m, 表示有m个约束,每个约束包含 x,y ,代表区间 [x, y] 里的数字不能相同. 让你用所有的正整数构成一个长度为 n 的区间,使得这个区间元素顺序的字典序最 ...

  8. LightOj:1422-Halloween Costumes

    传送门:http://www.lightoj.com/volume_showproblem.php?problem=1422 Halloween Costumes problem descriptio ...

  9. POJ:2955-Brackets(经典:括号匹配)

    传送门:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Description We g ...

  10. markdown快捷键

    分组 功能 操作 快捷键 设置标题 一级标题 Heading1 Ctrl+1 二级标题 Heading2 Ctrl+2 三级标题 Heading3 Ctrl+3 四级标题 Heading4 Ctrl+ ...