ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

noip模拟70(待补)

2021-10-07 06:31:06  阅读:161  来源: 互联网

标签:ch noip 待补 res ll 70 倍增 复杂度 define


A. 暴雨

B. AVL 树

C. 挖掘机

想不到倍增.

已经肯定处理每一行的复杂度都是在 \(O(1)\) ~ \(O(logn)\) 的复杂度了.

也知道应该是处理每个起点之后的东西.

可偏偏不知道应该用什么算法来解决.

哪怕把倍增告诉我也不知道如何处理,太菜...

这个题把没有用的删去之后,确实就是很显然的倍增了.

C_code
#include<bits/stdc++.h>
using namespace std;
namespace BSS {
	#define ll int
	#define ull unsigned ll
	#define lf double
	#define lbt(x) (x&(-x))
	#define mp(x,y) make_pair(x,y)
	#define lb lower_bound 
	#define ub upper_bound
	#define Fill(x,y) memset(x,y,sizeof x)
	#define Copy(x,y) memcpy(x,y,sizeof x)
	#define File(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
	inline ll read() {
		ll res=0; bool cit=1; char ch;
		while(!isdigit(ch=getchar())) if(ch=='-') cit=0; 
		while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
		return cit?res:-res;
	}
} using namespace BSS;

const ll N=1e5+21;

ll m,n,t,ops,lg2;
ll c[15][N],f[15][N],g[15][N][21];
signed main(){
	File(blueshit);
	n=read(),m=read(),t=read(),ops=read(),lg2=log2(m)+1;
	char s[N]; Fill(f,0x3f),Fill(g,0x3f);
	for(int i=1;i<=n;i++){
		scanf("%s",s+1);
		for(int j=1;j<=m;j++) c[i][j]=(s[j]=='X');
		for(int j=m;j>=1;j--){
			c[i][j] ? f[i][j]=j : f[i][j]=f[i][j+1];
			if(c[i][j]) g[i][j][0]=f[i][j+t];
			else if(f[i][j]<=m) g[i][j][0]=g[i][f[i][j]][0];
			for(int k=1;k<=lg2;k++){
				if(g[i][j][k-1]<=m)
					g[i][j][k]=g[i][g[i][j][k-1]][k-1];
				else break;
			}
		}
	}
	ll d,l,r,res,now;
	while(ops--){
		d=read(),l=read(),r=read(),res=0;
		for(int i=1,now=l;i<=d;i++,now=l){
			if(f[i][l]>r) continue;
			for(int j=lg2;j>=0;j--){
				if(g[i][now][j]<=r) res+=(1ll<<j),now=g[i][now][j];
			}
			res++;
		}
		printf("%d\n",res);
	}
	puts("");
	exit(0);
}

D. 游戏

标签:ch,noip,待补,res,ll,70,倍增,复杂度,define
来源: https://www.cnblogs.com/AaMuXiiiiii/p/15374882.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有