栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CF寒假补题集——1.23

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CF寒假补题集——1.23

B. Toy Blocks

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

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

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

AC:

#include 
#include 
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< 

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 
#include 
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"< 

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714783.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号