Codeforces Round #703 (Div. 2) AB

71 篇文章 1 订阅
46 篇文章 2 订阅

A

有N个堆栈,每个栈都有非负数。
可以进行操作将正数的第i个堆栈减一,传递给下一个堆栈i+1。
操作可以进行任意次。

判断能否让堆栈严格递增。

题解思路

贪心,
考虑最极端的情况,堆栈的最小的情况数从0开始到n-1。
如果前面有多的话,可以将数字全部转移到最后一个堆栈,也符合严格递增。
如果前面有少的话,那就不行了,因为无法给前面补充元素。

用两个前缀和判断就行了。
添加堆栈的时候,判断有没有少元素。

AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>

using namespace std;

int main ()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n ,book = 1 ;
        long long sum1 = 0 ,sum2 = 0 ;
        cin>>n;
        for (int i = 1 ; i <= n ; i++ )
        {
            int k;
            cin>>k;
            sum1 += k;
            sum2 += (i-1);
            if ( sum1 < sum2 )
            {
                book = 0;
                continue;
            }
        }
        if (book)
            cout<<"YES\n";
        else
            cout<<"NO\n";
    }
    return 0;
}

B

在二维坐标中给出任意点,求满足与全部点距离之和最小的点有多少个。

题解思路

这里是绝对值之和,千万不要想错了。

绝对值不等式

分成X Y两部分来处理。

当数轴上奇数个点的时候,满足和最小且相等的只有一个点,而偶数则是区间。 找规律。
直接排序,求出符合的区间相乘即可。

中位数构成的区间,满足和最小且相等。

AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>

using namespace std;

long long  a[1010];
long long  b[1010];

int main ()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for (int i = 1 ; i <= n ; i++ )
            cin>>a[i]>>b[i];
        sort(a+1,a+1+n);
        sort(b+1,b+1+n);
        if( n % 2 == 1 )
            cout<<"1\n";
        else
            cout<<(a[n/2+1]-a[n/2] + 1 )*(b[n/2+1]-b[n/2] + 1)<<"\n";
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值