再补加一个代码优化:
2144 坐标统计
输入 n 个点在平面上的坐标(横纵坐标都是整数),对于每个点可以控制所有位于它左 下方的点(即横坐标 x 和纵坐标 y 都比它小),它可以控制的点的数目称为“战斗力”。依次 输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高, 输出其中最大的编号)。
输入
输入第一行包含一个正整数 n(1≤n≤100),接下来的 n 行,每行描述一个点的坐标,第 i+1 行包含两个正整数 x 和 y(1≤x,y≤1000),表示编号为 i 的点的横坐标为 x,纵坐标为 y。
输出
输出共有 n+1 行,第 1 行到第 n 行,每行包含一个整数,第 i 行的整数表示编号为 i 的点的战斗力,第 n+1 行表示战斗力最高的点的编号。
输入样例
6
4 2
6 6
4 8
15 6
11 9
8 14
输出样例
0
1
0
1
3
3
6
代码一:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int a[101],b[101],c[101];
int main()
{
int n,s=0,x=1,max=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i]>a[j]&&b[i]>b[j])
s++;
c[x]=s;
x++;
}
cout<<s<<endl;
s=0;
}
for(int i=1;i<n;i++)
{
if(c[i]>c[i+1])
max=i;
else
max=i+1;
}
cout<<max<<endl;
return 0;
}
超时。。。
代码二:
#include <iostream>
using namespace std;
int main()
{
int n,i,j,k,max=1;cin>>n;
int x[n+1],y[n+1],s[n+1];
for(i=1;i<=n;i++)cin>>x[i]>>y[i];
for(i=1;i<=n;i++)
{
k=0;
for(j=1;j<=n;j++)
{
if(x[j]<x[i]&&y[j]<y[i])k++;
}
s[i]=k;cout<<s[i]<<endl;
if(s[i]>=s[max])max=i;
}
cout<<max;
return 0;
}
这两个代码没有什么太大差别。。。微小的区别是第一个多出一个循环,而第二个统计最大值时直接在一个循环体中求出记下了。真的是差别好小。。。但是第一个会超时,看来以后优化问题还要多多注意。。。