天天看點

[題解|總結|補題] Codeforces Round #726 (Div. 2)前言A.(分類讨論)B.C.(貪心)

目錄

  • 前言
  • A.(分類讨論)
    • CODE
  • B.
    • CODE
  • C.(貪心)
    • CODE(Acvv開始了 我告辭了)

前言

最近白天都很忙 每次晚上打cf都沒感覺 emm (幸好是拿小号試水)

A.(分類讨論)

  • 如果 sum == n 那麼輸出0
  • 如果 sum < n 我們隻需要補一個數即可 輸出1
  • 如果 sum>n 我們需要補 sum-n個 0

總結

打的時候 太sb了 分錯了好幾次類

最後分出來這個自己都笑了 (主還是被 資料迷惑到了) 建議自己多搞幾組資料

CODE

#include <bits/stdc++.h>
using namespace std;
void solve()
{
     int n;
     cin>>n;
     int sum = 0;
     for(int i=1;i<=n;i++)
     {
        int x;
        cin>>x;
        sum+=x;
     }
     if(sum == n)
     cout<<0<<endl;
     else
     {
        if(sum>n)
        cout<<sum-n<<endl;
        else
        cout<<1<<endl;
     }
}
int main()
{
    int t;
    cin>>t;
    while(t -- )
        solve();
    return 0;
}
           

B.

最大 那麼我們就讓這個人 繞着地圖 跑一圈

是以我們很容易想到 是放四個對角 (因為要跑一圈嘛)

但是樣例給的圖 會迷惑你 但是其實和放對角是等效的

是以我們直接放對角即可

CODE

#include <bits/stdc++.h>
using namespace std;
void solve()
{
    int n,m,i,j;
    cin>>n>>m>>i>>j;
 
    if(i == n)
    cout<<1<<" "<<1<<" "<<1<<" "<<m<<endl;
    else if(i == 1)
    cout<<n<<" "<<m<<" "<<n<<" "<<1<<endl;
    else if(j == m)
    cout<<1<<" "<<1<<" "<<n<<" "<<1<<endl;
    else if(j == 1)
    cout<<1<<" "<<m<<" "<<n<<" "<<m<<endl;
    else
    cout<<1<<" "<<1<<" "<<n<<" "<<m<<endl;
 
 
}
int main()
{
    int t;
    cin>>t;
    while(t -- )
        solve();
    return 0;
}
           

C.(貪心)

先排序

我們 找出 絕對值最小的內插補點 并且 放左右兩端即可

然後我們 輸出 從右指針 到 右端的數 (這樣就可保證一直往上爬)

我們在順序的 從左端 到 左指針 輸出(這樣我們也可以保證一直往上爬)

CODE(Acvv開始了 我告辭了)

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int a[N],n,t;
void solve()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>a[i];

    sort(a+1,a+1+n);

    int x,y,minn =0x3f3f3f3f;
    for(int i=1; i<n; i++)
    {
        if(abs(a[i]-a[i+1])<minn)
        {
            x=i,y=i+1;
            minn = abs(a[i]-a[i+1]);
        }
    }

    cout<<a[x]<<" ";
    
    for(int i = y+1; i<=n; i++)
        cout<<a[i]<<" ";
        
    for(int i=1; i<x; i++)
        cout<<a[i]<<" ";
        
    cout<<a[y]<<endl;
}
int main()
{
    IOS;
    int t;
    cin>>t;
    while(t -- )
        solve();

    return 0 ;
}
           

繼續閱讀