首页 > 其他分享 >Codeforces Round 895

Codeforces Round 895

时间:2023-10-31 11:22:32浏览次数:33  
标签:895 int Codeforces flag ans 1e9 now Round 乘积

提炼
感觉这种题还是很金典的
我们看到乘积 就应该想到其很容易爆
而我们省1的话 也最多就是2e5数量级的
我们为了省事不用算上界 可以直接把这个上界设为1e9 也不会爆LL
只要乘积突破这个上界 我们就肯定要是有旁边的 大于1的数 我们都要吃掉 因为增量都超过了1e9那么多
我们只要算出左右两边 大于1的数的位置 输出即可
否则他们的乘积没有1e9那么多
我们最多 大于1的数 也就30来个
直接n2暴力即可

void solve(){
    int n;cin>>n;
    vector<int>a(n+1);
    int now=1,flag=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        now*=a[i];
        if(now>=1e9){
            flag=1;
        }
    }
    if(flag==1){
        int i=1,j=n;
        while(a[i]==1)i++;
        while(a[j]==1)j--;
        cout<<i<<' '<<j<<endl;
        return;
    }
    vector<int>s(n+1,1),sum(n+1);
    vector<int>v;
    for(int i=1;i<=n;i++){
        s[i]=a[i]*s[i-1];
        sum[i]=a[i]+sum[i-1];
        if(a[i]>1)v.push_back(i);
    }
    int ans=0,ans_l=1,ans_r=1;
    for(int i=0;i<v.size();i++){
        for(int j=i;j<v.size();j++){
            int l=v[i],r=v[j],res=s[r]/s[l-1]+sum[l-1]+sum[n]-sum[r];
//            cout<<l<<' '<<r<<' '<<res<<endl;
            if(res>=ans){
                ans=res;
                ans_l=l,ans_r=r;
            }
        }
    }
    cout<<ans_l<<' '<<ans_r<<endl;
}

标签:895,int,Codeforces,flag,ans,1e9,now,Round,乘积
From: https://www.cnblogs.com/ycllz/p/17799852.html

相关文章

  • codeforces 1829G. Hits Different 容斥原理+记忆化搜索
    题目描述:给定一个n,把n给打倒,然后递归的求出包含n在内的上面所有的会倒下的瓶子值的平方和。这里使用二分先求出目前给定的n的行号i和列号j。观察可以发现,对于所有的列号j,j=1或者j=i时,是需要考虑往上单边的总和,其他情况都有两个分支。再观察可以发现,两个分支在再上一行的重合部......
  • CodeForces 1246F Cursor Distance
    洛谷传送门CF传送门发现一个性质:能跳不超过\(j\)步到达\(i\)的所有点形成一段区间。设这这段区间为\([L_{i,j},R_{i,j}]\)。那么答案即为:\[\sum\limits_{i=1}^n\sum\limits_{j=0}n-R_{i,j}+L_{i,j}-1\]并且:\[[L_{i,j},R_{i,j}]=\bigcup\limits_......
  • Codeforces Round 906 (Div. 2) A-E1
    比赛地址A.Doremy'sPaint3题意:给出一个数组\(b\),问能否通过重新排序使得数组满足\(b_1+b_2=b_2+b_3=...=b_{n-1}+b_{n}\)Solution首先判断元素个数如果是1,则满足条件如果是2,需判断不同元素个数的差是否小于等于1其余的均不满足条件voidsolve(){intn;cin>......
  • P2895 [USACO08FEB] Meteor Shower S
    P2895[USACO08FEB]MeteorShowerS语言问题引发的惨案题目本身不难,简单的BFS,但是写出来明明思路感觉没有问题,却不是答案错就是爆队列。#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;structNode......
  • Codeforces Round 904 (Div. 2) C. Medium Design(前缀和+差分)
    CodeforcesRound904(Div.2)C.MediumDesign思路:因为出现的线段应该为不相同的线段,所以最小值应该为\(1\)或\(m\)因此我们可以通过差分储存线段范围内的加值,再用前缀和表示这个范围内的最大加值sl为不包含\(1\)的线段的差分,sr为不包含\(m\)的线段差分记录用于差分的......
  • CodeForces 1887D Split
    洛谷传送门CF传送门\(a_l,a_{l+1},\ldotsa_r\)是好的当且仅当\(\existsk\in[l,r-1],\max\limits_{i=l}^ka_i<\min\limits_{i=k+1}^ra_i\),称此时的\(k\)为分割点。对\(r\)扫描线,单调栈维护极长的一些区间\([L_i,R_i]\)使得\(\min\limits_{j=......
  • Codeforces Round#905 解题报告
    按理来说最近开始了一天一套div2计划,第一天做了一套Div1,第二天做了hustfc,第三天因为要赶latex期末考试,所以什么也没做。明天写一下hustfc比较牛的几题。A暴力怎么做,是不是加加加,然后判断。B本质上是让长度为\(i\)的后缀全是\(0\)那么找到最短的有\(i\)个\(0\)......
  • Pinely Round 2 (Div. 1 + Div. 2) (CF1863)
    本来开了某场远古Div1,然后学了一堆前置知识至今仍然不会E。换一场写来得及吗?A.Channel模拟,略。B.SplitSortDescription给你一个长度为\(n\)的排列。每次操作你可以选择一个数\(x\),然后类似于快速排序地把小于\(x\)和大于等于\(x\)的分成两个序列,把它们拼在一起......
  • Codeforces Round 904 (Div. 2)
    A.没想到是暴力,做的很晚B.手玩一下即可C.MediumDesign给定一个长为\(n\)的数组\(a\),和若干条线段\([l_i,r_i]\),你可以选择这其中的任何若干条线段,并让\(a_l\sima_r\)均\(+1\).请你计算可以得到的\(\max(a)-\min(a)\).这题本来想的是先把所有的加进去,得到......
  • 「题解」Codeforces Round 905 (Div. 3)
    before终于有一篇题解是一次性更所有题的了。A.MorningProblemA.MorningSol&Code根据题意模拟即可。#include<bits/stdc++.h>typedeflonglongll;intmin(inta,intb){returna<b?a:b;}intmax(inta,intb){returna>b?a:b;}intT;int......