Codeforces Round #726 (Div. 2)题解

Problem - A - Codeforces

题目大意:给定一个长度为n的序列,你可以向序列中添加任意个非负数,来使得序列的平均值为1,求最小添加的个数.

思路:非三类讨论

  1. 当前序列中的所有数的和为负数或者是小于长度n,那么只需要添加一项即可.
  2. 当前序列中的所有数的都等于1,那么则不需要添加任何数,
  3. 当前序列中的所有数之和大于长度n,那么这时应该只添加0,并且每一次添加都可以使得当前序列长度加一,当添加到该序列长度为所有数之和时即可.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(x,y,z) for(int x=y;x<=z;++x)
#define dec(x,y,z) for(int x=y;x>=z;--x)
#define IOS ios::sync_with_stdio(0)
ll t, n;
ll a[55];
int main(){
   
    IOS;
    cin>>t;
    while(t--){
   
        cin>>n;
        ll cnt = 0;
        rep(i,1,n){
   cin>>a[i];cnt += a[i];}
        if (cnt < n)cout << "1" <<endl;
        else if (cnt == n)cout << 0 <<endl;
        else cout << cnt - n <<endl;
    }

    return 0;
}

Problem - B - Codeforces

题目大意:给定一个平面,和一个人的初始坐标,你可以设置两个位置,来让其前往,请通过合理的设置来使得该人的行走距离尽可能地大,输出两个位置的坐标.

思路:首先该人到达两个位置的距离分别是abs(x - x1) + abs(y - y1) + abs(x - x2) + abs(y - y2).为了使绝对值尽可能地大,则应该将两个位置设在对角线上,这里有一个小坑,对角线有两组,你可能会因为当前人和某个角落重合而去选择另一组对角线,但是该位置可以和人的初始位置重合,所以无论哪种情况只需要输出任意一组即可.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(x,y,z) for(int x=y;x<=z;++x)
#define dec(x,y,z) for(int x=y;x>=z;--x)
#define IOS ios::sync_with_stdio(0)
int t;
ll n, m, x, y;

int main(){
   
    cin>>t;
    while
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值