1.Beautiful Meadow
#include<iostream.h>
bool dothework(int *a,int m,int n)
{
int j;
if(n>1)
for(j=0;j<m;j++)
{
int i;
for(i=0;i<n-1;i++)
if(!(*(a+i+j*n)))
if(*(a+i+j*n)==*(a+i+j*n+1))
return false;
}
int i;
if(m>1)
for(i=0;i<n;i++)
for(j=0;j<m-1;j++)
if(!(*(a+j*n+i)))
if(*(a+j*n+i)==*(a+(j+1)*n+i))
return false;
for(j=0;j<m;j++)
for(i=0;i<n;i++)
if(!(*(a+j*n+i)))
return true;
return false;
}
int main()
{
int m=1;
int n=1;
int *p1;
bool data;
while(1)
{
cin>>m>>n;
if(!m&&!n)
break;
p1=new int[m*n];
int i;
for(i=0;i<m*n;i++)
cin>>*(p1+i);
data=dothework(p1,m,n);
if(data)cout<<"Yes"<<'/n';
else cout<<"No"<<'/n';
delete []p1;
}
return 0;
}
2.Big String Outspread
#include<iostream.h>
#include<string.h>
struct Start{
int num;
int begin;
};
char **p;
void DoWork(char a[250],int num)
{
char b[200000];
int d=0;
int num1=0,begin,end,times;
int s[4];
int temp,j,k;
Start start[100];
int i;
for(i=0;i<num;i++)
{
if(a[i]>='1'&&a[i]<='9')
{
int ti=i;
s[0]=a[i]-'0';
int t;
for(t=1;t<4;t++)
if(a[ti+t]>='0'&&a[ti+t]<='9')
{
s[t]=a[ti+t]-'0';
i++;
}
else
break;
switch(t){
case 1:temp=s[0];break;
case 2:temp=s[0]*10+s[1];break;
case 3:temp=s[0]*100+s[1]*10+s[2];break;
case 4:temp=s[0]*1000+s[1]*100+s[2]*10+s[3];break;
default:break;
}
if(a[i+1]=='(')
{
start[num1].num=temp;
start[num1++].begin=d;
i++;
}
else
{
for(j=0;j<temp;j++)
b[d++]=a[i+1];
i++;
}
}
else if(a[i]>='a'&&a[i]<='z'&&(!i||(a[i-1]>'9'||a[i-1]<'1')))
b[d++]=a[i];
else if(a[i]==')')
{
begin=start[num1-1].begin;
times=start[num1-1].num;
num1--;
end=d;
for(k=1;k<times;k++)
for(j=begin;j<end;j++)
b[d++]=b[j];
}
}
b[d]='/0';
static int step=0;
p[step]=new char[d+1];
strcpy(p[step],b);
step++;
}
int main()
{
int c;
cin>>c;
p=new char*[c];
char temp;
cin.get(temp);
int i;
for(i=0;i<c;i++)
{
char a[250];
int num=0;
while(1)
{
cin.get(temp);
if(temp=='/n')
break;
a[num++]=temp;
}
DoWork(a,num);
}
for(i=0;i<c;i++)
{
cout<<p[i]<<endl;
delete[]p[i];
}
delete[]p;
return 0;
}
3.Image Transformation
#include<iostream.h>
struct NodeColor{
int color;
NodeColor *next;
}*headOfColor=0,*pColorNow;
struct NodeCase{
int xNum;
NodeCase *next;
NodeColor *pNodeColor;
}*headOfCase=0,*pCaseNow;
void AddNodeCase(int x)
{
if(!headOfCase)
{
headOfCase=new NodeCase;
pCaseNow=headOfCase;
}
else
{
pCaseNow->next=new NodeCase;
pCaseNow=pCaseNow->next;
}
pCaseNow->next=0;
pCaseNow->xNum=x;
}
void AddNodeColor(int color)
{
if(!headOfColor)
{
headOfColor=new NodeColor;
pColorNow=headOfColor;
}
else
{
pColorNow->next=new NodeColor;
pColorNow=pColorNow->next;
}
pColorNow->color=color;
pColorNow->next=0;
}
void LinkCaseColor()
{
pCaseNow->pNodeColor=headOfColor;
headOfColor=0;
}
void Show()
{
static int NumOfCase=1;
if(!headOfCase)
return;
pCaseNow=headOfCase;
do{
cout<<"Case "<<NumOfCase<<':'<<'/n';
NumOfCase++;
pColorNow=pCaseNow->pNodeColor;
do{
for(int i=0;i<pCaseNow->xNum-1;i++)
{
cout<<pColorNow->color<<',';
pColorNow=pColorNow->next;
}
cout<<pColorNow->color;
pColorNow=pColorNow->next;
cout<<'/n';
}while(pColorNow);
pCaseNow=pCaseNow->next;
}while(pCaseNow);
}
void DltRoom()
{
if(!headOfCase)
return;
pCaseNow=headOfCase;
do{
pColorNow=pCaseNow->pNodeColor;
while(pColorNow)
{
NodeColor *temp;
temp=pColorNow;
pColorNow=pColorNow->next;
delete temp;
}
NodeCase *temp;
temp=pCaseNow;
pCaseNow=pCaseNow->next;
delete temp;
}while(pCaseNow);
}
int main()
{
int m,n,sum=0;
int *pcolor[3];
while(1)
{
cin>>m>>n;
if(!m&&!n)
break;
int i;
for(i=0;i<3;i++)
pcolor[i]=new int[m*n];
for(i=0;i<3;i++)
for(int j=0;j<m*n;j++)
cin>>*(pcolor[i]+j);
AddNodeCase(n);
for(i=0;i<m*n;i++)
{
for(int j=0;j<3;j++)
sum+=*(pcolor[j]+i);
AddNodeColor(sum/3);
sum=0;
}
LinkCaseColor();
for(i=0;i<3;i++)
delete[]pcolor[i];
}
Show();
DltRoom();
return 0;
}
4.palindromes
#include "iostream"
using namespace std;
int main()
{
char str[100000];
int l,sum;
int ji,ou,i;
while(scanf("%s",str)!=EOF)
{
sum=0;
for(i=0;str[i]!='/0';i++)
{
ji=1;
ou=1;
for(l=0;(i-l+1)>=0&&str[i+l]!='/0';l++)
{
if(str[i+l]==str[i-l]&&(i-l)>=0&&ji==1)
{
sum++;
}
else if((i-l)>=0)
ji=0;
if(str[i-l+1]==str[i+l]&&l>0&&ou==1)
{
sum++;
}
else if(l>0)
ou=0;
}
}
printf("%d/n",sum);
}
return 0;
}
5.Sum Up
#include<iostream.h>
struct node{
int sum;
node *next;
}*head=0,*pNow;
bool GetUnit(int c,int i)
{
int multi=32768;
for(int j=0;j<i;j++)
multi/=2;
return c/multi%2;
}
int GetNum(bool a[7])
{
int sum=0;
int quan=1;
for(int i=6;i>0;i--)
{
quan=1;
for(int j=6;j>i;j--)
quan*=2;
sum+=a[i]*quan;
}
if(a[0])
sum*=-1;
return sum;
}
void AddNode(int sum)
{
if(head==0)
{
head=new node;
pNow=head;
pNow->sum=sum;
pNow->next=0;
return;
}
pNow->next=new node;
pNow=pNow->next;
pNow->sum=sum;
pNow->next=0;
}
int main()
{
int *p;
int c;
while(1)
{
cin>>c;
if(c==-1)
break;
p=new int[c];
int i;
for(i=0;i<c;i++)
cin>>p[i];
bool *pb;
pb=new bool[16*c];
for(i=0;i<c;i++)
{
int j;
for(j=0;j<16;j++)
pb[i*16+j]=GetUnit(p[i],j);
}
bool a[7];
int Sum=0;
for(i=0;i<16*c;i++)
{
a[i%7]=pb[i];
if(i%7==6)
Sum+=GetNum(a);
}
AddNode(Sum);
}
pNow=head;
node *pTemp;
while(1)
{
if(pNow==0)
break;
cout<<pNow->sum<<endl;
pTemp=pNow;
pNow=pNow->next;
delete pTemp;
}
return 0;
}