codeforces 426 B. Sereja and Mirroring(递归)
2015-12-22 18:25
246 查看
http://codeforces.com/problemset/problem/426/B
大意:给定一个矩阵,求最小的行数,对应行可以镜像产生新的行,迭代下去直至产生最终的矩阵。
#include <iostream>
#include <cstdio>
using namespace std;
int g[105][105];
int n,m;
bool check(int low,int high,int mid){
if((high-low+1)&1) return 0;
int p1=mid,p2=mid+1;
while(p1>=low&&p2<=high){
for(int j=0;j<m;j++){
if(g[p1][j]!=g[p2][j]) return 0;
}
p1--;
p2++;
}
return 1;
}
int ans=1;
void work(int low,int high){
if(low>=high) {
return ;
}
int mid=(low+high)>>1;
if(!check(low,high,mid)) {
ans=max(ans,high-low+1);
return ;
}
work(low,mid);
//work(mid+1,high); //这一步可以省去
}
int main()
{
//freopen("cin.txt","r",stdin);
while(cin>>n>>m){
ans=1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&g[i][j]);
}
}
if(n&1){
printf("%d\n",n);
continue;
}
work(0,n-1);
printf("%d\n",ans);
}
return 0;
}
大意:给定一个矩阵,求最小的行数,对应行可以镜像产生新的行,迭代下去直至产生最终的矩阵。
#include <iostream>
#include <cstdio>
using namespace std;
int g[105][105];
int n,m;
bool check(int low,int high,int mid){
if((high-low+1)&1) return 0;
int p1=mid,p2=mid+1;
while(p1>=low&&p2<=high){
for(int j=0;j<m;j++){
if(g[p1][j]!=g[p2][j]) return 0;
}
p1--;
p2++;
}
return 1;
}
int ans=1;
void work(int low,int high){
if(low>=high) {
return ;
}
int mid=(low+high)>>1;
if(!check(low,high,mid)) {
ans=max(ans,high-low+1);
return ;
}
work(low,mid);
//work(mid+1,high); //这一步可以省去
}
int main()
{
//freopen("cin.txt","r",stdin);
while(cin>>n>>m){
ans=1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&g[i][j]);
}
}
if(n&1){
printf("%d\n",n);
continue;
}
work(0,n-1);
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- ubuntu中apt-get安装与默认路径
- MPAndroidChart 教程:动画 Animations(十)
- js打印object信息
- UITableView的关键内容
- CAS单点登录配置[4]:客户端配置
- jAXB学习 (一)入门
- docker私有源
- Android中的RecyclerView的使用(一)
- Modern C++读书笔记
- Android实时视频采集方案
- CAS单点登录配置[3]:服务器端配置
- Java压缩技术(七) TAR——Commons实现
- 字符串拼接
- npoi操作excel导出和合并(二)
- Face Detection using OpenCV Haarcascades in Android
- 关于vc++ runtime error解决方法汇总
- CAS单点登录配置[2]:证书生成
- java mail 使用 gmail smtp 发送邮件
- Linux上挂载新硬盘详解
- iOS Copy 和 MutableCopy的区别 深浅拷贝的区别