首页 > 其他分享 >炼石 plan 10.19

炼石 plan 10.19

时间:2024-10-23 10:45:08浏览次数:6  
标签:炼石 int up cin 10.19 -- plan lyl define

T1--平方数对(sqrt)

把 \(\sqrt x\) 化成 \(o\sqrt \alpha\) 的形式,\((\sqrt A+\sqrt B)^2\in N\) 当且仅当 \(\alpha_A=\alpha_B\),那记一下 \(\alpha=x\) 的 \(A/B\) 即可求出答案。

#include<bits/stdc++.h> 
#define int long long
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)

using namespace std;

const int N=2e6;

int n, m, p[N+5], top, vis[N+5], sp[N+5], L[N], Ans;

signed main() {
	freopen("sqrt.in","r",stdin);
	freopen("sqrt.out","w",stdout); 
	ios::sync_with_stdio(0);
	cin.tie(0);
	sp[1]=1;
	up(i,2,N) {
		if(!vis[i]) p[++top]=i, sp[i]=i;
		for(int j=1; i*p[j]<=N; ++j) {
			int x=i*p[j];
			vis[x]=1;
			if(sp[i]%p[j]==0) sp[x]=sp[i]/p[j];
			else sp[x]=sp[i]*p[j];
			if(i%p[j]==0) break;
		}
	}
	cin >> n >> m;
	up(i,1,n) ++L[sp[i]];
	up(i,1,m) Ans+=L[sp[i]];
	cout << Ans;
	return 0;
}

T2--树上路径(tree)

每种颜色的贡献相互独立,分别考虑每一种颜色之后把贡献加起来即可得到答案。

考虑一种颜色,我们称颜色为钦定颜色的点为黑点,我们很难求经过黑点的路径数,正难则反,不经过黑点的路径数是好求的,考虑黑点分割出的连通块大小为 \(\{p_i\}\),那么这个就是 \(\sum \frac{p_i\times (p_i-1)}{2}\),因为 \(|p|\leq count(col),\sum|p|=O(n)\),不妨求出 \(p\),按照黑点 \(dfn\downarrow\) 考虑,用 dfn + 树状数组 维护子树连通块大小即可。

#include<bits/stdc++.h> 
#define ll long long
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pii pair<int,int>
#define mp make_pair
#define pb push_back

using namespace std;

const int N=1000005;

int n, L[N], R[N], stamp, tr[N], sp[N], dep[N], siz[N];
ll Ans;
vector<pii> to[N];
vector<int> ran[N];

void add(int x,int v) {
	x=L[x];
	for( ; x<=n; x+=x&-x) tr[x]+=v;
}

int Ask(int x) {
	int ret=0;
	for( ; x; x-=x&-x) ret+=tr[x];
	return ret;
}

int ask(int x) {
	return Ask(R[x])-Ask(L[x]-1);
}

void dfs(int x) {
	L[x]=++stamp;
	siz[x]=1;
	for(pii p:to[x]) {
		int y=p.first, w=p.second;
		sp[y]=w;
		ran[w].pb(y);
		dep[y]=dep[x]+1;
		dfs(y);
		siz[x]+=siz[y];
	}
	R[x]=stamp;
}

bool cmp(int x,int y) {
	return dep[x]==dep[y]?x<y:dep[x]>dep[y];
}

signed main() {
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout); 
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	up(i,2,n) {
		int fa, w;
		cin >> fa >> w;
		to[fa].pb(mp(i,w));
	}
	dfs(1);
	up(i,1,n) if(ran[i].size()) {
		Ans+=(ll)n*(n-1)/2;
		sort(ran[i].begin(),ran[i].end(),cmp); 
		vector<pii> reg;
		bool flag=1;
		for(int x:ran[i]) {
			if(x==1) flag=0;
			int lyl=siz[x]-ask(x);
			Ans-=(ll)lyl*(lyl-1)/2;
			add(x,lyl);
			reg.pb(mp(x,lyl));
		}
		if(flag) {
			int lyl=n-ask(1);
			Ans-=(ll)lyl*(lyl-1)/2;
		}
		for(pii p:reg) add(p.first,-p.second);
	} 
	cout << Ans;
	return 0;
}

T3--信息传递(info)

原神启动。

#include<bits/stdc++.h>
#define int long long
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)

using namespace std;

const int N=500005;

int n, k, t, a[N], b[N]; 

bool check(int v) {
	up(i,1,n) b[i]=a[i]-2*v*t*i;
	if(b[1]<b[n]) return 0;
	int lyl=k, lsy=k;
	dn(i,k-1,1) if(b[i]>=b[lyl]) lyl=i;
	up(i,k+1,n) if(b[i]<=b[lsy]) lsy=i;
	int l=k, r=k, L, R, opt;
	while(lyl<l||r<lsy) {
		opt=0;
		L=l;
		while(L>lyl&&b[r]<=b[L-1]) {
			--L;
			if(b[l]<=b[L]) { opt=1, l=L; break; }
		}
		R=r;
		while(R<lsy&&b[R+1]<=b[l]) {
			++R;
			if(b[r]>=b[R]) { opt=1, r=R; break; }
		}
		if(!opt) return 0;
	}
	l=1, r=n;
	while(l<lyl||lsy<r) {
		opt=0;
		L=l;
		while(L<lyl&&b[r]<=b[L+1]) {
			++L;
			if(b[l]<=b[L]) { opt=1, l=L; break; }
		}
		R=r;
		while(R>lsy&&b[R-1]<=b[l]) {
			--R;
			if(b[r]>=b[R]) { opt=1, r=R; break; }
		}
		if(!opt) return 0;
	}
	return 1;
}

signed main() {
    freopen("info.in","r",stdin);
    freopen("info.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> k >> t;
	up(i,1,n) cin >> a[i];
	if(a[n]==0) { cout << 0 << '\n'; return 0; } 
	int l=1, r=2e9, Ans=0;
	while(l<=r) {
		int mid=(l+r)>>1;
		if(check(mid)) Ans=mid, r=mid-1;
		else l=mid+1;
	}
	cout << Ans << '\n';
	return 0;
}

T4--没有相邻(none)

标签:炼石,int,up,cin,10.19,--,plan,lyl,define
From: https://www.cnblogs.com/chelsyqwq/p/18495883

相关文章

  • 【记录】arm64体系结构下写golang plan9汇编,怎么查有哪些指令?
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯方法1:看源码github.com/golang/go/src/cmd/internal/obj/arm64/anames.go:这个位置有所有arm64体系下支持的指令方法2:上述代码生成的文档位置:https://go.......
  • 画图神器之争:PlantUML和Mermaid那个更适合你?
    PlantUML和Mermaid都是流行的工具,用于通过文本描述快速创建图表,特别是UML图。尽管它们的目标相似,但在一些方面存在差异:语法和易用性:PlantUML:使用一种类似于编程语言的语法,对于程序员来说可能更容易上手。它提供了丰富的语法来创建多种类型的UML图。Mermaid:它的语法更加简洁和近......
  • 2202.10.19
    练习情况P1390公约数的和\(ans=d(\sum\limits_{i=1}^n(sum[\dfrac{n}{d}])-1)\)貌似有十倍经验的题目Code:P1390P4139上帝与集合的正确用法扩展欧拉定理加上递归快速幂一开始预处理\(10^7\)的欧拉函数跑的贼慢后面发现直接求欧拉函数Code:P4129其他写的就是板......
  • 24.10.19
    A数学题,不会。随便取一数\(v\),询问得到\(t\equiv\log_gv\pmodp\)。我们希望找到\(x\)使得\(v^x\equivg\pmodp\),即\(g^{tx}\equivg\pmodp\Leftrightarrowtx\equiv1\pmod{p-1}\)。那么只要\(t\)与\(p-1\)互质即可求得逆元。有原根相关知识可以知......
  • 10.19-10.20 练习
    其实是复健。上一次碰电脑是期末考试完(7月),上上次是noip(2023年11月)。1.P9752[CSP-S2023]密码锁__record要求:语文没问题,会基础语法,有生活常识。枚状态,判断。几乎没有复杂度要求。Code#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intn,ans;int......
  • 10.19 窗口1.0(之后会完善代码,学到哪完善到哪)
    JFrame类的实例是一个底层容器(窗口)其他组件必须被添加到底层容器中,以便借助这个容器和操作系统进行信息交互。Jframe类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。窗口不能添加到另一个容器中JFrame()创建一个无标题窗口JFrame(Strings)创......
  • 【秋招笔试-支持在线评测】10.19京东秋招(已改编)-三语言题解
    ......
  • 【秋招笔试-支持在线评测】10.19小米秋招(已改编)-研发岗题解
    ......
  • 闲话 24.10.19
    闲话今日推歌:毕业Graduateby天使盐Tenshienfeat.诗岸希望大家幸福。那些你不要的:渐进一例刚过去的STAOIR8T5,很多人用暴力直接草了过去。那么,复杂度真的有保障吗?令\(V=\maxn\in\Theta(n)\),\(A=\mathbbP\cap[1,V]\)。那么枚举\(i\),枚举\(j=n\bmodi\),......
  • 2024.10.19总结
    本文于github博客同步更新。A:考虑随便取一个数\(v\),用一次询问问出\(t=\log_gv\)。我们希望找到一个\(x\)使得\(v^x\equivg\pmodp\),也即\(g^{tx}\equivg\pmodp\ifftx\equiv1\pmod{p-1}\)。于是,我们希望找到的\(v\)使得\(t\)与\(p-1\)互质即可。由原根的......