首页 > 其他分享 >atcoder 388 b-e题

atcoder 388 b-e题

时间:2025-01-12 14:46:26浏览次数:1  
标签:atcoder return int 元素 cin 数组 388 输入

b

include<bits/stdc++.h>

using namespace std;

/**

  • @brief 主函数,程序入口

  • @return int 返回值为0,表示程序正常结束
    */
    int main()
    {
    // 输入数组长度n和天数d
    int n, d;
    cin >> n >> d;

    // 定义一个vector,用于存储输入数据
    vector<pair<int, int>> a(n);

    // 输入数组a的元素
    for (int i = 0; i < n; i++)
    cin >> a[i].first >> a[i].second;

    // 遍历每一天
    for (int m = 1; m <= d; m++)
    {
    // 初始化变量k,用于存储当前天的最大收益
    int k = 0;

     // 遍历数组a
     for (const auto& pair : a) 
     {
         // 获取当前元素的两个值
         int t = pair.first;
         int l = pair.second;
    
         // 计算当前元素在当前天的收益,并更新最大收益
         k = max(k, t * (l + m));
     }
    
     // 输出当前天的最大收益
     cout << k << endl;
    

    }

    // 返回0,表示程序正常结束
    return 0;
    }

c

include<bits/stdc++.h>

using namespace std;
using ll=long long;

/**

  • @brief 主函数,程序入口

  • @return int 返回值为0,表示程序正常结束
    */
    int main()
    {
    // 输入数组长度n
    int n;
    cin>>n;

    // 定义数组a,用于存储输入数据
    int a[n+1];

    // 输入数组a的元素
    for(int i=1;i<=n;i++)
    cin>>a[i];

    // 初始化左右指针l和r
    int l=1,r=1;

    // 初始化结果变量res
    ll res=0;

    // 遍历数组a
    while(l<=n)
    {
    // 移动右指针r,直到找到第一个不满足条件的元素
    while(r<=n&&a[r]<a[l]*2) r++;

     // 计算以当前左指针l为起点的满足条件的子数组数量
     res+=n-r+1;
    
     // 移动左指针l
     l++;
    

    }

    // 输出结果
    cout<<res<<endl;

    // 返回0,表示程序正常结束
    return 0;
    }

d

include<bits/stdc++.h>

using namespace std;

/**

  • @brief 主函数,程序入口

  • @return int 返回值为0,表示程序正常结束
    */
    int main()
    {
    // 输入数组长度n
    int n;
    cin>>n;

    // 定义两个数组a和b,用于存储输入数据和辅助计算
    vector a(n+1),b(n+1);

    // 输入数组a的元素
    for(int i=1;i<=n;i++)
    cin>>a[i];

    // 初始化变量k,用于累加数组b的元素
    int k=0;

    // 遍历数组a
    for(int i=1;i<=n;i++)
    {
    // 累加数组b的元素
    k+=b[i];
    // 更新数组a的元素
    a[i]+=k;
    // 计算当前元素可以向前移动的最大步数
    int m=min(a[i],n-i);
    // 更新数组a的元素
    a[i]-=m;
    // 更新数组b的元素
    b[i+1]++;
    b[i+m+1]--;
    // 输出数组a的当前元素
    cout<<a[i]<<" ";
    }

    // 返回0,表示程序正常结束
    return 0;
    }

e

include<bits/stdc++.h>

using namespace std;

// 定义数组a和b,用于存储输入数据
int a[1000005],b[1000005];
// 定义变量n,用于存储数组长度
int n;

/**

  • @brief 检查是否存在长度为x的子数组满足条件
  • @param x 子数组的长度
  • @return true 如果存在满足条件的子数组
  • @return false 如果不存在满足条件的子数组
    /
    bool check(int x)
    {
    // 遍历前x个元素
    for(int i=1;i<=x;i++)
    {
    // 如果当前元素的两倍大于对应的后x个元素,则返回false
    if(a[i]
    2>a[n-x+i]) return false;
    }
    // 如果所有元素都满足条件,则返回true
    return true;
    }

/**

  • @brief 主函数,程序入口
  • @return int 返回值为0,表示程序正常结束
    */
    int main()
    {
    // 输入数组长度n
    cin>>n;
    // 输入数组a的元素
    for(int i=1;i<=n;i++) cin>>a[i];
    // 对数组a进行排序
    sort(a+1,a+n+1);
    // 初始化二分查找的左右边界
    int l=0,r=n/2;
    // 二分查找
    while(l<r)
    {
    // 计算中间值
    int mid=l+r+1>>1;
    // 如果中间值满足条件,则更新左边界
    if(check(mid)) l=mid;
    // 否则更新右边界
    else r=mid-1;
    }
    // 输出结果
    cout<<l<<endl;
    // 返回0,表示程序正常结束
    return 0;
    }

标签:atcoder,return,int,元素,cin,数组,388,输入
From: https://www.cnblogs.com/aijie1/p/18666934

相关文章

  • Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟
    DangerousSugoroku:赛时写了矩乘T飞了,受到sunkuangzheng大佬的启发才知道要状压矩乘。暴力矩乘思路直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路,利用矩阵分段加速。定义\(dp_i\)表示\(i\)能否到达,则有如下转移:\[dp_{i}=\bigvee_{j=i-B}^{i-A}dp_{j}\]......
  • Atcoder ABC387F Count Arrays 题解 [ 绿 ] [ 基环树 ] [ 树形 dp ] [ 前缀和优化 ]
    CountArrays:一眼秒的计数题。思路显然,把小于等于的条件化为大的向小的连单向边,每个数的入度都是\(1\),就会形成一个基环树森林。那么考虑这个环上能填什么数。因为所有数都小于等于他后面的数,所以所有数都只能相等。这就启发我们在基环树上缩点之后再进行计数。那么当缩完点......
  • 题解:AT_abc388_g [ABC388G] Simultaneous Kagamimochi 2
    鉴于本题解书写时洛谷题面暂无中文翻译,为避免可能的歧义或困惑,先对本题解中的译法进行约定:(顺便吐槽音译怪)英文题面中“mochi”或日文题面中“餅”译为“饼”。英文题面中“kagamimochi”或日文题面中“鏡餅”译为“镜饼”。鉴于本题是C和E的加强版,而我懒得去写那两题的题......
  • AtCoder Beginner Contest 388 (abc388) 赛后复盘
    为什么不会E????A-B模拟即可。C每一个大麻薯可以和所有小于等于自己\(\frac12\)的麻薯结合,二分即可。时间复杂度\(O(n\logn)\)。点击查看代码#include<bits/stdc++.h>#definelllonglong#definei128__int128#definemem(a,b)memset((a),(b),sizeof(a))#def......
  • HHKB Programming Contest 2025(AtCoder Beginner Contest 388)
    A-?UPC题意:给你一个字符串,把他的第一个字符和"UPC"输出。输出即可。点击查看代码voidsolve(){std::strings;std::cin>>s;std::cout<<s[0]<<"UPC\n";}B-HeavySnake题意:n条蛇由厚度和长度,重量为厚度乘长度,问长度加上1~k时,最大的蛇的重量分别......
  • AtCoder Beginner Contest 387
    A-HappyNewYear2025题意给定正整数\(A,B\),求\((A+B)^2\)思路模拟代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ inta,b; cin>>a......
  • VP UNIQUE VISION Programming Contest 2024 Christmas (AtCoder Beginner Contest 38
    A-Equally题意:给你三个数,判断能不能分成大于一组后每组和相等。只可能分成两个和一个或者三组一个的。点击查看代码voidsolve(){inta,b,c;std::cin>>a>>b>>c;if((a==b&&b==c)||(a+b==c)||(b+c)==a||(a+c)==b){ s......
  • Atcoder ABC329E Stamp 题解 [ 绿 ] [ 线性 dp ]
    Stamp:难点主要在dp转移的细节与分讨上,但通过改变状态设计可以大大简化分讨细节的题。观察首先要有一个观察:只要某一个前缀能被覆盖出来,那么无论它后面多出来多少,后面的字符串都可以帮他重新覆盖回去。这也就是dp为啥没有后效性的原因。除此之外,还要注意一个字符串不仅能在......
  • VP AtCoder Beginner Contest 387
    A-HappyNewYear2025按题意输出即可。点击查看代码voidsolve(){inta,b;std::cin>>a>>b;std::cout<<(a+b)*(a+b)<<"\n";}B-9x9Sum直接遍历累加满足不等于x的数即可,注意这个九九乘法表是9*9的矩阵,不是我们学的下三角。点击查看......
  • AtCoder备赛刷题 ABC 361 | x = a^b
    学习C++从娃娃抓起!记录下AtCoder(日本算法竞技网站)备赛学习过程中的题目,记录每一个瞬间。附上汇总贴:AtCoder备赛刷题|汇总【ProblemStatement】Howmanyintegersxx......