Pareto Dominate
1、题目内容
Description
题目描述
给你两个向量X=(x1,x2,…,xn),Y=(y1,y2,…,yn),如果对于任何i,xi≥yi,且至少存在一个j,xj>yj,我们称X支配 Y。 现在给你两个向量,请计算支配关系。
输入
每个样例包含三行,第一行是一个整数n(1≤n≤20),表示向量的维数,如果n为0表示输入结束,这个不需要处理。 第二,三行每行是n个整数,表示向量X和Y的分量值,任何一个分量值的绝对值不超过10,000。
输出
如果X支配Y,输出1;如果X被Y支配,输出-1;否则输出0;
样例输入
2
1 2
2 1
2
1 2
1 3
2
1 3
1 2
2
1 1
1 1
0
样例输出
0
-1
1
0
2、题目分析
在这个题目里,我们首先明白一点就是,可能的情况只有三种,要么是x支配y,要么就是y支配x,不然就是谁也不支配谁(当且仅当x与y的每个坐标都相同的时候)。在读入x与y的坐标后,我们对支配的两个条件依次判断,最后得出支配结果。
3、参考代码
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
int x[21];
int y[21];
int flag1=1; //作为判断x支配y的第一个条件是否满足的标记
int flag2=0; // 作为判断x支配y的第二个条件是否满足的标记
for(int i=0;i<n;i++) //读入x的坐标
{
scanf("%d",&x[i]);
}
for(int j=0;j<n;j++) //读入y的坐标后依次进行支配条件判断
{
scanf("%d",&y[j]);
if(x[j]<y[j])
{
flag1=0;
}
if(x[j]>y[j])
{
flag2=1;
}
}
if(flag1==1&&flag2==1) //满足x支配y的条件时
{
printf("1\n");
}
else if(flag1==0&&flag2==0) //满足y支配x的条件时
{
printf("-1\n");
}
else //剩余的那种情况,谁也不支配谁
{
printf("0\n");
}
}
return 0;
}