求解,为啥一直五十分
#include<bits/stdc++.h>
using namespace std;
int n, ans;
struct point
{
int s, g;
}a[10001];
bool cmp(point x, point y)
{
if(x.s == y.s) return x.g <= x.g;
return x.s > y.s;
}
int main()
{
//freopen("paiming.in", "r", stdin);
//freopen("paiming.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d %d", &a[i].s, &a[i].g);
sort(a+1, a+1+n, cmp);
for (int i = 1; i <= n; ++i)
{
ans = 0;
for(int j = 1; j < i; ++j)
{
if(a[j].g < a[i].g) ++ans;
}
printf("%d\n", ans);
}
return 0;
}
明明好像没问题。。。。。
原题题目: 【问题描述】
一年一度的CZYZ附属小学的学生程序设计比赛开始了,组委会公布了所有学生的成绩,成绩按分数从高到低排名,成绩相同按年级从低到高排。
现在,命题者WZK 想知道对于每一个排名的学生前,有几位学生的年级低于他,方便他去教导小学生走向神牛之路。
【输入格式】
输入文件的第1行只有一个正整数n,表示参赛的学生人数。
第2行至第n+1行共n行,每行有两个正整数s,g,之间用一个空格隔开,其中第1+1行的第一个数s表示第i个学生的成绩,第i+1行的第二个数g表示第i个学生的年级。【输出格式】
输出文件有n行,每行只有一个正整数,其中第i行的数k表示排第i名的学生前面有k个学生排名比他高,且年级比他低。
【输入输出样例】 paiming.in
5 300 5 200 6 350 4 400 6
250 5 paiming.out
0 0 1 1
3 【数据范围】
对于100%的数据:1≤n≤200,0≤s≤400,1≤g≤6。