//HDU 2487注意完全包围等情况
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX=101;
char wmap[NMAX][NMAX];
bool isTop( char id, int start, int n, int m )
{
int si=start/m, sj=start%m;
int i, j;
//cout<<si<<" "<<sj<<" "<<id<<endl;
for( i=si; i<n && wmap[i][sj]==id; ++i ) ;
for( j=sj; j<m && wmap[si][j]==id; ++j ) ;
i--;
j--;
if( i-si<2 || j-sj<2 )
return false;
for( int k=sj; k<=j; ++k )
if( wmap[i][k]!=id )
return false;
for( int k=si; k<=i; ++k )
if( wmap[k][j]!=id )
return false;
for( int k=si+1; k<i; ++k )
for( int p=sj+1; p<j; ++p )
{
if( wmap[k][p]!='.' )
return false;
}
return true;
}
int main()
{
freopen("in.txt","r",stdin);
int n, m;
int point[30];
while( scanf("%d%d",&n, &m) && (n||m) )
{
memset(point,0xff,sizeof(point));
for( int i=0; i<n; ++i )
{
scanf("%s",wmap[i]);
for( int j=0; wmap[i][j]!=0; ++j )
{
if( wmap[i][j]!='.' && point[wmap[i][j]-'A']<0 )
{
point[wmap[i][j]-'A']=i*m+j;
}
}
}
for( int i=0; i<26; ++i )
{
if( point[i]>=0 )
{
if( isTop(i+'A',point[i],n,m) )
{
printf("%c",'A'+i);
}
}
}
printf("\n");
}
return 0;
}
//HDU 2587 对数据进行排序后,从数组两端开始查找,如果num[b]+num[e]<k则b向前,若相等,处理,否则e向后.注意等值数.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX=100010;
int main()
{
freopen("in.txt","r",stdin);
int T;
int n, k;
int num[MAX];
scanf("%d",&T);
while( T-- )
{
scanf("%d%d",&n,&k);
for( int i=0; i<n; ++i )
scanf("%d",&num[i]);
sort(num, num+n);
int b=0, e=n-1;
bool B=false, E=false;
int ans=0;
while( b<=e )
{
if( num[b]+num[e]==k )
{
if( num[b]!=num[e] )
ans+=2;
else
{
ans++;
break;
}
b++;
e--;
B=E=true;
}
else if( num[b]+num[e]<k )
{
++b;
B=true;
}
else if( num[b]+num[e]>k )
{
--e;
E=true;
}
if( B==true )
{
while( num[b]==num[b-1] )
++b;
B=false;
}
if( E==true )
{
while( num[e]==num[e+1] )
--e;
E=false;
}
}
printf("%d\n",ans);
}
return 0;
}
//HDU 2266 枚举题,处理有点麻烦
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
long long Data[13][13];
int State[13];
long long Val, Num;
int Len;
void init( char* p )
{
for( int i=0; i<Len; ++i )
{
Data[i][i]=*(p+i)-'0';
long long t=10;
for( int j=i+1; j<Len; ++j, t*=10 )
{
Data[i][j]=Data[i][j-1]*10+*(p+j)-'0';
}
}
}
long long calc( int b, int e )
{
for( int i=b+1; i<=e; ++i )
{
if( State[i]!=0 )
{
return calc(b,i-1)+calc(i, e);
}
}
return Data[b][e]*(State[b]==1?1:-1);
}
void solve( int nowpos )
{
if( nowpos>=Len )
{
if( calc(0,Len-1)==Val )
Num++;
return;
}
for( int i=0; i<3; ++i )
{
State[nowpos]=i;
solve( nowpos+1 );
}
}
int main()
{
freopen("in.txt","r",stdin);
char str[20];
State[0]=1;
while( cin>>str>>Val )
{
Num=0;
Len=strlen(str);
init(str);
solve(1);
cout<<Num<<endl;
}
return 0;
}