BNUOJ 6378 无题I
无题I
This problem will be judged on HDU. Original ID: 2234
64-bit integer IO format: %I64d Java class name: Main
Input
对于每组数据输入4行,每行4列表示这个矩阵。
Output
Sample Input
- 2
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 2 3 4 1
- 4 1 1 1
- 1 2 2 2
- 2 3 3 3
- 3 4 4 4
Sample Output
- 1
- 1
Source
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <climits>
- #include <vector>
- #include <queue>
- #include <cstdlib>
- #include <string>
- #include <set>
- #define LL long long
- #define INF 0x3f3f3f3f
- using namespace std;
- int g[][],ans;
- bool check(int (*t)[]){
- int i,j;
- bool flag = false;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- if(t[j][i] != t[j-][i]) {flag = true;break;}//检查每一列
- if(flag) break;
- }
- if(!flag) return true;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- if(t[i][j] != t[i][j-]) {flag = false;break;}
- if(!flag) break;
- }
- return flag;
- }
- void shift(int (*t)[],int dir,int u){
- int i,temp;
- if(dir == ){//行左移
- temp = t[u][];
- for(i = ; i < ; i++)
- t[u][i] = t[u][i+];
- t[u][i] = temp;
- }else if(dir == ){//行右移
- temp = t[u][];
- for(i = ; i; i--)
- t[u][i] = t[u][i-];
- t[u][i] = temp;
- }else if(dir == ){//列上移
- temp = t[][u];
- for(i = ; i < ; i++)
- t[i][u] = t[i+][u];
- t[i][u] = temp;
- }else if(dir == ){//列下移
- temp = t[][u];
- for(i = ; i; i--)
- t[i][u] = t[i-][u];
- t[i][u] = temp;
- }
- }
- bool dfs(int (*t)[],int step){
- int mp[][],i,j,k;
- if(ans == step && check(t)) return true;
- if(ans <= step) return false;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++){
- memcpy(mp,t,sizeof(mp));
- shift(mp,j,i);
- if(dfs(mp,step+)) return true;
- }
- }
- return false;
- }
- int main(){
- int ks,i,j;
- scanf("%d",&ks);
- while(ks--){
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- scanf("%d",g[i]+j);
- }
- if(check(g)) {puts("");continue;}
- for(ans = ; ans < ; ans++)
- if(dfs(g,)) break;
- printf("%d\n",ans<?ans:-);
- }
- return ;
- }
优化了下,效果不明显啊!
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <climits>
- #include <vector>
- #include <queue>
- #include <cstdlib>
- #include <string>
- #include <set>
- #define LL long long
- #define INF 0x3f3f3f3f
- using namespace std;
- int g[][],ans;
- bool check(int (*t)[]){
- int i,j;
- bool flag = false;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- if(t[j][i] != t[j-][i]) {flag = true;break;}//检查每一列
- if(flag) break;
- }
- if(!flag) return true;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- if(t[i][j] != t[i][j-]) {flag = false;break;}
- if(!flag) break;
- }
- return flag;
- }
- void shift(int (*t)[],int dir,int u){
- int i,temp;
- if(dir == ){//行左移
- temp = t[u][];
- for(i = ; i < ; i++)
- t[u][i] = t[u][i+];
- t[u][i] = temp;
- }else if(dir == ){//行右移
- temp = t[u][];
- for(i = ; i; i--)
- t[u][i] = t[u][i-];
- t[u][i] = temp;
- }else if(dir == ){//列上移
- temp = t[][u];
- for(i = ; i < ; i++)
- t[i][u] = t[i+][u];
- t[i][u] = temp;
- }else if(dir == ){//列下移
- temp = t[][u];
- for(i = ; i; i--)
- t[i][u] = t[i-][u];
- t[i][u] = temp;
- }
- }
- bool dfs(int (*t)[],int step,int pre,int dir){
- int mp[][],i,j,k;
- if(ans == step && check(t)) return true;
- if(ans <= step) return false;
- for(i = ; i < ; i++){
- for(j = ; j < ; j++){
- memcpy(mp,t,sizeof(mp));
- if(i == pre && j == dir) continue;
- shift(mp,j,i);
- if(dfs(mp,step+,i,-j)) return true;
- }
- }
- return false;
- }
- int main(){
- int ks,i,j;
- scanf("%d",&ks);
- while(ks--){
- for(i = ; i < ; i++){
- for(j = ; j < ; j++)
- scanf("%d",g[i]+j);
- }
- if(check(g)) {puts("");continue;}
- for(ans = ; ans < ; ans++)
- if(dfs(g,,-,-)) break;
- printf("%d\n",ans<?ans:-);
- }
- return ;
- }
BNUOJ 6378 无题I的更多相关文章
- BNUOJ 52325 Increasing or Decreasing 数位dp
传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...
- bnuoj 24251 Counting Pair
一道简单的规律题,画出二维表将数字分别相加可以发现很明显的对称性 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=24251 #include< ...
- bnuoj 44359 快来买肉松饼
http://www.bnuoj.com/contest/problem_show.php?pid=44359 快来买肉松饼 Time Limit: 5000 ms Case Time Lim ...
- BNUOJ 1006 Primary Arithmetic
Primary Arithmetic 来源:BNUOJ 1006http://www.bnuoj.com/v3/problem_show.php?pid=1006 当你在小学学习算数的时候,老师会教你 ...
- bnuoj 34985 Elegant String DP+矩阵快速幂
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...
- bnuoj 25659 A Famous City (单调栈)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=25659 #include <iostream> #include <stdio.h ...
- bnuoj 25662 A Famous Grid (构图+BFS)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=25662 #include <iostream> #include <stdio.h ...
- bnuoj 4207 台风(模拟题)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4207 [题意]:中文题,略 [题解]:模拟 [code]: #include <iostrea ...
- bnuoj 4208 Bubble sort
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4208 [题意]:如题,求冒泡排序遍历趟数 [题解]:这题开始2B了,先模拟TLE,然后想了一下,能不 ...
随机推荐
- 记一次有关spark动态资源分配和消息总线的爬坑经历
问题: 线上的spark thriftserver运行一段时间以后,ui的executor页面上显示大量的active task,但是从job页面看,并没有任务在跑.此外,由于在yarn mode下, ...
- Tomcat+Jenkins+SonarQube+SVN+Maven 集成自动化环境搭建(Windows10环境下)
说在前面的话: 从接到任务到完成共用了7天的时间.正常人用不到这个时间. 此时的功能表现是: 登录本地JenKins对项目进行构建,能够自动从SVN读取最新代码并按照Maven项目构建,构建完成能够自 ...
- [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列
\(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...
- BigDecimal取余运算
取余运算在编程中运用非常广泛,对于BigDecimal对象取余运算可以通过divideAndRemainder方法实现. public BigDecimal[] divideAndRemainder( ...
- IntelliJ IDEA openfire 使用IntelliJ IDEA 部署OPENFIRE 服务端
用MyEclipse部署OF的步骤,网上有很多,可以自行google,这里要记录的是用据说最好用的JAVA编辑器IntelliJ IDEA来部署OF服务端.试了好多下,终于成功了,记录下. 直接上图吧 ...
- 四次元新浪微博客户端Android源码
四次元新浪微博客户端Android源码 源码下载:http://code.662p.com/list/11_1.html [/td][td] [/td][td] [/td][td] 详细说明:http ...
- SQLite -附加数据库
SQLite -附加数据库 考虑情况下当你有多个数据库可用,您希望使用其中任何一个.SQLite附加DTABASE语句用于选择一个特定的数据库,这个命令之后,所有SQLite语句将执行以下附加数据库. ...
- HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法
地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others) M ...
- emmm 深入浅出教你看懂现代金融游戏
3303只信仰公平[网易陕西省西安网友]1 比特币是骗人的.你们都被“现代帼家纸币”概念茜脑了,而且茜的很彻底,所以你们看不透比特币的骗局.简单来说,现代纸币是“空气纸”,比特币是“空气币(空气数据) ...
- Spring_对缓存的支持
使用SpringBoot开启缓存分为两步: 开启基于注解的缓存 标注缓存注解即可 如上就是一个简单的缓存示例 默认使用的是ConcurrentHashMap组件用来缓存的 package ustc.a ...