首页 > 其他分享 >ABC 304

ABC 304

时间:2024-02-08 18:45:33浏览次数:29  
标签:ABC int 草莓 304 工作 给出 蛋糕 id

T4

在一个平面上有一块面积无限的蛋糕,给出 \(n\) 颗草莓的所在位置和 \(a\,(b)\) 条平行与 \(x\,(y)\) 轴的切刀位置。

切刀会把蛋糕沿 \(x\,(y)\) 轴切开。因此一共会切出 \((a+1)(b+1)\) 块蛋糕。

问:现在蛋糕上草莓数量最少的一块蛋糕,草莓数量是多少?最多的,又是多少?


用 lower_bound 计算出每一个草莓所属的行数和列数,然后用 map 维护草莓所在的块的草莓数量。

最小:如果有一块区域没有草莓,就是 0;否则在用 map 维护的时候就已经可以得出答案了。

T5

给出一张图和一些点对 \((x_i,y_i)\)。

定义好图:每对 \((x_i,y_i)\),都不存在路径到达。

再给出一些询问 \((p,q)\),表示询问加上 \((p,q)\) 这条边后,图是否依然是好图。


考虑每对 \((x,y)\) 和每对 \((p,q)\) 所在的连通块。

给每个连通块一个编号,记 \(id[u]\) 为 \(u\) 所在的连通块编号。

只有满足 \((id[p],id[q])\) 和每对 \((id[x],id[y])\) 都不相同,图才能依然保持为好图。

T6

有 \(n\) 天,给出一个长度为 \(n\) 的字符串 \(s\),表示小 A 的工作表,若为 # 则表示工作,反之为 . 则表示休息。

接下来,小 B 要决定他的工作表 \(t\)(也是 #.),对于一个 \(m\) 满足 \(m|n\),决定他的前 \(m\) 天的工作表,然后让第 \(i+m\) 天的工作情况和第 \(i\) 天一样,并且要求 \(n\) 天中每一天小 A 和小 B 都有至少一人工作,问共有多少种工作表的方案。


先枚举 \(m\) 为 \(n\) 的因数,\(O(\sqrt n)\),然后枚举 \(s\) 的每一个字符。如果 \(s[i]\) 为 .,则 \(t[i\mod m]\) 必须为 #

假设 \(t\) 的前 \(m\) 个字符中还剩下 \(k\) 个可以为 . 的位置,这些位置可以随便选,有 \(2^k\) 中。

但是,还要减去重复的情况:当 \(m=8\) 的 #.#.#.#.,可以在 \(m=4\) 的 #.#. 算一次。但又不能简单的减去,因为还有 \(m=2\) 的 #.……

所以做个容斥。

int dfs(string s) //求出s中有多少重复的情况 
{
	int ans = 0;
	for (int i = 1; i <= cnt; ++i) {
		if (s.length() % a[i] != 0 || a[i] == s.length()) continue;
		string t = "";
		int x = 0;
		for (int j = 0; j < a[i]; ++j) t += '.';
		for (int j = 0; j < s.length(); ++j)
			if (s[j] == '#') t[j % a[i]] = '#';
		for (int j = 0; j < t.length(); ++j)
			if (t[j] == '.') ++x;
		ans = ((ans + qpow(2, x, mod) - dfs(t)) % mod + mod) % mod;
	}
	return ans;
}
int solve(string s) //求出基于s的t有多少方案 
{
	int ans = 0;
	for (int i = 1; i <= cnt; ++i) {
		if (s.length() % a[i] != 0 || a[i] == s.length()) continue;
		string t = "";
		int x = 0;
		for (int j = 0; j < a[i]; ++j) t += '.';
		for (int j = 0; j < s.length(); ++j)
			if (s[j] == '.') t[j % a[i]] = '#';
		for (int j = 0; j < t.length(); ++j)
			if (t[j] == '.') ++x;
		ans = ((ans + qpow(2, x, mod) - dfs(t)) % mod + mod) % mod;
	}
	return ans;
}

标签:ABC,int,草莓,304,工作,给出,蛋糕,id
From: https://www.cnblogs.com/FLY-lai/p/18012016

相关文章

  • ABC 306
    前三题过水。D\(dp[i][j]\)表示吃完前\(i\)个菜,胃的状况为\(j\)(\(0\)是健康,\(1\)是不好)所获得的最大美味值。E暴力的平衡树。用multiset也行,一个记录前\(k\)大的,一个记录除了前\(k\)大之后的所有数。每次修改看看是从哪边修改的,改完再考虑要不要更新前\(k\)大......
  • ABC 305
    题目列表前三题过水,第四题分类讨论两个端点之间的距离和所在位置是清醒或睡眠即可。E题意:一张图上有一些结点有保安,每个保安有不同的警戒度\(h_i\),定义一个结点是安全的为这个结点可以到达一个保安\(x\),且距离\(\leqx\)。问有多少个安全的结点。痛失第五题很简单的......
  • ABC 310
    E\(dp[i][j]\)表示前\(i\)个里有多少个后缀答案为\(j\)。\(if(c[i]=='0')\{\)\(dp[i][0]=1;\)\(dp[i][1]=dp[i-1][0]+dp[i-1][1];\)\(\}\)\(else\{\)\(dp[i][0]=dp[i-1][1];\)\(dp[i][1]=1+dp[i-1][0];\)\(\}\)F......
  • ABC 309
    直接从F开。F三维偏序。把盒子按\(h_i\)排序,离散化,正常跑三维偏序(注意不能相等)。还要处理\(h_i\)相等的情况,可以再把\(h_i\)从大到小排序,然后\(w_i,d_i\)都要求严格大于,如果发现有一种情况是无论\(h_i\)咋排序都可以的,就删掉这种情况。G错排问题的推广。tjtj2......
  • ABC 312
    前三题氵D给定一个由(,?,)组成的字符串。每个?可以设定为任意括号。求有几种设定方法使得整个是合法括号序列。套路,dpE给定\(n\)个两两不相交的长方体,对每个长方体,求有多少个长方体与其有公共面。有一个可以大幅度优化代码麻烦程度的小技巧:因为坐标范围很小,我们直接把......
  • ABC 311
    前四题过水E枚举正方形的上边界所在行。对于第\(i\)行一个没洞的位置\((i,j)\),我们尝试求出以它为右上角的无洞正方形个数。结论:设以\((i,j-1)\)为右上角的无洞正方形边长最大为\(len\),那以\((i,j)\)为右上角的无洞正方形边长最大为\(len+1\)。以\((i,j)\)为右上......
  • [ABC327G] Many Good Tuple Problems 题解
    Description对于一对长度均为\(M\)且元素值在\(\left[1,N\right]\)之间的序列\((S,T)\),定义其为好的当且仅当:存在一个长度为\(N\)的\(01\)序列\(X\),使得其满足如下条件:对于任意\(i\in\left[1,M\right]\),有\(X_{S_i}\neqX_{T_i}\)。给定\(N,M\),求在......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    题目传送门前置知识大步小步算法解法递推式为\(x_{n}=(ax_{n-1}+b)\bmodp\),发现可以统一消去\(\bmodp\),只在最后参与计算。以下过程省去模运算。当\(x_{0}=t\)时,则\(n=0\)即为所求。当\(a=0,x_{0}\net\)时,递推式转化为\(x_{n}=b\bmodp\)。若\(b=t\),则......
  • AtCoder-ABC-Ex乱写
    ABC233ExManhattanChristmasTree先将\((x,y)\)变成\((x+y,x-y)\),也就是曼哈顿转切比雪夫,之后曼哈顿距离\(\lek\)的在切比雪夫坐标系下就是一个正方形。用主席树做矩形和,外层套一个二分即可,时间复杂度\(\mathcal{O}(n\log^2n)\)。ABC233Ex#include<bits/stdc++.h......
  • 【多线程例题】使用三个线程,分别可以打印A,B,C。要求实现三个线程协同打印,顺序打印出ABC
    顺序打印-进阶版方法一:三个线程竞争同一个锁,通过count判断是否打印三个线程分别打印A,B,C方法一:通过count计数打印(三个线程上同样的锁,打印一个,召唤所有锁,如果不满足条件,则wait等待,锁自动解锁)方法二:/***有三个线程,分别只能打印A,B和C*要求按顺序打印ABC,打印10次*输出示......