RT,我怀疑题面和答案冲突了。原题面:
(坐标统计)输入n个整点在平面上的坐标。对于每个点,可以控制所有位于它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。
#include <iostream> using namespace std; const int SIZE =100; int x[SIZE],y[SIZE],f[SIZE]; int n,i,j,max_f,ans; int main() { cin>>n; for(i=1;i<=n;i++) cin>>x[i]>>y[i]; max_f=0; for(i=1;i<=n;i++) { f[i]= [ ① ]; for(j=1;j<=n;j++) { if(x[j]<x[i] && [ ② ]) [ ③ ] ; } if( [ ④ ]) { max_f=f[i]; [ ⑤ ]; } } for(i=1;i<=n;i++) cout<<f[i]<<endl; cout<<ans<<endl; return 0; }
原答案:
0
y[j]<y[i]
f[i]=f[i]+1 / ++f[i] / f[i]++
(i>1)&&(f[i]>f[i-1])
ans=max_f
我认为第四和第五个空跟题意矛盾了。第四个空答案的意思是“如果这个点的战斗力比上一个点大”,而题意要求的应当是“如果这个点的战斗力大于等于已知的最大战斗力”,即 f[i]>=max_f
;第五个空答案的意思是“目前为止战斗力的max”,而题意要求的应当是“目前为止战斗力最大的点的编号”,即 ans=i
。
求大佬们帮忙解释!%%%