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