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

Lumerical-定向耦合器1 概述:本文章使用FDE求解器对定向耦合器进行了数值仿真,讨论了耦合器的间距相关性,耦合长度相关性,波长相关性。讨论了脊形波导和条形波导两种情况。 阅读详情

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;
    }
}

【3D Slicer】的小白入门使用指南一 3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。Slicer 的功能包括:读/写。 阅读详情

相关推荐

别再搞混了!MATLAB通信仿真中EbN0转SNR的保姆级公式推导与避坑指南

本文深入解析MATLAB通信仿真中EbN0与SNR转换的核心公式,揭示数字仿真与理论系统的关键差异。通过真实案例展示错误参数设置导致的隐蔽问题,并提供完整的参数自查清单和正确实现代码,帮助工程师和学生避免常见错误,确保仿真结果准确可靠。

weixin_28746223的博客 348

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

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

蓝桥杯 基础训练—数列排序  给定一个长度为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

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南

本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。

yhn456789的博客 623

ESP32+micro-ROS机器人开发实战:轻量级ROS2嵌入式集成

ROS2是现代机器人软件栈的核心框架,其基于DDS的分布式通信与QoS保障能力为多节点协同提供基础支撑;而micro-ROS作为专为微控制器优化的ROS2兼容中间件,解决了资源受限设备(如ESP32)接入ROS2生态的关键难题。其通过分层架构将DDS通信下沉至上位机Agent,使MCU仅需运行轻量Client,大幅降低内存开销(实测<180KB)并保留标准ROS2接口语义。该方案广泛应用于教育机器人、移动底盘、传感器节点等嵌入式场景,尤其适合基于ESP-IDF开发的Wi-Fi/BLE物联网机器人系统。本文以

weixin_29025501的博客 400

试题 算法提高 逆序对

资源限制 时间限制: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

Android SystemUI——初始化流程(三)

1、Android 系统在启动之后,首先会Zygote进程,Zygote进程又会进一步启动 SystemServer进程,它会启动各种系统所需要的服务,在监听AMS启动完毕之后,还会启动SystemUIService。2、在启动SystemUIService服务之前,系统首先会创建SystemUI对应的进程,获取SystemUIAppComponentFactory实例对象,调用instantiateApplicationCompat创建SystemUIApplication实例对象并设置回调方法。

小旭的专栏 1157

给定一个长度为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

微博scheme

微博scheme

qq_42278595的博客 319

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

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

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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、付费专栏及课程。

余额充值