1. 程式人生 > 其它 >2022.3.15筆記總結

2022.3.15筆記總結

code

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
typedef long long ll;
ll res1,res2;
int row[N],col[N],tmp[N];

int main()
{
    int n,m,c;
    cin>>n>>m>>c;

    //開始分別記錄行列
    for(int i=0,x,y;i<c;i++)
    {
        cin>>x>>y;
        row[x]++;
        col[y]++;
    }


    //計算行的最小交換次數
    if(c%n==0)
    {
        //求平均值
        int rowi = c/n;
        int x1;
        //從1開始,x,y都是大於1的
        for(int i = 2 ; i <= n ; i++)
            tmp[i] = tmp[i-1] + rowi -row[i];
        //排序
        sort(tmp+1,tmp+n+1);
        x1 = tmp[(n+1)/2];
        //求距離和
        for(int i = 1 ; i <= n  ; i++)
          res1 += abs(x1 - tmp[i]);
    }

    //計算列的最小交換次數
    if(c%m==0)
    {
        //求平均值
        int coli = c/m;
        int  x1=0;
        //從1開始,x,y都是大於1的
        for(int i = 1 ; i <= m ; i++)
            tmp[i] = tmp[i-1] + coli -col[i];
        //排序
        sort(tmp+1,tmp+m+1);
        x1 = tmp[(m+1)/2];
        //求距離和
        for(int i = 1 ; i <= m  ; i++)
          res2 += abs(x1 - tmp[i]);

    }

    if(res1&&res2) cout<<"both "<<res1+res2;
    else if(res1) cout<<"row "<<res1;
    else if(res2) cout<<"column "<<res2;
    else cout<<"impossible";

    return 0;
}

quetion

七夕祭
   題目
   提交記錄
   討論
   題解
   視訊講解

七夕節因牛郎織女的傳說而被扣上了「情人節」的帽子。

於是 TYVJ 今年舉辦了一次線下七夕祭。

Vani 同學今年成功邀請到了 cl 同學陪他來共度七夕,於是他們決定去 TYVJ 七夕祭遊玩。

TYVJ 七夕祭和 11 區的夏祭的形式很像。

矩形的祭典會場由 N 排 M 列共計 N×M 個攤點組成。

雖然攤點種類繁多,不過 cl 只對其中的一部分攤點感興趣,比如章魚燒、蘋果糖、棉花糖、射的屋……什麼的。

Vani 預先聯絡了七夕祭的負責人 zhq,希望能夠通過恰當地佈置會場,使得各行中 cl 感興趣的攤點數一樣多,並且各列中 cl 感興趣的攤點數也一樣多。

不過 zhq 告訴 Vani,攤點已經隨意佈置完畢了,如果想滿足 cl 的要求,唯一的調整方式就是交換兩個相鄰的攤點。

兩個攤點相鄰,當且僅當他們處在同一行或者同一列的相鄰位置上。

由於 zhq 率領的 TYVJ 開發小組成功地扭曲了空間,每一行或每一列的第一個位置和最後一個位置也算作相鄰。

現在 Vani 想知道他的兩個要求最多能滿足多少個。

在此前提下,至少需要交換多少次攤點。

輸入格式
第一行包含三個整數 N 和 M 和 T,T 表示 cl 對多少個攤點感興趣。

接下來 T 行,每行兩個整數 x,y,表示 cl 對處在第 x 行第 y 列的攤點感興趣。

輸出格式
首先輸出一個字串。

如果能滿足 Vani 的全部兩個要求,輸出 both;

如果通過調整隻能使得各行中 cl 感興趣的攤點數一樣多,輸出 row;

如果只能使各列中 cl 感興趣的攤點數一樣多,輸出 column;

如果均不能滿足,輸出 impossible。

如果輸出的字串不是 impossible, 接下來輸出最小交換次數,與字串之間用一個空格隔開。

資料範圍
1≤N,M≤100000,
0≤T≤min(N∗M,100000),
1≤x≤N,
1≤y≤M
輸入樣例:
2 3 4
1 3
2 1
2 2
2 3
輸出樣例:
row 1