hdu1029,一个简单的dp问题(虽然这个问题貌似不用do唉,囧)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAXN 500000
using namespace std;
int main()
{
int num,n,index,max;
while(scanf("%d",&num)!=EOF)
{
index=0;
for(int i=0;i<num;i++)
{
scanf("%d",&n);
if(index==0)
{
max=n;
index++;
}
else
{
max==n?index++:index--;
}
}
printf("%d\n",max);
}
return 0;
}
开始MAXN开小了,WA了,然后就没什么了
hdu1007,无脑模板题。。。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=100005;
const double MAX=10e100,eps=0.00001;
struct Point{double x,y;int index;};
Point a[N],b[N],c[N];
double closest(Point *,Point *,Point *,int ,int );
double dis(Point,Point);
int cmp_x(const void *,const void *);
int cmp_y(const void *,const void *);
int merge(Point *,Point *,int ,int ,int );
int main()
{
int n,i;
double d;
while(scanf("%d",&n)!=EOF,n)
{
for(i=0;i<n;i++)
scanf("%lf %lf",&a[i].x,&a[i].y);
qsort(a,n,sizeof(a[0]),cmp_x);
for(i=0;i<n;i++)
a[i].index = i;
memcpy(b,a,n*sizeof(a[0]));
qsort(b,n,sizeof(b[0]),cmp_y);
d=closest(a,b,c,0,n-1);
printf("%.2lf\n",d/2);
}
return 0;
}
double closest(Point a[],Point b[],Point c[],int p,int q)
{
if(q-p==1) return dis(a[p],a[q]);
if(q-p==2)
{
double x1=dis(a[p],a[q]);
double x2=dis(a[p+1],a[q]);
double x3=dis(a[p],a[q+1]);
if(x1<x2&&x1<x3) return x1;
else if(x2<x3) return x2;
else return x3;
}
int i,j,k,m=(p+q)/2;
double d1,d2;
for(i=p,j=p,k=m+1;i<=q;i++)
if(b[i].index<=m) c[j++]=b[i];
else c[k++]=b[i];
d1=closest(a,c,b,p,m);
d2=closest(a,c,b,m+1,q);
double dm=min(d1,d2);
merge(b,c,p,m,q);
for(i=p,k=p;i<=q;i++)
if(fabs(b[i].x-b[m].x)<dm) c[k++]=b[i];
for(i=p;i<k;i++)
for(j=i+1;j<k&&c[j].y-c[i].y<dm;j++)
{
double temp=dis(c[i],c[j]);
if(temp<dm) dm=temp;
}
return dm;
}
double dis(Point p,Point q)
{
double x1=p.x-q.x,y1=p.y-q.y;
return sqrt(x1*x1+y1*y1);
}
int merge(Point p[],Point q[],int s,int m,int t)
{
int i,j,k;
for(i=s,j=m+1,k=s;i<=m&&j<=t;)
{
if(q[i].y>q[j].y) p[k++]=q[j],j++;
else p[k++]=q[i],i++;
}
while(i<=m) p[k++]=q[i++];
while(j<=t) p[k++]=q[j++];
memcpy(q+s,p+s,(t-s+1)*sizeof(p[0]));
return 0;
}
int cmp_x(const void *p,const void *q)
{
double temp=((Point*)p)->x - ((Point*)q)->x;
if(temp>0) return 1;
else if(fabs(temp)<eps) return 0;
else return -1;
}
int cmp_y(const void *p,const void *q)
{
double temp=((Point*)p)->y - ((Point*)q)->y;
if(temp>0) return 1;
else if(fabs(temp)<eps) return 0;
else return -1;
}
hdu1282,回文数,复习了一下strrev,strcpy,itoa,atoi几个字符串常用函数、
说实话,弄得还挺烦的。。。。估计是我太弱人的原因
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int m[10000],time,i;
char str1[100],str2[100];
while(cin>>str1)
{
time=0;
memset(m,0,sizeof(m));
m[0]=atoi(str1);
strcpy(str2,str1);
strrev(str2);
while(strcmp(str1,str2)!=0)
{
time++;
m[time]=atoi(str1)+atoi(str2);
itoa(m[time],str1,10);
strcpy(str2,str1);
strrev(str2);
}
cout<<time<<endl;
cout<<m[0];
for(i=1;i<=time;i++)
{
cout<<"--->"<<m[i];
}
cout<<endl;
}
return 0;
}
hdu 1022 ,很无脑的栈应用。。。我做完逆波兰之后做这个没遇到什么压力
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int num;
string str1,str2;
while(cin>>num>>str1>>str2)
{
int i,j;
i=j=0;
stack <char> sta;
while(i<num)
{
if(str1[i]==str2[j])
{
i++;j++;
while(!sta.empty() && str2[j]==sta.top())
{
j++;sta.pop();
}
}
else
{
sta.push(str1[i++]);
}
}
if(sta.empty())
{
cout<<"Yes."<<endl;
i=j=0;
stack <char> sta;
while(i<num)
{
if(str1[i]==str2[j])
{
i++;j++;
cout<<"in"<<endl<<"out"<<endl;
while(!sta.empty() && str2[j]==sta.top())
{
j++;sta.pop();
cout<<"out"<<endl;
}
}
else
{
sta.push(str1[i++]);cout<<"in"<<endl;
}
}
cout<<"FINISH"<<endl;
}
else
{
cout<<"No."<<endl<<"FINISH"<<endl;
}
}
return 0;
}
hdu1584 深搜的一道入门题
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <string>
#include <cmath>
using namespace std;
int x,ans,arr[11];
bool dir[11];
void dfs(int i,int sum)
{
if(sum>ans) return;
if(i==10)
{
ans=sum;
return;
}
else
{
for(int m=1;m<=10;m++)
{
if(!dir[m])
{
for(int j=m+1;j<=10;j++)
{
if(!dir[j])
{
dir[m]=1;
dfs(i+1,sum+abs(arr[m]-arr[j]));
dir[m]=0;
break;
}
}
}
}
}
}
int main()
{
int num;cin>>num;
while(num--)
{
for(int i=1;i<=10;i++)
{
cin>>x;
arr[x]=i;
}
ans=1000;
dfs(1,0);
cout<<ans<<endl;
}
return 0;
}