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. Spring Mybatis PageHelper 设置使用

    PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工. 设置 现在使用的是PageHelper 5.0 版本 : 在build.gradle先引用jar包: ...

  2. 2018.2.28 PHP中使用jQuery+Ajax实现分页查询多功能如何操作

    PHP中使用jQuery+Ajax实现分页查询多功能如何操作 1.首先做主页Ajax_pag.php 代码如下 <!DOCTYPE html> <html> <head& ...

  3. docker单主机网络

    当你安装Docker时,它会自动创建三个网络.你可以使用以下docker network ls命令列出这些网络: [root@localhost ~]# docker network ls NETWO ...

  4. centos7中文显示为小方块~~啊啊啊 求大佬们解答

    这个问题困扰我很久了,刚好前几天注册了博客园,就想问问大佬们是怎么解决中文显示小方块的? 我试了很多办法,包括但不限于修改i18n配置文件,locale.conf,添加中文字体库等等等... 但都没有 ...

  5. MySQL中同时存在创建和更新时间戳字段解决方法浅析

    MySQL中同时存在创建和更新时间戳字段解决方法浅析 明确我的MySQL版本.mysql> SELECT VERSION();+------------+| VERSION() |+------ ...

  6. 01_8_session

    01_8_session 1. session总结 1.1服务器的一块内存(存key-value) 1.2和客户端窗口对应(子窗口)(独一无二) 1.3客户端和服务器有对应的SessionID 1.4 ...

  7. 接口的定义——默认加public abstract默认全局常量;与继承不同,子类可以同时实现多个接口;抽象类实现接口;接口继承接口

    一. 接口的定义 接口中定义的方法,全部都为抽象方法,默认加public abstract 接口中定义的变量,全部为全局常量,默认加public static final 二.与继承不同,子类可以同时 ...

  8. 【转】BP神经网络

    学习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中,学习算法的研究有着十分重要的地位.目前,人们所提出的神经网络模型都是和学习算 法相应的.所以,有时人们并不去祈求对模型和算法进行严格 ...

  9. 消息队列之 Kafka

    转 https://www.jianshu.com/p/2c4caed49343 消息队列之 Kafka 预流 2018.01.15 16:27* 字数 3533 阅读 1114评论 0喜欢 12 K ...

  10. 地理位置编码geohash学习笔记

    1.geohash及其性质 一种空间索引技术. (1)将二维的经纬度位置数据转换为一维的字符串(基本上hash族的算法都是这样): 其优点在于hash编码后的字符串,可以方便查找和索引,从而减少相似计 ...