zoukankan      html  css  js  c++  java
  • Codeforces Round #545 (Div. 2)C(离散化,思维,PAIR排序)

    #include<bits/stdc++.h>
    using namespace std;
    int a[1007][1007];
    pair<int,int>p1[1007],p2[1007];
    int rk1[1007][1007],rk2[1007][1007],no1[1007][1007],no2[1007][1007];
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&a[i][j]);
            }
        }
        int cnt=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                p1[j].first=a[i][j];
                p1[j].second=j;
            }
            sort(p1+1,p1+1+m);//这一行排序
            cnt=0;
            for(int j=1;j<=m;j++){
                if(j==1||p1[j].first!=p1[j-1].first)
                    cnt++;//从西向东计数,将相等的点缩起来
                rk1[i][p1[j].second]=cnt;
            }
            cnt=0;
            for(int j=m;j>=1;j--){//从东向西计数
                if(j==m||p1[j].first!=p1[j+1].first)
                    cnt++;
                no1[i][p1[j].second]=cnt;
            }
        }
        cnt=0;
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                p2[j].first=a[j][i];
                p2[j].second=j;
            }
            sort(p2+1,p2+1+n);//列排序
            cnt=0;
            for(int j=1;j<=n;j++){
                if(j==1||p2[j].first!=p2[j-1].first)
                    cnt++;//从北向南计数
                rk2[i][p2[j].second]=cnt;
            }
            cnt=0;
            for(int j=n;j>=1;j--){
                if(j==n||p2[j].first!=p2[j+1].first)
                    cnt++;//从南向北
                no2[i][p2[j].second]=cnt;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                int ans=max(rk1[i][j],rk2[j][i])+max(no1[i][j],no2[j][i])-1;//西北最值加上东南最值减去自身多数的一次
                printf("%d ",ans);
            }
            printf(" ");
        }
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    C#根据当前日期获取星期和阴历日期
    C#常用实例
    使用Open Live Writer在博客园发表博文随笔
    Excel公式中双引号和单引号输入和显示以及函数的选择确认
    outlook新邮件到达提醒设置以及outlook最小化到托盘设置
    Windows任务计划
    酷狗音乐盒缓存文件夹KuGouCache的设置方法
    Android SDK生成时,自定义文件名称,而非系统第一分配的app-release.apk
    android button text属性中英文大小写问题
    Diskpart使用说明
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10510958.html
Copyright © 2011-2022 走看看