目录
1.聪明的LJY
2. 验证栈序列
聪明的LJY
题目描述
在我还是一个小小小的程序猿时(虽然现在还是小小的程序猿的。。。),LJY他就很聪明了,可是他怎么教我都有不会做的题。。。
有一天,我被学校指派了任务,要去zjj的m个地方买东西,惨了我这老胳膊老腿。这是LJY看到我愁眉苦脸,走了过来,拿出zjj的地图把它神奇的分为100*100的网格,使每个我要去的目的地都落在网格之中(假设每个地方都不重叠),然后他说只要你在这些网格中任意选一个,你到各个目的地的总距离就会最小,我就百思不得其解了。
同样聪明的你们,能帮我解决问题吗?求出最短总距离。(注意:因为地形复杂,只能向横纵方向行走)输入
第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个目的地,下面的m行每行有两个整数0<=x,y<=100,表示某个目的地的坐标。
m行后是新一组的数据;输出
每组数据输出到最小的距离和,回车结束;
样例输入
2 3 1 1 2 1 1 2 5 2 9 5 20 11 9 1 1 1 20
样例输出
2 44
提示
设a(x1,y1),b(x2,y2),d|ab|=|x1-x2|+|y1-y2|.
#include<stdio.h>
#include<math.h>
long long sqr(int x1,int y1,int x2,int y2)
{
long long k;
k=abs(x1-x2)+abs(y1-y2);
return k;
}
void main()
{
long long min=100000,s;
int n,m;
int x[20],y[20];
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&x[i],&y[i]);
}
s=0;
min=100000;
for(int a=0;a<=100;a++)
for(int b=0;b<=100;b++)
{
for(int i=0;i<m;i++)
s+=sqr(a,b,x[i],y[i]);
if(min>s)
{
min=s;
}
s=0;
}
printf("%lld\n",min);
}
}
}
验证栈序列
题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n\le100000)n(n≤100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出
Yes
,否则输出No
。为了防止骗分,每个测试点有多组数据。输入格式
第一行一个整数 qq,询问次数。
接下来 qq 个询问,对于每个询问:
第一行一个整数 nn 表示序列长度;
第二行 nn 个整数表示入栈序列;
第三行 nn 个整数表示出栈序列;
输出格式
对于每个询问输出答案。
输入输出样例
输入 #1复制
2 5 1 2 3 4 5 5 4 3 2 1 4 1 2 3 4 2 4 1 3输出 #1复制
Yes No
当时写这个题目的时候我以为思路很简单,就是将序列a的数先入栈,然后再一个个出栈去和输入的出栈序列比较,不相等就直接跳出,但是这个思路是错误的,我没有了解出栈序列的合法性 :
对于一个进栈序列其出栈序列存在多种合法的可能情况。
例如:入栈序列为1,2,3,4,5时,而对于出栈序列5,4,3,2,1 、1,3,2,5,4、3,5,4,2,1等都是一个合法的出栈序列,但是对于 3,5,2,4,1、5,3,4,2,1 等这种出栈序列则是非法的序列,因为其违背了栈的特性(先进后出或者后进先出)。
#include<stdio.h>
int n;
int top=0;
int a[100000],b[100000],c[100000];
void pushed(long num)
{
c[++top]=num;
}
void poped()
{
c[top--];
}
int main()
{
int q,num,k,i;
scanf("%d",&q);
while(q--)
{
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",a+i);
}
for(i=1; i<=n; i++)
scanf("%d",b+i);
k=1;
for(i=1;i<=n;i++)
{
pushed(a[i]);
while(c[top]==b[k])
{
poped();
k++;
if(top==0) break;
}
}
if(top==0) printf("Yes\n");
else
{
printf("No\n");
}
while(top!=0) poped();
top=0;
}
return 0;
}