一道很水的topsort,唉?怎么交了14遍...(某人用我的代码刚好卡过,我怎么过不去...【鄙视】【鄙视】【鄙视】)

#include <bits/stdc++.h>

using namespace std;

#define INF 0x3f3f3f3f
#define MAXN 1000010
#define MAXM 5010 int n,m,len = ,tot = ,lin[MAXN],top = ,a[],vis[],in[];
char ch[][];
string st[MAXN],s1;
struct node
{
int ix,iy;
int ax,ay;
}q[];
struct edge
{
int y,next;
}e[MAXN]; inline void add(int xx,int yy)
{
e[++tot].y = yy;
e[tot].next = lin[xx];
lin[xx] = tot;
} void DFS(string xx,int le)
{
if(le == len + )
{
st[++top] = xx;
return ;
}
for(int k = ;k <= len;++k)
{
int i = a[k];
if(vis[i] && in[i] == )
{
vis[i] = false;
for(int j = lin[i],y;j;j = e[j].next)
in[y = e[j].y]--;
DFS((xx + (char)(i + 'A' - )),le + );
vis[i] = true;
for(int j = lin[i],y;j;j = e[j].next)
in[y = e[j].y]++;
}
}
} namespace ls {
inline int kmax(int a, int b) { return a > b ? a : b; }
inline int kmin(int a, int b) { return a > b ? b : a; }
} int main()
{
scanf("%d %d", &n, &m);
for(int i = ;i <= ;++i)
q[i].ix = INF,q[i].iy = INF;
for(int i = ;i <= n;++i)
{
for(int j = ;j <= m;++j)
{
cin >> ch[i][j];
if(ch[i][j] == '.') continue;
int num = (int)ch[i][j] - 'A' + ;
if(!vis[num])
{
vis[num] = true;
a[++len] = num;
}
q[num].ix = ls::kmin(i,q[num].ix);
q[num].iy = ls::kmin(j,q[num].iy);
q[num].ax = ls::kmax(i,q[num].ax);
q[num].ay = ls::kmax(j,q[num].ay);
}
}
for(int ii = ;ii <= len;++ii)
{
int num = a[ii];
char c = (char)(num + 'A' - );
for(int i = q[num].ix;i <= q[num].ax;++i)
{
if(ch[i][q[num].iy] != c)
{
int numm = ch[i][q[num].iy] - 'A' + ;
in[numm]++;
add(num,numm);
}
if(ch[i][q[num].ay] != c)
{
int numm = ch[i][q[num].ay] - 'A' + ;
in[numm]++;
add(num,numm);
}
}
for(int i = q[num].iy + ;i <= q[num].ay - ;++i)
{ if(ch[q[num].ix][i] != c)
{
int numm = ch[q[num].ix][i] - 'A' + ;
in[numm]++;
add(num,numm);
}
if(ch[q[num].ax][i] != c)
{
int numm = ch[q[num].ax][i] - 'A' + ;
in[numm]++;
add(num,numm);
}
}
}
DFS(s1,);
sort(st + ,st + top + );
for(int i = ;i <= top;++i)
cout << st[i] << endl;
return ;
}

以下代码会很快↓↓↓

#include <bits/stdc++.h>
#define INF ((int)(1e9))
#define LINF ((ll)(1e18))
#define pb push_back
#define mp make_pair
#define ll long long
#define _tp template
#define _tyn typename
#define ull unsigned ll
#define pii pair<int,int>
#define uint unsigned int
#define ms(_data) memset(_data,0,sizeof(_data))
#define fin(_filename) freopen(_filename,"r",stdin)
#define fout(_filename) freopen(_filename,"w",stdout)
#define msn(_data,_num) memset(_data,_num,sizeof(_data))
using namespace std;
_tp<_tyn T>void mymax( T &_a , T _b ){ if( _a < _b ) _a = _b; }
_tp<_tyn T>void mymin( T &_a , T _b ){ if( _a > _b ) _a = _b; }
int getnum(){
char ch = '.';
int fu = ;
while( ch < '' || ch > '' ){
ch = getchar();
if( ch == '-' ) fu = -;
}
int ret = ;
while( ch >= '' && ch <= '' ){
ret = ret * + (ch-'');
ch = getchar();
}
return ret;
}
char getlet(){
char ch = '%';
while( ( ch < 'A' || ch > 'Z' ) && ch != '.' ) ch = getchar();
return ch;
}
void read( int &x, int &y ){
x = getnum(); y = getnum();
}
void read( char &c ){
c = getlet();
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
#define MAXN 40
struct Pos{
int y,x;
Pos(){}
Pos( int yy , int xx ){
y = yy;
x = xx;
}
};
int n,m;
int data[MAXN][MAXN];
Pos ld[MAXN],ur[MAXN];
bool exist[MAXN]; //检测一个矩形是否完整
bool test( int x ){
for( int i = ld[x].x ; i <= ur[x].x ; i++ ){
if( data[ld[x].y][i] != x && data[ld[x].y][i] != - ) return ;
if( data[ur[x].y][i] != x && data[ur[x].y][i] != - ) return ;
}
for( int i = ur[x].y ; i <= ld[x].y ; i++ ){
if( data[i][ld[x].x] != x && data[i][ld[x].x] != - ) return ;
if( data[i][ur[x].x] != x && data[i][ur[x].x] != - ) return ;
}
return ;
}
//消除一个矩形
void seton( int x , int a ){
for( int i = ld[x].x ; i <= ur[x].x ; i++ ){
data[ld[x].y][i] = a;
data[ur[x].y][i] = a;
}
for( int i = ur[x].y ; i <= ld[x].y ; i++ ){
data[i][ld[x].x] = a;
data[i][ur[x].x] = a;
}
} vector<string> ans;
void dfs( string now ){
bool gao = ;
for( int i = ; i < ; i++ ){
if( !exist[i] ) continue;
if( !test(i) ) continue;
gao = ;
exist[i] = ;
int ls[MAXN][MAXN];
memcpy(ls,data,sizeof(ls));
seton(i,-);
dfs( now + (char)(i+'A') );
memcpy(data,ls,sizeof(data));
exist[i] = ;
}
if( gao ) return;
reverse(now.begin(),now.end());
ans.pb(now);
}
int main(){
//fin("frameup.in");
//fout("frameup.out");
for( int i = ; i < ; i++ ){
ld[i].y = ; ld[i].x = INF;
ur[i].y = INF; ur[i].x = ;
}
msn(data,-);
ms(exist); read(n,m);
for( int i = ; i <= n ; i++ ){
for( int j = ; j <= m ; j++ ){
char c; read(c);
if( c == '.' ) continue;
data[i][j] = c-'A';
exist[data[i][j]] = ;
//记录矩形左下角、右上角坐标
mymax( ld[data[i][j]].y , i );
mymin( ld[data[i][j]].x , j );
mymin( ur[data[i][j]].y , i );
mymax( ur[data[i][j]].x , j );
}
}
dfs("");
//整理答案
sort(ans.begin(),ans.end());
for( uint i = ; i < ans.size() ; i++ )
cout << ans[i] << endl; return ;
}

P1228-重叠的图像的更多相关文章

  1. [Android] 给图像加入相框、圆形圆角显示图片、图像合成知识

        前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和加入水印,继续我的"随手拍"项目完毕给图片加入相框.圆形圆角显示图片和图像合 ...

  2. Gram-Schmidt图像融合

    遥感图像融合的定义是通过将多光谱低分辨率的图像和高分辨率的全色波段进行融合从而得到信息量更丰富的遥感图像.常用的遥感图像融合方法有Brovey\PCA\Gram-Schmidt方法.其中Gram-Sc ...

  3. 什么是Alpha通道?

    图像处理(Alpha通道,RGB,...)祁连山(Adobe 系列教程)****的UI课程 一个也许很傻的问题,在图像处理中alpha到底是什么?  Alpha通道是计算机图形学中的术语,指的是特别的 ...

  4. 【图像处理】ISP 图像传感器camera原理

    1.Color Filter Array — CFA 随着数码相机.手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用. 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR ...

  5. Htmlt_Div+Css简介

    DIV+CSS是网站标准(或称“WEB标准”)中常用术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用DIV ...

  6. 关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记

    并没有都读完,不过感觉还是有必要做一个笔记的,毕竟这只是随笔不是文章,所以可以有多少写多少,也算是工作总结了,最重要的是这个好在可以,完成所有有意义文档的检索,比起自己的word来说高级很多~~~. ...

  7. GDI+ —— Tcanvas 类属性及方法.......

    delphi TCanvas类 类关系   TObject-> TPersistent   对那些作图对象,可使用TCanvas对象作为画布.标准的window控件,例如编辑控件和列表框控件,当 ...

  8. Android bitmap图片处理

    一.View转换为Bitmap         在Android中所有的控件都是View的直接子类或者间接子类,通过它们可以组成丰富的UI界面.在窗口显示的时候Android会把这些控件都加载到内存中 ...

  9. opencv如何用模板匹配寻找目标

    首先使用: MatchTemplate 比较模板和重叠的图像区域 void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr ...

  10. canvas扩散圆环

    最近看了很多牛的动画,想想自己的canvas的确很菜. 公式在那里,但是不是太会套.找demo发现都是很难的 于是找了个简单的效果 圆环从中间扩散的效果 关键是 globalCompositeOper ...

随机推荐

  1. Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式

    1.在资源管理类中提供对原始资源的访问     前几个条款很棒,它们是对抗资源泄露的壁垒,但很多APIs直接指向 资源,这个时候,我们需要直接访问原始资源.     这里,有两种方法解决上述问题,我们 ...

  2. VC中常见API函数使用方法(经验版)

    ***********************************************声明*************************************************** ...

  3. [原创] 在线音乐API的研究 (Part 2.1)

    最近,在优化一个自己写的音乐播放器.主要目的是回顾.归纳,并希望能够写出一个属于自己的common lib.今天,主要是关于在线音乐API的一些分析结果.此次,主要分析的是歌词.专辑部分.在线搜索音乐 ...

  4. SVN系列之—-SVN版本回滚的办法

    例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...

  5. xcode编译 debug版或release 版

    编译debug版本或release 版本 在Run和Stop按钮的右边有一个工程名 点击工程名,选择Manage Schemes 选择Edit... 左侧选择Run ProjectName.app 右 ...

  6. 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 代码实现

    http://blog.csdn.net/mianhuantang848989/article/details/38035731 http://www.61ic.com/Article/DaVinci ...

  7. nyoj 题目10 skiing —— 南阳oj

    题目信息例如以下: skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区 ...

  8. 有遍历struct中字段信息的函数或方法

    例:struct a{int a;char b[10];double c;}; 在程序中只知道一个结构 a 的指针, 有没有函数能通过结构的名字 和 指向结构的指针 随次得到 结构中的变量类型 和 变 ...

  9. mysql 数据库导入错误:40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RES ...

  10. spring mvc带参数重定向

    http://blog.csdn.net/jackpk/article/details/19121777/ https://isudox.com/2017/02/16/spring-mvc-redir ...