Codeforces Round #702 (Div. 3)A-G题解

使用openair包分析气象数据 气象数据通常是有规律的时间序列,分析气象数据时需要对空气质量测量、气象数据和扩散模型输出进行分析。openair 是用于分析空气质量数据或更广泛的大气成分数据的R软件包。该软件包广泛应用于学术界、公共和私营部门。该项目最初由英国自然环境研究委员会(NERC)资助,并由英国环境部(Defra)提供额外资金。 阅读详情

Codeforces Round #702 (Div. 3)A-G题解
比赛链接:https://codeforces.ml/contest/1490

这场F读错题意白给一发,G二分的if(dp[mid]<x)居然写成了if(dp[l]<x),做梦都没想到自己二分有写错的一天,疯狂白给5发。

Div3相对以前变简单了,罚时手速场。

A题
暴力

题意:
1000组数据
给定一个只包含正整数的长度为n的数组(n最大50),每个数字均在1到50之间。
你可以在任意位置插入任意的整数(这里其实有bug,你如果插入一个负数那怎么都满足了,题目要求的应该是正整数)。
问最少需要插入多少个数字,使得该数组每一对相邻的两个数字,都满足大的那个不超过小的那个的2倍。

思路:
数值都非常小,直接暴力检测每一对相邻的数字,贪心对小的那个数不断乘2翻倍直到大于等于大的那个数即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        vector<int>num(n);
        for(int i=0;i<n;i++) cin>>num[i];
        int ans=0;
        for(int i=1;i<n;i++)
        {
            int x=min(num[i],num[i-1]);
            int y=max(num[i],num[i-1]);
            while(x*2<y)
            {
                ans++;
                x*=2;
            }
        }
        cout<<ans<<endl;
    }
}

B题
暴力

题意:
给定一个长度为n的只包含整数的数列,其中n必定能被3整除。
数列中对3取余得到0的数字的个数记为cas0,
数列中对3取余得到1的数字的个数记为cas1,
数列中对3取余得到2的数字的个数记为cas2,
每次操作,你可以将数列中的某个数字的值+1。
问最少经过多少次操作,可以使得cas0=cas1=cas2。

思路:
我们最后的目标是使得cas0=cas1=cas2=n/3。
那么实际上我们就是要把多了的通过+1操作补到少了的cas上去。

如果cas1大于n/3的话,我们可以把多了的部分都+1,让他们变成cas2的值。

cas0,cas1,cas2的具体情况当然是有很多种,但是不论是哪种,都存在[0->1->2]或者[1->2->0]或者[2->0->1]这样的转移顺序使得最后三个cas都为n/3。
直接暴力for两遍0-2的转移即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        vector<int>num(n);
        int cas[3]={0};
        for(int i=0;i<n;i++)
        {
            cin>>num[i];
            if(num[i]%3==0) cas[0]++;
            else if(num[i]%3==1) cas[1]++;
            else cas[2]++;
        }
        int ans=0;
        for(int i=0;i<2;i++)//循环两遍
         for(int j=0;j<3;j++)
            if(cas[j]>n/3) {ans+=cas[j]-n/3;cas[(j+1)%3]+=cas[j]-n/3;cas[j]=n/3;}
        cout<<ans<<endl;
    }
}

C题
预处理,map

题意:
t组数据,最大100组。
每组数据给定一个1e12以内的正整数x,你需要求出满足a3+b3=x的(a,b)有多少对。

思路:
注意到x最大为1e12,那么a和b的取值最大只有1e4。
我们可以预处理出1到1e4这1e4个整数的三次方为多少,用map记录其是否出现。
每组数据,我们暴力枚举这1e4个三次方,用map检测x减去当前的值,剩下的部分是否也为一个立方数即可。
复杂度为100 ×\times× 1e4 ×\times× log(1e4)。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;

map<ll,int>M;
vector<ll>num;

int main()
{
    IOS
    int t;cin>>t;
    for(int i=1;i<=10000;i++)
    {
        ll x=i;
        x=x*x*x;
        M[x]=1;
        num.push_back(x);
    }
    while(t--)
    {
        bool flag=0;
        ll x;cin>>x;
        for(int i=0;i<num.size();i++)
        {
            if(M.find(x-num[i])!=M.end()) {flag=1;break;}
        }
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}

D题
暴力模拟,dfs

题意:
给定一个长度为n的排列。
你要按照如下的规则将这个排列构造成一棵二叉树,依次输出每个位置在这棵树中的深度是多少。

先把整个排列中最大的数,作为树根。
在原排列中,在当前这个数左侧的所有数都在当前根的左子树中,并且以其中最大的值为子树的根。
在原排列中,在当前这个数右侧的所有数都在当前根的右子树中,并且以其中最大的值为子树的根。
之后左右子树同上进行构造。

思路:
直接dfs模拟这个过程就可以了,分析复杂度会发现最糟糕也就是n2,再乘以数据组数100组也就1e6的级别。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;

int num[107];
int deep[107];//deep[i]记录第i个数在树中所在的深度

void dfs(int l,int r,int now,int d)//l和r记录当前子树的值在原排列中的下标区间,now为当前作为根的数是哪一个,d代表深度
{
    if(l==r) return;
    if(l<now)//处理左区间
    {
        int tar=now-1;
        for(int i=l;i<now-1;i++) if(num[i]>num[tar]) tar=i;
        deep[tar]=d+1;
        dfs(l,now-1,tar,d+1);
    }
    if(r>now)//处理右区间
    {
        int tar=now+1;
        for(int i=now+2;i<=r;i++) if(num[i]>num[tar]) tar=i;
        deep[tar]=d+1;
        dfs(now+1,r,tar,d+1);
    }
}

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        for(int i=1;i<=n;i++) cin>>num[i];
        memset(deep,0,sizeof(deep));
        int tar=1;
        for(int i=2;i<=n;i++) if(num[i]>num[tar]) tar=i;
        deep[tar]=0;
        dfs(1,n,tar,0);
        for(int i=1;i<=n;i++) cout<<deep[i]<<' ';
        cout<<endl;
    }
}

E题
前缀和,贪心
真是绝了,上场读错了的题意这次居然真的出了这样的题

题意:
给定n个玩家,每个玩家一开始都有若干的代币。
会进行n-1次比拼,每次比拼随机选出两个代币数量不为0的玩家。
如果两个人代币数量不相同,代币多的那个人,拿走两个人的全部代币。
如果两个人代币数量相同,在这两个人中随机选一个人,拿走两个人的所有代币。
最后只剩下一个人。

问有哪些人是有可能是最后剩下的那个人。

思路:
既然说是有可能了,那么我们可以理解为我们可以贪心地去操作比赛的结果,平局的时候我们都令自己选的哪个人获胜。
对于每个人来说,肯定都是先贪心去找其他人当中代币最少的那个去比,如果出现剩下的人中,代币最少的那个也比自己的代币多,那就没办法胜利了。

实际上我们注意到,胜利的人会拿走所有的代币。我们先对着n个人按照代币数量从小到大排序为num[n]数组。随便取一个人,如果他打赢了前i个人的话,那么它当前的代币数量就是num[i]的前缀和。
如果num[i]<num[i+1],则代表这个人无法继续赢下去了。

我们从后往前去找,找到前缀和不足以赢下一个人的位置,就得到了想赢所有人需要的最少代币。输出初始代币数量不少于这个值的人即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;
const double eps=1e-6;
const int mod=1e9+7;

ll num[maxn],chuli[maxn],sum[maxn];

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>num[i];
            chuli[i]=num[i];
        }
        sort(chuli+1,chuli+n+1);
        for(int i=1;i<=n;i++) sum[i]=sum[i-1]+chuli[i];//sum为前缀和数组
        ll bas=chuli[n];//bas记录有可能获胜的人的初始代币最少为多少
        for(int i=n-1;i>=1;i--)
        {
            if(sum[i]<chuli[i+1]) break;//如果当前这个人把不比他大的所有人都赢了,此时他已经是剩下的人当中最少的人了
            //但是他如果赢不了其他人当中最小的那个,那他就没有获胜的希望
            bas=chuli[i];
        }
        vector<int>out;
        for(int i=1;i<=n;i++)
            if(num[i]>=bas) out.push_back(i);
        cout<<out.size()<<endl;
        for(int i=0;i<out.size();i++) cout<<out[i]<<' ';
        cout<<endl;
    }
}

F题
前缀和,暴力
读错题意成既可以删除也可以增加可还行,不过还好只需要删改两三行就可以了

题意:
给定一个长度为n只包含正整数的数组。(n最大2e5)
现在你需要删除尽可能少的数,使得数组中的每个数字出现的次数相同。

思路:
直接暴力枚举最后结果的数组中,每个数字出现了多少次,次数肯定在1到2e5之间。
而每次枚举的计算过程,可以利用前缀和来O(1)实现,具体看代码和注释。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;
const double eps=1e-6;
const int mod=1e9+7;

map<int,int>M;

ll cishu[maxn];//cishu[i]记录出现了i次的数字有多少种
ll sumcishu[maxn];//sumcishu为cishu数组的前缀和,记录出现了不超过i次的数字有多少种
ll num[maxn];//num[i]记录出现了i次数字,他们总共出现了几次
ll sumnum[maxn];//sunnum为num数组的前缀和,记录出现了不超过i次的数字,他们总共出现了几次

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        ll ans=llINF;

        for(int i=0;i<n;i++)
        {
            int x;cin>>x;
            if(M.find(x)==M.end()) M[x]=1;
            else M[x]++;
        }
        for(auto &x:M)
        {
            cishu[x.second]++;
            num[x.second]+=x.second;
        }

        for(int i=1;i<=n;i++)
        {
            sumcishu[i]=sumcishu[i-1]+cishu[i];
            sumnum[i]=sumnum[i-1]+num[i];
        }

        for(int i=1;i<=n;i++)//i为我们最后希望数组中剩下的数字,每个数字出现多少次
        {
            ll temp=0;
            temp+=n-sumnum[i]-(sumcishu[n]-sumcishu[i])*i;//对于一开始出现次数大于i次的,我们要把他们减少到i次
            //sumcishu[n]-sumcishu[i]即为有多少种数字一开始出现次数是大于i次的,他们最后都要变为出现i次,总次数就乘以i
            //用n-sumnum[i]即为一开始出现次数大于i次的总共出现了几次,减去目标的总次数即为需要删掉的个数
            temp+=sumnum[i-1];//出现次数小于i的所有数字都要被删掉
            ans=min(ans,temp);
        }

        cout<<ans<<endl;

        for(int i=1;i<=n;i++) cishu[i]=sumcishu[i]=num[i]=sumnum[i]=0;
        M.clear();
    }
}

G题
二分,前缀和,dp
二分函数的mid写成了l是我没想到的,疯狂白给5发,二分居然写错了,青结

题意:
给定n个数字,每次操作都从第一个数字开始,每过一秒,依次加上下一位置的数字,不断循环。

给定m个数字x,问经过多少秒之后,累加的和不小于x。如果永远不可能达到x,输出-1。
n和m最大均为2e5。

思路:
首先用sum[i]记录前i个数字累加起来是多少,mi记录sum数组的最大值。
如果给定的x小于等于mi的话,那么在第一轮循环遍n个数字前便已经结束。我们可以对sum[i]做一个dp,用dp[i]记录sum[1]到sum[i]中最大的值为多少。由此利用二分可在logn的时间找到累加大于等于x的第一个位置。

如果给定的x大于mi的话,就要看后面多次循环后能否达到了。x大于mi,那么x的值至少要被减去x-mi才行。
如果sum[n]<=0的话,代表每次循环结束x的值x与mi的差值并不会减少,因此此时就是无限循环,输出-1即可。
当sum[n]>0时,x-mi至少需要(x-mi)/sum[n]向上取整的循环后才会被减去,再下一轮循环就能达到值x了,同样利用二分来logn时间寻找位置。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;
const double eps=1e-6;
const int mod=1e9+7;

ll num[maxn];
ll sum[maxn];//num数组的前缀和
ll dp[maxn];//dp[i]记录sum[1]到sum[i]中最大的值为多少

int search(int n,ll x)
{
    int l=1,r=n;
    while(l<r)
    {
        int mid=(l+r)>>1;
        if(dp[mid]<x) l=mid+1;
        else r=mid;
    }
    return l;
}

int main()
{
    IOS
    int t;cin>>t;
    while(t--)
    {
        int n,m;cin>>n>>m;
        ll mi=-1e10;//记录最大的前缀和为多少,也就是依次循环过程中可以得到的最大数值
        for(int i=1;i<=n;i++)
        {
            cin>>num[i];
            sum[i]=sum[i-1]+num[i];
            dp[i]=max(dp[i-1],sum[i]);
            mi=max(mi,sum[i]);
        }
        while(m--)
        {
            ll x;cin>>x;
            if(x>mi)
            {
                if(sum[n]<=0) cout<<-1<<' ';
                else
                {
                    ll cas=(x-mi)/sum[n];
                    if((x-mi)%sum[n]) cas++;
                    x-=cas*sum[n];

                    cout<<cas*n-1+search(n,x)<<' ';
                }
            }
            else cout<<search(n,x)-1<<' ';
        }
        cout<<endl;
        for(int i=1;i<=n;i++) num[i]=sum[i]=dp[i]=0;
    }
}

大模型——Dify:知识库与外部知识库 摘要 Dify的知识库功能为开发者提供了动态知识管理解决方案,超越了大模型静态预训练数据的限制。知识库支持多种文档格式(如txt、pdf、docx等),通过文档分段、索引设置和检索优化机制提升LLM的响应准确性。系统提供高质量和经济两种索引模式,前者采用向量化检索技术,后者使用关键词匹配以降低成本。知识库支持元数据管理,包括自动生成的内置元数据和用户自定义元数据,便于内容分类和检索。对于高级需求,Dify还支持连接外部知识库,通过API实现跨平台数据共享和检索优化,满足企业级知识管理需求。 阅读详情

相关推荐

【CVPR 2025】清华:注意力状态空间模块,Mamba与注意力的超强组合,即插即用!

MambaIRv2提出了一种创新的图像恢复模型,通过引入注意力状态空间模块(ASSM)解决了Mamba模型因果建模限制问题。该模型结合语义引导邻域机制和注意力状态空间方程,实现了非因果建模,有效缓解了长距离衰减问题。实验表明,MambaIRv2在图像超分辨率、JPEG压缩伪影减少和图像去噪等任务中表现优异,参数更少但性能超越现有方法。

qq_43303160的博客 3039

python基础学习数列排序(给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200)

问题描述:  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200  第一行为一个整数n。第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 代码: 第一种方法: #第一种方法: #第一行为一个整数n,所以应该输入,类型为int x = int(input()) #第二行包含n个整数,为待排序的数.所以将这n个数转换位列表进行分割, st = list(map(int,input().split()))#输入n个整数 for i in range(

m0_50027156的博客 7094

从工艺到器件:用Silvaco ATLAS仿真PIN二极管击穿电压的保姆级指南

本文详细介绍了使用Silvaco ATLAS仿真PIN二极管击穿电压的全流程指南,从工艺仿真基础搭建到器件结构构建,再到击穿特性仿真和结果分析。通过Silvaco工具链,工程师可以在设计阶段精准预测器件性能,优化击穿电压,提升研发效率。

weixin_34259816的博客 355

蓝桥杯 基础训练—数列排序  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200 输入格式 第一行为一个整数n。   第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 输出格式 输出一行,按从小到大的顺序输出排序后的数列。 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 代码: #include <iostream> #include <algorithm> using namespace std; int main () {

fucheng的博客 7691

windows11 远程桌面连接 通过代理连接RDP桌面报错 错误代码0x904 拓展错误代码0x7

打开windows Defender防火墙设置--允许应用通过防火墙更改设置--允许其他应用浏览--进入C:\WINDOWS\system32目录选择mstsc.exe进入C:\Windows\SysWOW64目录h'qmstsc.exe添加后列表里多了一个远程桌面连接,还有一个Remote Desktop Connection,配置网络权限后保存连接成功。

weixin_43978891的博客 1万+

洛谷 P5736 【深基7.例2】质数筛

题目描述 输入 n(n\le100)n(n≤100) 个不大于 100000 的整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 无 输出格式 无 输入输出样例 输入 #1 复制 5 3 4 5 6 7 输出 #1 复制 3 5 7 板子题,使用一下线性筛 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using n

qq_37978559的博客 1117

试题 算法提高 逆序对

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个长度为n的排列,求其逆序对数 输入格式 第1行输入一个数n表示排列长度 接下来一行n个用空格隔开的数,表示这个排列 输出格式 输出逆序对总数 样例输入 4 1 2 4 3 样例输出 1 数据规模和约定 n<=100000,保证输入的是1-n的排列 代码 #include <iostream> using namespace std; typedef long long LL; co

kukudeqi的博客 684

资金穿透分析

我们把准备好的银行数据导入到软件中,导入具体步骤这里不做详解,大家可以通过“清林情报分析师”公众号,查看操作视频第二节

清林情报分析师 3489

给定一个长度为n的数列,将这个数列按从小到大的顺序排列。

import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); Integer n = sc.nextInt(); int []c=new int[n]; int i,j,temp=0; for(i=0;i<n;i++) { c[i]=sc.nextInt(); } /1.使用内部方法 Arr.

惟一||.唯一 的博客 1511

微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真

通过探究风光储微电网、永磁风机并网仿真、光伏并网仿真、蓄电池仿真、柴油发电机以及光储微电网和风储微电网等方面的技术,我们可以更好地理解微电网的工作原理和优化方法,从而为微电网的发展做出更大的贡献。微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真,柴油发电机,光储微电网 风储微电网 Matlab仿真平台搭建的风光储微电网模型,风光柴储微电网,pwm控制,风力发电,光伏发电,微电网并网离网切换,并网孤岛切换,功能强大。永磁风机的并网仿真是一个非常重要的环节。

sjbextz的博客 399

fatal: unable to access ‘https://github.com/Stability-AI/stablediffusion.git/‘解决方案

本文主要介绍在安装 stable-diffusion-webui 时出现的 fatal: unable to access 'https://github.com/Stability-AI/stablediffusion.git/': Failed to connect to github.com port 443 after 21071 ms: Couldn't connect to server 问题的解决方案,希望能对你有所帮助。

水滴的博客 5685

Java蓝桥模拟战——数列排序:给定一个长度为n的数列,将这个数列按从小到大的顺序排列

资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200 输入格式 第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 输出格式 输出一行,按从小到大的顺序输出排序后的数列。 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 提交代码1——冒泡排序 import java.util.Scanner; public class Main { public

hey,欢迎浏览我的博客,希望能给你提供帮助。 3633

【OD统一考试(C卷)考生抽中题】符号运算(200 分),用 C++ 编码,速通

3. 结果为整数或分数, 分数必须化为最简格式(比如 6, 3/4, 7/8, 90/7)参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。字符串格式的表达式,仅支持±*/,数字可能超过两位,可能带有空格,没有负数。4. 除数可能为 0,如果遇到这种情况,直接输出"ERROR"1. 所有的输入数字皆为正整数(包括 0)用例的输入一定合法, 不会出现括号不匹配的情况。结果可能是负数, 负号放在最前面。表达式结果,以最简格式表达。长度小于 200 个字符。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1764

Codeforces Round #702 (Div. 3)全部题解

题目链接:https://codeforces.com/contest/1490 文章目录A. Dense ArrayB. Balanced RemaindersC. Sum of CubesD. Permutation TransformationE. Accidental VictoryF. Equalize the ArrayG. Old Floppy Drive A. Dense Array 贪心,数学 题目大意为给出一数列,求出最少往其中加入多少个数能使得任意相邻的两个数相差不超过较小数min(

qq_50808324的博客 3677

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Codeforces Round #702 (Div. 3) C - G

传送门. #702 Div. 3 C - GSum of CubesPermutation TransformationAccidental VictoryEqualize the ArrayOld Floppy Drive Sum of Cubes 题目 You are given a positive integer x. Check whether the number x is representable as the sum of the cubes of two positive integer

hz0010的博客 634

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Codeforces Round #702 (Div. 3) 题解(G题未更)

文章目录A. Dense Array A. Dense Array 给出一个数组a,要求两两相邻的数满足以下条件 如果数组不满足要求,则往里面插入一些数,使得数组里的数满足条件。看题目给的例子 关键!! 对于两个相邻的数,如果不满足条件,不妨令x=max(a[i],a[i+1]),y=min(a[i],a[i+1])x=max(a[i],a[i+1]),y=min(a[i],a[i+1])x=max(a[i],a[i+1]),y=min(a[i],a[i+1]) 接下来看如何往a[i]a[i]a[i]和

zwccccc的博客 358

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Codeforces Round #702 (Div. 3) A—G

A. Dense Array 直接模拟即可。 #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define INF 0x3f3f3f3f3f3f3f3f #define ll long long #define ull unsigned long long #define PII pair<int, int> #define PLL pair<ll, ll> #define PIL pair<int, ll>

weixin_45925735的博客 286

Codeforces Round #702 (Div. 3) A-G

A. Dense Array 给你 nnn 个数的数组,定义数组有效为任意两个相邻的数 max(arr[i],arr[i−1])/min(arr[i],arr[i−1])<=2max(arr[i],arr[i-1])/min(arr[i],arr[i-1]) <= 2max(arr[i],arr[i−1])/min(arr[i],arr[i−1])<=2 那么按照题意check 补数即可,注意要从小的去不断的乘2去构造,大的 / 2 会有精度损失 #include<cstdio&gt

我是谁 --- 卡比兽 282

Codeforces Round #702 (Div. 3)

题目 A B C D E F G 场上成绩 AC AC AC WA 场后成绩 AC AC AC AC AC AC AC 是否看题解 N N N N Y N Y 说在前面 草,E题挂了,没开long long。 A 如果\((a_i,a_{i + 1})\)不满足,那么\(a_i \leftarrow 2 \cdot a_i\)。 # include <bi...

woshidalaocxy的博客 80

Codeforces Round #702 (Div. 3) A B C D E F G

题解传送门

weixin_43901912的博客 314

Codeforces Round #702 (Div. 3) G. Old Floppy Drive

结构体lower_bound 思路很简单,之前在牛客写过一道类似的题目,那道题的题面是勇者屠恶龙打BOSS,可以除一下然后直接暴力,这道不行,要用二分查找,不过即使是这样我也并不觉得这道题有1900的难度。 记录一下a数组总和sum和最大值Max,可以算出答案所在轮次,然后再二分查找具体的下标,有一个细节就是可以在记录Max的时候把每次更新Max的值用结构体存起来,后面直接二分这个结构体数组就可以。 #include<bits/stdc++.h> #include<vector> #

Mamba0Z的博客 207

Codeforces 1490G - Old Floppy Drive (二分、数学)

Codeforces Round #702 (Div. 3) G. Old Floppy Drive 题意 给定一个包含nnn个整数的数组{a}\{a\}{a},可以循环延申至无穷个元素(定义编号nnn的后一个元素为编号111) 再给定mmm个询问xxx,对于每个xxx 问无穷数组{a}\{a\}{a}的前缀和数组{S}\{S\}{S}中,第一次出现Si≥xS_i\ge xSi​≥x的下标iii是多少(输出时下标要−1-1−1) 若不存在,输出−1-1−1 限制 1≤T≤1041\le T\le 10^

StelaYuri's Blog 666

Codeforces Round #702 (Div. 3) G. Old Floppy Drive (二分)

题意: 给出一个数组aaa,最开始指针指向a1a_1a1​,每过一秒指针就会向后移动一个,当到达ana_nan​后又会回到a1a_1a1​,每经过一个元素,就会得到这个元素的值,当得到的值总和≥x\geq x≥x时,就会停止,现在给出一些询问 xix_ixi​,问什么时候会停止。 题解: 一开始看题以为是等于x才停,想了好久,大意了。 先求出每个位置的前缀和sum[i]sum[i]sum[i],在对前缀和取前缀最大值,即 dp[i]=max⁡j=1isum[j]dp[i]=\max\limits_{j=1}

the best 的博客 234

Codeforces Round #702 (Div. 3)-A题

如果相邻两数字大的比上小的大于2,就要插进去至少一个数字,因为比例最大为2,贪心的思想插入进去的数字是最小值的两倍,再判断新插入的数字和大的比较,如果不符合,重复上一步。 #include<bits/stdc++.h> using namespace std; int n; int a[55]; int main() { int t; cin>>t; while(t--) { int res=0; cin>>n; for(int i=0;i<..

再看_的博客 235

Codeforces Round #702 (Div. 3) 题解

Codeforces Round #702 (Div. 3) A. Dense Array int a[maxn]; int main() { ios; int t; cin >> t; while (t--) { int n; cin >> n; for(int i=1;i<=n;i++) cin >> a[i]; int pre=a[1]; int ans=0; for(int i=2;i<=n;i++) { in

张小生的先生的博客 594
上一篇: Educational Codeforces Round 104 (Rated for Div. 2)A-E题解
下一篇: ZAFU_2021_2_17_2021寒假个人赛第四场题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值