首页 > 其他分享 >2022/8/17 总结

2022/8/17 总结

时间:2022-08-17 19:00:09浏览次数:89  
标签:总结 ch 乘积 17 int ll mid 2022 check

A.P4343 [SHOI2015]自动刷题机

  • 啊对对对,算法都对了,二分写挂了:)

Solution

  • 二分答案,每次 \(\mathtt{O(n)}\) 判断当前的 \(mid\) 是否可行,最大和最小分开二分;

  • 注意 :

    如果不存在这样的 n 则输出 −1。

  • 我的挂分中多少有没看到这一行的成分在

AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

const int N=1e5+10;

#define ll long long

int L,k;
int x[N];
ll ans1=-1,ans2;

int check(ll n){
	int cnt=0;
	ll sum=0;
	for(int i=1;i<=L;++i){
		sum=max(0ll,sum+x[i]);
		if(sum>=n){
			++cnt;
			sum=0;
		}
	}
	return cnt;
}

void find_min(){
	ll l=1,r=1e14;
	while(l<=r){
		ll mid=(l+r)>>1;
		if(check(mid)>k)
			l=mid+1;
		else if(check(mid)==k){
			r=mid-1;
			ans1=mid;
		}
		else if(check(mid)<k)
			r=mid-1;
	}
	return ;
}

void find_max(){
	ll l=1,r=1e18;
	while(l<=r){
		ll mid=(l+r+1)>>1;
		if(check(mid)>k)
			l=mid+1;
		else if(check(mid)==k){
			ans2=mid;
			l=mid+1;
		}
		else if(check(mid)<k)
			r=mid-1;
	}
	return ;
}

int main(){
//	freopen("autoac.in","r",stdin);
//	freopen("autoac.out","w",stdout);
	L=read(),k=read();
	for(int i=1;i<=L;++i)
		x[i]=read();
	ans1=-1;
	find_min();
	find_max();
	if(ans1==-1) puts("-1");
	else printf("%lld %lld",ans1,ans2);
	return 0;
}

B.P2592 [ZJOI2008]生日聚会

  • 暴力居然没有挂分;

C.P4340 [SHOI2016]随机序列

  • 今日 T3,我愿称之为最鶸紫题

  • Ta 甚至比永无乡还水

Solution

  • 思考一下,就能发现一个很好的性质:最终答案只和与 \(a_1\) 有乘积关系的项有关,因为其他不和 \(a_1\) 有乘积关系的项必然存在一个式子,其他项都一样,而这一项系数相反。而 \(a_1\) 的系数恒正,永远无法消除。这样的式子可以一一对应,所以除了与 \(a_1\) 有直接全部都消掉了。

  • 得出上一个性质,就可以考虑一下这些与 \(a_1\) 有直接乘积关系的项的系数怎么算了。将这个乘积看作一个整体,它后面的项与它一定是 \(+/-\) 连接,也就必然不会对答案产生贡献,再后面的项与这个乘积就完全没有关系了。因此只需要限定这个乘积后的第一个符号为 \(+/-\),后面的符号就可以随便取,因此 \(a_1\) 到 \(a_i\) 的乘积的系数为:

    • \(1\),如果 \(i=n\);
    • \(2\times 3^{n-i-1}\),\(i\not =n\)
  • 然后可以发现,每个乘积和系数之间只有乘法关系,乘积之间只有加法关系,因此考虑线段树,维护一个 \(sum\) 求和,修改时只有乘法,可以用懒标记维护。

  • 对原序列的修改可以转化成:对区间 \([x,n]\) 中每一个数都除以 \(a_x\),再乘以 \(v\),输出整个线段树的和;

  • 由于题目中要求取 \(\%\),所以除法用逆元代替;

AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

const int N=1e5+10;
const int mod=1e9+7;

#define ll long long

int n,Q;
ll mul[N];
ll fm[N];
ll x[N];

struct memr{
	int l,r;
	ll sum,tg;
}tr[N<<4];

ll ksm(ll x,int y){
	if(y<1) return 1;
	ll cnt=1,d=x;
	for(;y;y>>=1,(d*=d)%=mod)
		if(y&1)
			(cnt*=d)%=mod;
	return cnt;
}

void pushup(int p){
	(tr[p].sum=0ll+tr[p<<1].sum+tr[p<<1|1].sum)%=mod;
	return ;
}

void pushdown(int p){
	if(tr[p].tg!=1){
		(tr[p<<1].sum*=1ll*tr[p].tg)%=mod;
		(tr[p<<1|1].sum*=1ll*tr[p].tg)%=mod;
		(tr[p<<1].tg*=1ll*tr[p].tg)%=mod;
		(tr[p<<1|1].tg*=1ll*tr[p].tg)%=mod;
		tr[p].tg=1;
	}
	return ;
}

void build(int p,int l,int r){
	tr[p].l=l,tr[p].r=r;
	tr[p].tg=1;
	if(l==r){
		tr[p].sum=(mul[l]*x[l])%mod;
		return ;
	}
	int mid=(l+r)>>1;
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	pushup(p);
	return ;
}

void change(int p,int l,int r,ll v){
	if(l<=tr[p].l && tr[p].r<=r){
		(tr[p].sum*=1ll*v)%=mod;
		(tr[p].tg*=1ll*v)%=mod;
		return ;
	}
	pushdown(p);
	int mid=(tr[p].l+tr[p].r)>>1;
	if(l<=mid) change(p<<1,l,r,v);
	if(mid<r) change(p<<1|1,l,r,v);
	pushup(p);
	return ;
}

int main(){
//	freopen("rand.in","r",stdin);
//	freopen("rand.out","w",stdout);
	n=read(),Q=read();
	mul[0]=1;
	int a;
	for(int i=1;i<=n;++i){
		a=read();
		(mul[i]=1ll*mul[i-1]*a)%=mod;
		(fm[i]=ksm(1ll*a,mod-2))%=mod;
		(x[i]=ksm(3,n-i-1)*(i!=n?2:1))%=mod;
	}
	build(1,1,n);
	int v;
	for(int i=1;i<=Q;++i){
		a=read(),v=read();
		change(1,a,n,fm[a]);
		change(1,a,n,1ll*v);
		fm[a]=ksm(1ll*v,mod-2);
		printf("%lld\n",tr[1].sum);
	}
	return 0;
}

标签:总结,ch,乘积,17,int,ll,mid,2022,check
From: https://www.cnblogs.com/Star-LIcsAy/p/16596444.html

相关文章

  • 【2022-08-17】mysql基础知识(四)
    mysql基础知识(四)mysql之操作表的多条SQL语句修改表名普通方法:altertabletest1renametest;进阶方法:renametabletesttotest1;可同时修改多个:renam......
  • CF1719C Fighting Tournament 题解
    思路根据题意,很容易看出,每个人都完成一次比赛后,即完成\(n-1\)轮之后,力量值最大的人会留在第一的位置,且在第\(n-1\)轮完成后,除了力量值最大的人,其他人的胜场数都不会再......
  • CF1719A Chip Game 题解
    题目传送门。思路当其中一个人不能动的时候,这个人一定位于点\((n,m)\)上。令点\((n,m)\)为终点。当\(n\)和\(m\)都是奇数或当\(n\)和\(m\)都是偶数时,赢的人......
  • CF1719B Mathematical Circus 题解
    一道不错的构造题。思路先说一句废话,能被\(4\)整除的数在除以\(2\)之后得到的数还是一个偶数。我们可以根据\(k\)的奇偶性以及\(k\)除以\(2\)之后的奇偶性分......
  • 2022-8-17 第一组 (≥▽≤) 学习笔记
    目录1.DQL查询语言1.1子查询(自连接)需求建表插入数据日期格式1.DQL查询语言1.1子查询(自连接)按照结果集的行列数不同,子查询可以分为以下几类:标量子查询结果集只有......
  • fm足球经理Football Manager 2022 for mac(真实模拟游戏)中文版
    FootballManager2022formac是一款真实模拟足球比赛的游戏,在充满活力的足球世界中,扮演真正的经理人的角色,在这里需要通过您敏锐的洞察力并结合游戏机制,打造您的专属管理......
  • 查询信息系统项目管理师2022年上半年考试成绩,意外通过,给自己点个赞!
    原本准备的是2021年下半年的考试,因成都疫情影响,准考证都打印出来了,结果临时取消了。终于2022年上半年的考试得以进行,殊为不易。考试在5月28日,这次考试内容变化有些大,刚考......
  • 排版软件indesign for Mac(id 2022)中文版
    InDesign2022formac被称为行业领先的印刷和数字媒体布局和页面设计软件,以PDF格式快速共享内容和反馈。使用AdobeExperienceManager轻松管理生产。InDesign拥有......
  • [游记]暑假集训5-2022.8.17
    今天的题目都比较有思维量,嗯A.星际旅行考虑一下去掉那两条有向边,就是一个典型的欧拉回路然后问的就是能够生成的欧拉回路的个数考虑每次删掉两条边,有三种删除方法:$\q......
  • NOIP2022模拟赛二 By yzxoi 8.17
    Preface今天早上被公交车搞了,晚了30min才到……最后T1读入\(n\)的时候写%d了,喜提30pts(结果Rank竟然不变233)A.「NOIP2022模拟赛二ByyzxoiA」『Pale』/feat.初音ミ......