完善程序 · 答案 0y[j]<y[i]++f[i]f[i]=f[i]+1f[i]++max_f<=f[i]f[i]>=max_fans=i · 考点:输入输出、位运算、分支结构、循环结构
← 整套速查表 NOIP 普及组初赛 全部真题完善程序
(坐标统计)输入 $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;
}
看到'左下方'→先想x和y都要严格小于
漏y条件致战斗力虚高;更新最大值用'>'会错选小编号
考点:二维偏序统计|分支结构|循环结构
输入n个点,对每个点统计坐标均更小的点个数(战斗力),输出各战斗力及最大战斗力对应最大编号。