题目 首先令\(x=i\)时的答案为\(f_i\) ,令\(f_i\)对应的普通生成函数为\(F(x)\). 很容易发现\(F(x)=\sum_{i=0}^n (1+x)^{3i}\),sigma是在枚举第几轮吃(i=0也枚举了,不影响答案), \((1+x)^{3i}\)是在枚举\(3i\)只猪里哪些会被吃. 用等比数列求和公式求出\(F(x)=\frac{(1+x)^{3n+3}-1}{(1+x)^3-1}\). \(F(x)\)的分子可以用二项式定理暴力展开,分母展开是\(x^3+3x^2…
Codeforces Round #549 (Div. 2) B. Nirvana [题目描述] B. Nirvana time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Kurt reaches nirvana when he finds the product of all the digits of some positive int…
题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot…
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有的牌上的数互不相同且在 \([1,n]\) 内 每回合双方都会出一张牌,牌上数小的一方的牌会给牌上数大的一方 拿到所有 \(n\) 张牌的一方赢得比赛 求两人都采取最优策略的情况下谁会赢 多组数据,数据组数 \(t\le100\) 做法:贪心 设 \(a\) 和 \(b\) 为双方的最大数 显然如果…
orz djq_cpp lgm A 题意 给定一个分别含有 \(\frac n2\) 个左括号和右括号的括号序列 每次可以将序列的一个区间翻转 求一个不超过 \(n\) 次的操作方案,使得操作完之后的序列是合法括号序列,并且恰好有 \(k\) 个前缀是合法括号序列 多组数据,所有数据的 \(n\) 之和不超过 \(2000\) 做法:构造 随便生成一个合法的目标序列,如 \(k-1\) 个 () 相接再接上 \(\frac n2-k+1\) 个 ( 和 \(\frac n2-k+1\) 个 )…
[题目] A. Basic Diplomacy [描述] Aleksey有n个朋友,有一个m天的假期,每天都需要一个朋友来陪他.给出每天有空的朋友的编号,要求同一个朋友来的天数不能超过m/2上取整.求是否有一个朋友到访的方案,没有输出"NO",有输出"YES"并输出任意一种方案. 数据范围:1<=n,m<=100000,保证每天至少有一个朋友有空,共t组数据,1<=t<=10000 [思路] 这道题只要注意到"同一个朋友来的天数不能…
链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为之前的2倍:否则危险系数不改变.起始危险系数为1.求可能的最大的危险系数. 思路:遍历图 在图上画一画,就会发现,只要一块连通的图中的一个点放入后,之后每添加这块图中的一个点就会导致危险系数乘2.那么我们只需要找到一共有多少个连通图tmp,然后用总数减去得到ans.答案就是1LL<<ans.注意l…
链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出一种可行解. 思路:脑筋急转弯... 下过国际象棋的都知道,棋盘本身可以染色成为黑白相间的格子,毁掉其中的格子后也不会影响其2-SAT的性质.直接输出再加一个判断当前格子是否能放棋子就可以了. 我的实现: 1 #include <iostream> 2 #include <cstdio>…
很久没rated打过cf的比赛了,这次打得还行,至少进前100了 点我看题 A. Glory Addicts 把类型0的数放进数组a里,类型1的数放进数组b里.如果\(|a|=|b|\),你可以把所有数里最小的放在第一个,其他的交错排列,这样除了最小的其他都能取到2的系数.这个需要特判.否则假设\(|a|>|b|\),则可以把a中最小的放第一个,然后分别把b和a中最大的\(|b|\)个拿出来交替排列,这样能使b和a中最大的\(|b|\)个都取到2的系数.容易发现没有更好的排法了. 时间复杂度\(…
贪心的选取最优解 然后相减好 记得要开long long #include <cstdio> #include <algorithm> #include <cstring> #include <set> #include <queue> #define int long long using namespace std; ,ansb=,posa=,posb=,n,a[],b[]; bool cmp(int a,int b){ if(a>b)…