CF寒假补题集——1.23

B. Toy Blocks

题意:分配问题,n个盒子,把其中任意一个盒子拿出来把里面的积木分配给其他n-1个盒子,求使n-1个盒子里的积木数相同,最少还要额外补几块积木?

解题思路:求出 每个盒子平均分配后的可能的最大值, 1.当前所有盒子中所含积木的最大值2.平均值向上取整。

最后积木总数 - 取二者较大的一个*(n-1)== 额外要补贴的数的最小值;

AC:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N =1e5+10;
int a[N];
int main()
{
   int t;
   cin>>t;
   while(t -- )
   {
       memset(a, 0, sizeof(a));
       long long n, sum = 0;
       cin>>n;
       for(int i =1; i<= n; i++)
       {
           cin>>a[i];
           sum += a[i];
       }
       long long  max_ = *max_element(a+1, a+n+1);
       long long other = sum /(n-1);
       if( sum %(n-1)) other ++;
       max_ = max(max_ , other);

       cout<<(max_)*(n-1) - sum<<endl;
   }
    return 0;
}

C. Plus and Multiply

题目大意:给一个数n,问是否是特殊集合中的数(特殊集合满足,有一个1,任意一个数都是由已有元素*a 或者 已有元素+b得来的)

解题思路:

1.特判掉几种

        1.n == 1, 必在集合中;

        2.a == 1时, 所有的数都是公差为b, 起点为1的等差数列;

                若满足(n-1)%b == 0, 必在数列中。

                若不满足,必不在。

        3.枚举可能的起点,c0 = 1, c0=a; c0 = a^2

                集合中任意一个数,1除外,都能分解为ci  + b*(ci-1) ==  n ; 或者 ci = n;这里的ci等于a的次方,因此 若 第一种情况 当 (n - ci) / b == (ci-1),则(n - ci) % b == 0, 若第二种情况 n-ci = 0, 则 (n - ci) % b == 0;,其余情况n都不在集合中;

AC代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N =1e5+10;

int main()
{
   int t;
   cin>>t;
   while(t -- )
   {
      long long n, a, b;
        cin>>n>>a>>b;
        if(n == 1)
        {
            cout<<"Yes"<<endl;
            continue;
        }
        if (b == 1)
        {
            cout << "Yes"<<endl;
            continue;
        }
       if(a == 1)
       {
           if( (n-1) % b == 0) {
            cout<<"Yes"<<endl;
           }
           else {
            cout<<"No"<<endl;
           }
            continue;
       }
       bool flag  = false;
        for (long long i = 1; i <= n && !flag; i *= a)
        {
            if ((n - i) % b == 0)
            {
               flag = true;
            }
        }

        if (flag)
            cout << "Yes"<<endl;
        else
            cout << "No"<<endl;
   }
    return 0;
}

什么时候才能又快又对地A完前三道QAQ

PS:这两道都要注意有的数据类型,必须用long long 及以上,不然sum会错……;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值