首页 > 其他分享 >noip题

noip题

时间:2024-11-02 08:46:31浏览次数:2  
标签:前缀 noip int re 枚举 80

有必要每个题都记一遍吗???

P8865 [NOIP2022] 种花

我太菜了只能写出 80 分唉,看看怎么玩的吧。

我们肯定想到前缀和优化暴力查找本行的方案数,我们又可以想到下方的方案数也可以直接前缀和存下,然后就可以做到 80 分做法。

for(re int i=1;i<=n;i++){
	for(re int j=1;j<=m;j++){
		if(mp[i][j]!=1&&low[i][j]>2&&a[i][j]>1){
			for(re int k=i+2;k<=n;k++){
				if(mp[k][j]==1){
					break;
				}
				cntc+=(a[i][j]-1)*(a[k][j]-1);
				cntc%=mod;
				if(low[k][j]>1){
					cntf+=(a[i][j]-1)*(a[k][j]-1)*(low[k][j]-1);
					cntf%=mod;	
				}
			}
		}
	}
}

但是这样的话又前缀和从下到上又从上到下枚举,这样是 O(n^2) 的,还要枚举列,我们想可以直接动态地维护来去掉这个前缀和来少枚举一维。

for(int j=1;j<m;j++){
	int jil=0,jif=0;
	for(int i=1;i<=n;i++){
		if(a[i][j]==-1){
			jif=jil=0;
			continue;
		}
		cntc+=(jil*a[i][j])%mod;
		cntc%=mod;
		
		cntf+=jif;
		cntf%=mod;
		
		jif+=(a[i][j]*jil)%mod;
		jil+=max(1ll*0,a[i-1][j]);
	}
}

这段代码没法写什么,你只要在纸上画一画即可得到,但是我没想到这步。

总结:尽量优化算法!!!

标签:前缀,noip,int,re,枚举,80
From: https://www.cnblogs.com/sadlin/p/18521598

相关文章

  • [日记] NOIP前集训日记
    模拟赛日期T1T2T3T4TotalRank\(10.29\)\(0/0/100\)\(0/0/0\)\(0/0/0\)\(0/0/0\)\(0/0/100\)\(14/17\)\(10.31\)\(100/100/100\)\(100/100/100\)\(60/50/60\)\(20/20/20\)\(280/270/280\)\(1/?\)\(11.1\)\(50/100......
  • OIFC未来共同体20241030noip模拟四
    T1我们发现\(1\)其实根本没有用,只和一个连通块里的\(0\)的个数有关,直接\(dfs\),判断即可。#include<iostream>#include<cstring>usingnamespacestd;inlineintread(){registerintx=0,f=1;registercharc=getchar();while(c<'0'||c>'......
  • 「闲话」NOIP 集训
    10.31因为明天是11.1,所以从今天开始写上午T1没看让输出啥所以一眼会了求所有j看了输出之后,额······诶,其实也对啊,直接根据每个j求出的i区间查分一下就好了,调和级数的复杂度20min打完了,本来以为有些conercase要调一会,但直接过了所有样例,爽!!后记:发现提交时间......
  • OIFC未来共同体20241028noip模拟三
    T1状压\(dp\),两两之间有相同的位,那一位就为\(1\),否则就为\(0\),考虑哪些选法不合法,要在\(0\)的位上为\(1\),即只在\(1\)上选和不选都是不可以的,于是状压\(dp\)即可。#include<iostream>#defineintlonglongusingnamespacestd;inlineintread(){registerintx......
  • OIFC未来共同体20241023noip模拟二
    T1考虑从后往前去做,随机化字母权值,考虑两个字符,一个设为正的权值,一个设为负的权值,两两就可以抵消,若有一个后缀权值等于另一个后缀权值且长度为偶数,就肯定有一个回文串,若有一个后缀权值等于另一个后缀权值加减一个字母的权值且长度为奇数,就也肯定有一个回文串,存下来,离散化即可。#......
  • OIFC未来共同体20241021noip模拟一
    T1建边,发现要找偶环,但两个奇环也可以拼在一起,于是按照上面的思路模拟即可。但是挂了一个点,不知道为啥。#include<iostream>#include<vector>#include<cstring>usingnamespacestd;inlineintread(){registerintx=0,f=1;registercharc=getchar();while(c<......
  • 【考试题解】多校A层冲刺NOIP2024模拟赛17
    A.网格(grid)题目内容给你一个\(n\timesm\)的字符网格\(s\),\(s_{i,j}\in[1,9]\cup\{+,*\}\),从\((1,1)\)开始,仅向下或向右走并最终到达\((n,m)\)的路径被称为合法路径,求所有合法路径对应的表达式的运算结果之和,答案对\(998244353\)取模。部分分44pts爆搜,枚举路径,......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛17
    Rank一般A.网络签不上的签到题。首先考虑枚举路径的做法,如果先枚举再计算的话复杂度会是\(\mathcal{O(\binom{n+m-2}{n-1}(n+m))}\)的,稍微优化一点的过程中可以去掉后面的\((n+m)\)。考虑此时我们要记什么,首先遇到加号其前面的值\(z\)就确定了,若上个符号为乘号那么......
  • NOIP2024 模拟赛 #12
    学长出的模拟赛,风格挺好。赛时8:00T1会了一个\(O(n^2\logn)\)的做法,先写一下,看看能不能过样例。8:20过了小样例,大样例跑得慢但是是对的。8:40发现一个好的做法,可以枚举\(c_i\)最小的那一天选了哪个,再枚举\(k\)天,这样纯枚举复杂度是\(O(k)\)的。但是有些细节不太......
  • 题解 洛谷 Luogu P1308 [NOIP2011 普及组] 统计单词数 C++
    题目传送门:P1308[NOIP2011普及组]统计单词数-洛谷|计算机科学教育新生态https://www.luogu.com.cn/problem/P1308getline() 会清除使当次getline() 终止的换行,而cin 不会因此cin 以换行终止,之后还需要getline()的话,需要用getchar() 吞换行Linux的一些相......