目錄
- 前言
- 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 ;
}