P9114

· · 题解

IOI 好水啊。

直接按照题目模拟。根据做题情况算出每道题没做出来的人数、每人做出来的题数和每人的分数。之后扫描一遍,算出有多少人在他前面,注意排名细节:分数第一关键字,题数第二关键字,编号第三关键字。

int n,m,k,ans,a[2010][2010],b[2010],c[2010],d[N];
void solve()
{
    n=read(),m=read(),k=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            a[i][j]=read(),b[j]+=a[i][j]^1,d[i]+=a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            c[i]+=a[i][j]*b[j];
    for(int i=1;i<=n;i++)
        if(c[i]>c[k]||c[i]==c[k]&&d[i]>d[k]||c[i]==c[k]&&d[i]==d[k]&&i<k)
            ans++;
    write(c[k]," "),write(ans+1,"");
}