首页 > 其他分享 >CF-936(AB)

CF-936(AB)

时间:2024-03-23 09:58:31浏览次数:22  
标签:AB int res sum CF ans 序列 936 mod

CF-936(已更新:AB)

诶……今天还有一个积分赛……自己学科方面也满是坑要补……感觉自己前途一片灰暗/(ㄒoㄒ)/~~

A

分析

只要增大与初始序列中位数的值相同的数,就能在不改变序列顺序的情况下增大中位数的值

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int N=2e5+5;
int a[N];
void solve(){
	int n;cin>>n;
	rep(i,1,n){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int s=(n+1)/2;
	int ans=0;
	rep(i,s,n){
		if(a[s]==a[i]){
			ans++;
		}
		else break;
	}
	cout<<ans<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}
 
 

B

要求最大子段和,赛时蒟蒻的我居然只想能到线段树的写法(⊙﹏⊙),然后一直卡在第三个测试点过不去,赛后来看是取模都有问题……

补充知识

最大子段和

我们称可能是答案的序列为有效序列,显然有效序列要尽可能地大,所以当前数加有效序列的和大于等于当前数,那么当前数一定在有效序列中,反之,当前数成为新的有效序列,则最大子段和就是有效序列的和的最大值

模拟一下这个过程:
如2 -4 3 -1 2 -4 3
有效序列初始只有第一个数2,为{2}考虑第二个数-4,加上有效序列的和后和为-2,比-4大,有效序列为{2,-4},
考虑第三个数3,加上有效序列的和后和为1,比3小,则更新有效序列为{3},
以此类推,所有有效序列为{2},{2,-4},{3},{3,-1},{3,-1,2},{3,-1,2,-4},{3};
所以ans就为这些有效序列的和的最大值
	int n;cin>>n;
	rep(i,1,n) cin>>a[i];
	int res=a[1],ans=-1e9;
	rep(i,2,n){
		res=max(a[i]+res,a[i]);
		ans=max(res,ans);
	}
	cout<<ans;

分析

因为可以在任意位置插入了该子数组的和,我们可以选择子段和最大的,和为sum,将其插入该子数组旁边,这样新的最大子段和就为sum乘2,以此类推,若还能插入,则新的最大子段和依次为sum乘4、_sum乘8、_sum乘16……而除了子段和最大的序列外的部分没有变化,所以ans=初始数组和-sum+sum*2^k;

操作

思路想通后,主要就是取模的问题:有求和操作的要取模,有乘法运算的要取模后再相乘有相减运算的要加上模数再取模,求最值则不用取模

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
#define lc p<<1
#define rc p<<1|1//可见当时自己有多若只
const int mod=1e9+7;
const int N=2e5+5;
int n,a[N];
int fp(int b,int p){
	int res=1;
	while(p){
		if(p&1) res=res*b%mod;
		b=b*b%mod;
		p>>=1;
	}
	return res;
}
void solve(){
	int k,sumv=0,cs=0,f=1;cin>>n>>k;
	rep(i,1,n){
		cin>>a[i];
		sumv+=a[i];
		sumv%=mod;
	}
	int res=a[1],sum=max(a[1],0ll);//0ll就是0
	rep(i,2,n){
		res=max(a[i]+res,a[i]);
		sum=max(res,sum);
	}
	int ans=((fp(2,k)%mod*(sum%mod))%mod+(sumv+mod-sum)%mod+mod)%mod;//注意(fp(2,k)%mod*sum%mod的写法会爆long long
	cout<<ans<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}

标签:AB,int,res,sum,CF,ans,序列,936,mod
From: https://www.cnblogs.com/mono-4/p/18090813

相关文章

  • innodb_undo_tablespaces导致Mysql启动报错
    1.问题MySQL5.7设置innodb_undo_tablespaces=2报错如下:2020-06-09T04:40:07.800321-05:000[ERROR]InnoDB:Expectedtoopen2undotablespacesbutwasabletofindonly0undotablespaces.Settheinnodb_undo_tablespacesparametertothecorrectvalueandret......
  • iOS模拟器 Unable to boot the Simulator —— Ficow笔记
     本文首发于FicowShen'sBlog,原文地址:iOS模拟器UnabletoboottheSimulator——Ficow笔记。内容概览前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱,问题也不少。......
  • CF1946E 题解
    Blog赛场上差一点做出来。首先发现左右两部分是比较独立的,所以可以分开计算后合并。注意到我们可以把整个数集分成左右两部分,即\(\binom{n-1}{p_{m1}-1}\)。然后我们不妨只考虑左边。发现左边的最大值也已经确定,且最大值右边的所有数可以随便选,即\(\binom{p_{i+1}-......
  • 【故障诊断】基于卷积神经网络结合长短时记忆CNN-LSTM实现数据分类含Matlab源码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【VRP问题】基于粒子群算法求解带时间窗的路径最短多车辆多任务车辆路径规划CTWVRP问
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • abp9 .net8 升级错误记录
    错误一、Cannotfindcompilationlibrarylocationforpackage'System.Security.Cryptography.Pkcs'修复方法: 将以下配置设置添加到您的YX.OAM.Web.Mvc.csproj文件中。<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>错误二、使用多上下文,升级mys......
  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 15,zabbix-elk
    1、安装logstash2、监控/home/elk/test.log文件[[email protected]]#[[email protected]]#ifconfigeth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu8500inet10.206.16.11netmask255.255.240.0broadcast10......
  • 解读“CFMS中国闪存市场峰会”存储技术看点-2
    根据Yole机构分析数据显示,CXL在2024年开始爬坡,在2025年将会大规模上量,也就是代表着CXL的时代从2025年开始正式到来。服务器目前正面临着内存性能挑战,而CXL部署提供了短期和长期的解决方案。从CXL1.1开始,AI云服务器可以从内存扩展中受益,而CXL3.0有可能为GPU、DPU、FPGA和AS......
  • CF1948G MST with Matching 题解
    洛谷题面CF题面题目要求一个最小值加上一个最大值的最小值,不好直接做,考虑转化。发现树是二分图,而由柯尼希定理可知二分图的最大匹配等于其最小点覆盖。这样就把求\(\min(\min_{\text{生成树}}+\max_{匹配})\)转化为了\(\min(\min_{生成树}+\min_{覆盖})\)。直接\(\math......