ACM程序设计选修课——1065: Operations on Grids(暴力字符串)
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(暴力字符串)的更多相关文章
- 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 ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)
问题 E: (ds:图)公路村村通 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...
- ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)
问题 F: (ds:图)旅游规划 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- ACM程序设计选修课——1018: Common Subsequence(DP)
问题 L: Common Subsequence 时间限制: 1 Sec 内存限制: 32 MB 提交: 70 解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...
- ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)
Problem D: (ds:树)合并果子 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 80 Solved: 4 [Submit][Status][ ...
- ACM程序设计选修课——1076汇编语言(重定向+模拟)
1076: 汇编语言 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 34 Solved: 4 [Submit][Status][Web Board] ...
- ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)
1057: Beautiful Garden Time Limit: 5 Sec Memory Limit: 128 MB Submit: 25 Solved: 12 [Submit][Statu ...
- 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 ...
随机推荐
- AE开发关于OnMapReplaced方法的使用原理
The OnMapReplaced event is triggered whenever the IMapControl2::Map is replaced by another map, such ...
- CF Gym 100637A Nano alarm-clocks
题意:给你一些钟的时间,只可以往后调, 问最少调的时间总和是多少 题解:因为肯定是调到某个出现过时间的,只要枚举时间,在维护一个前缀和快速计算出时间总和就行了. #include<cstdio& ...
- 10.1 plan
1951 [Sdoi2010]古代猪文 Sdoi2010 Contest2 807 1928 1566 [NOI2009]管道取珠 806 1429 2756 [S ...
- 多线程程序设计-Thread的一些方法
run():是程序中会和会和其他线程“同时”执行的部分. wait():使得当前线程进入等待状态,等待的线程不会主动进入到线程队列中排队等待cpu资源,必须由其他线程调用notify()方法通知它 ...
- vue props 传入对象Object,如果外层更改属性,默认里面是不更新,需要使用 this.$set(this.datese1, 'xsfaDateYear1', '')
vue props 传入对象Object,如果外层更改属性,默认里面是不更新,需要使用 this.$set(this.datese1, 'xsfaDateYear1', '')
- 2018.5.4 AndroidStudio遇到的问题
新建项目初出现异常报错 Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict 发生这类型的错误, ...
- C++容器类-list
C++ 表(List容器类) 一.概念 头文件:#include <list> 又叫链表,是一种双线性链表,只能顺序访问(从前往后或从后往前) 他不支持随机访问. 二.方法 #includ ...
- C++ 内存分配操作符new和delete详解
重载new和delete 首先借用C++ Primer 5e的一个例子: string *sp = new string("a value"); ]; 这其实进行了以下三步操作: ...
- ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解
ORACLE中RECORD.VARRAY.TAB.IS REF CURSOR LE的使用及实例详解 create or replaceprocedure PRO_RECORD_ROW_TAB_EXAM ...
- 将unity3d项目嵌入到Android App中使用
创建一个新的AndroidStudio app项目. 1.添加库文件:拷贝unity安装目录下的库文件:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\ ...