首页 > 其他分享 >Codeforces Round 926 (Div. 2)(A~D)

Codeforces Round 926 (Div. 2)(A~D)

时间:2024-02-16 13:11:36浏览次数:27  
标签:结点 int rep Codeforces long solve Div 926 define

目录

A

输出最大值减最小值,或者排序算一下答案

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define inf 0x3f3f3f3f*1ll

using namespace std;

void solve()
{
	int n;
	cin>>n;
	vector<int>a(n+1);
	rep(i,1,n){
		cin>>a[i];
	}
	sort(a.begin()+1,a.end());
	int res=0;
	rep(i,2,n){
		res+=a[i]-a[i-1];
	}
	cout<<res<<endl;
}

signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

B

B还wa了一发,有点难受一开始推错了,写的太慢了
思路:
考虑对答案能贡献2的放格有多少个。
上面一行\(n\)个能对答案贡献\(2\),下面一行除了两端的两个都能对答案贡献2
所以一共能贡献2的方格有\(2 * n-2\)个
2254e4c951b6f898f04dc50015e3898.jpg

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define inf 0x3f3f3f3f*1ll

using namespace std;

void solve()
{
	int n,k;
	cin>>n>>k;
	int num2=2*n-2;
	if(k>2*num2){
		cout<<num2+k-num2*2<<endl;
	}else{
		cout<<k/2+(k%2!=0)<<endl;
	}
}

signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

C

c题溢出了中间应该提前结束
推公式
考虑每次的下注如果在这一轮赢得话就要把之前所有输的钱全部赢回来有点类似倍投的思想】
从一1开始,之前的下注总和记为\(sum\)
下一轮下注要下\(sum/(k-1)+1\)才能赢钱
中间如果\(sum>a\)的话要提前结束,说明下不到就会没钱了

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define inf 0x3f3f3f3f*1ll

using namespace std;

void solve()
{
	int k,x,a;
	cin>>k>>x>>a;
	int sum=0;
	rep(i,1,x){
		if(sum>a){
			cout<<"NO"<<endl;
			return;
		}
		sum+=sum/(k-1)+1;
	}
	if((a-sum)*(k-1)>sum){
		cout<<"YES"<<endl;
	}else{
		cout<<"NO"<<endl;
	}
}

signed main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//   	freopen("1.in", "r", stdin);
	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

D

树形dp思路参考的是b站的一个题解
这题和c题的题目描述感觉都有点抽象很难懂。
题意:让我们求点集的方案数,点集中没有3个点在一条直线。
\(f[u][0]:表示以u为根节点的子树中,危险结点数为0个的方案总数\)
\(f[u][1]:表示以u为根节点的子树中,危险结点数为1个的方案总数\)
\(f[u][2]:表示以u为根节点的子树中,危险结点数为2个的方案总数\)
考虑状态转移
\(f[u][0]=1\)只能当前u这个结点是危险结点时,满足
\(f[u][1] * =(f[v][0]+f[v][1])\)当前结点可能是危险结点,也可能不是,
如果是危险结点那么上一个结点就不是危险结点,如果当前结点不是危险结点,那么上一个一定是危险结点
\(f[u][2]=(f[u][2]+f[u][1])\):讨论同\(f[u][1]\)

#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back

using namespace std;
const int mod=998244353;
void solve() {
	int n;
	cin>>n;
	vector<vector<int>>g(n+1);
	rep(i,1,n-1){
		int u,v;
		cin>>u>>v;
		g[u].pb(v);
		g[v].pb(u);
	}
	vector<vector<int>>f(n+1,vector<int>(3));
	auto dfs=[&](auto &&dfs,int u,int fa)->void{
		f[u][0]=1;f[u][1]=1;
		for(auto v:g[u]){
			if(v==fa){
				continue;
			}
			dfs(dfs,v,u);
			f[u][1]*=(f[v][0]+f[v][1]);
			f[u][2]+=f[v][2]+f[v][1];
			rep(i,0,2){
				f[u][i]=(f[u][i]+mod)%mod;
			}
		}
	};
	dfs(dfs,1,-1);
	int ans=0;
	rep(i,0,2){
		ans=(ans+f[1][i])%mod;
	}
	cout<<(ans+mod)%mod<<endl;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
//	freopen("1.in", "r", stdin);
	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

标签:结点,int,rep,Codeforces,long,solve,Div,926,define
From: https://www.cnblogs.com/cxy8/p/18017048

相关文章

  • Codeforces Round 926 (Div. 2) 题解
    比赛链接:https://codeforces.com/contest/1929官解链接:https://codeforces.com/blog/entry/125943出的很差的一场。推歌CF1929A.SashaandtheBeautifulArray题意任意排列数组\(a_{1..n}\),求\(\sum_{i=2}^n(a_i-a_{i-1})\)的最大值。题解见过最显然的A题,奠定了......
  • Codeforces Round 926 (Div. 2)
    A-SashaandtheBeautifulArray给出的是差分的和,显然等于最后一个减掉第一个,于是答案为最大值减最小值。SubmissionB-SashaandtheDrawing观察到:前几次操作可以使答案\(+2\),之后每次只能让答案\(+1\)。手玩一下发现最优方案是先填满第一列,再从最后一列第二行填到倒......
  • CF-926(已更新:B)
    CF-926两点睡,七点起,阎王夸我好身体……主要这场实在是难绷,两个小时都在C题上吊死了,也不是没想过跳题,只是后面的题我更是一点思路都没有-^-“就喜欢这种被揭穿的感觉,爽!”B分析​ 涂色的单元格能够包含k种对角线,很明显要根据图像的具体性质想答案:然而我赛时是一股脑地猜结......
  • Codeforces Round 906 (Div. 2)
    A.Doremy'sPaint3对于式子\(b_1+b_2=b_2+b_3=\dots=b_{n-1}+b_n=k\),从中挑出\(b_i+b_{i+1}=b_{i+1}+b_{i+2}\),得到\(b_i=b_{i+2}\),这就意味着所有奇数位置上的数需要相等,所有偶数位置上的数也需要相等。对于\(n\)个数而言,有\(\lceil\frac{n}{2}\rc......
  • 数组元素关系映射——cf_925_D. Divisible Pairs
    目录问题概述思路分析参考代码做题反思问题概述原题参考:D.DivisiblePairs给出整数n、x、y和长度为n的数组,要求求出数组中满足以下关系的数对x|ai+ajy|ai-aji<j思路分析刚开始看到这个题的时候觉得没思路,坐牢卡半天发现感觉是对的(裂开)。题解给的是map的做法,看完之......
  • Codeforces 做题笔记
    1841EFilltheMatrix刚开始思路错了,以为就从下往上铺但发现要尽量让横的连续段断开的次数少,每断开一次相当于数量\(-1\)所以从宽度最大的矩形开始填,尽量填满可以用set维护当前行的连续段,这一列遇到黑格就split,去除宽度为\(1\)的,同时记录加入的时间戳来计算矩形高度vo......
  • Codeforces Round 925 (Div. 3)
    A简单分讨。最前面a能放多少就放多少,大头尽量放在后面。B先算出每个水缸最终的水量,然后从前往后扫,多的水平到下一个水缸里去。假如扫到一个水缸小于平均值,那么没救了,输出NO。CC<<B。考虑全体值为\(a_1\)与\(a_n\)时的最小代价,搞两个指针,从前后开始扫一扫即可。D......
  • Codeforces Round 925 (Div. 3) 赛后总结
    此次总结借鉴了Register_int,0x3ea,幻想家协会会长的题解。感谢大佬。RecoveringaSmallString题目大意:将字母a-z编号为1-26,给出一个整数,此整数为三个字母之和,求改字符串的最小字典序。分析可以暴力循环,或者分情况讨论.我们只要尽力保持越前面的字母越小越好。#include<i......
  • Codeforces Round 925 (Div. 3)
    ABC都是一眼题,用了16min。D没有一眼看出来,先往后看。E是博弈论直接跳过。F一眼出思路。G一开始都错题了,不会做。遂先写F。发现我不会判断图中是否有环。一开始写了个dfs以为能过结果复杂度是\(\mathcalO(n^2)\)的,罚时+1。想改成DP那样的记忆化发现很假。于是b......
  • Codeforces Round 925 (Div. 3)
    CodeforcesRound925(Div.3)A-RecoveringaSmallString解题思路:枚举.代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pa......