首页 > 其他分享 >Codeforces Round 899 (Div. 2)题解记录

Codeforces Round 899 (Div. 2)题解记录

时间:2024-10-13 20:32:37浏览次数:1  
标签:return 题解 ll ans Codeforces x% 899 include mod

题目链接:https://codeforces.com/contest/1882

A. Increasing Sequence

从1开始慢慢和\(a[i]\)的所有值比较,注意最后一个位置特判下

#include<iostream>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<unordered_set>
#include<stack>
#include<queue>
#include<algorithm>
#include<time.h>
#include<random>
using namespace std;
typedef long long ll;
mt19937 rnd(time(0));
const ll mod = 1e9 + 7;
void fio()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}
ll gcd(ll x, ll y)
{
	if (y == 0)
		return x;
	else
		return gcd(y, x % y);
}
ll ksm(ll x, ll y)
{
	ll ans = 1;
	while (y)
	{
		if (y & 1)
			ans = ans%mod*(x%mod)%mod;
		x = x%mod*(x%mod)%mod;
		y >>= 1;
	}
	return ans%mod%mod;
}
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ll n;
		cin>>n;
		ll ans=1;
		for(ll i=1;i<=n;i++)
		{
			ll x;
			cin>>x;
			if(i==n)
			{
				if(ans==x)
				ans++;
				break;
			}
			if(x==ans)
			{
				ans+=2;
				continue;
			}
			ans++;
		}
		cout<<ans<<endl;
	}
}

B. Sets and Union

数据范围小,考虑暴力,用总集试着删除每一个数即可

#include<iostream>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<unordered_set>
#include<stack>
#include<queue>
#include<algorithm>
#include<time.h>
#include<random>
using namespace std;
typedef long long ll;
mt19937 rnd(time(0));
const ll mod = 1e9 + 7;
void fio()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}
ll gcd(ll x, ll y)
{
	if (y == 0)
		return x;
	else
		return gcd(y, x % y);
}
ll ksm(ll x, ll y)
{
	ll ans = 1;
	while (y)
	{
		if (y & 1)
			ans = ans%mod*(x%mod)%mod;
		x = x%mod*(x%mod)%mod;
		y >>= 1;
	}
	return ans%mod%mod;
}
ll a[600];
ll b[600];
set<ll>q[60];
vector<ll>g[60];
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		for(ll i=1;i<=50;i++)a[i]=0,b[i]=0,q[i].clear(),g[i].clear();
		ll n;
		cin>>n;
		for(ll i=1;i<=n;i++)
		{
			ll x;
			cin>>x;
			for(ll j=1;j<=x;j++)
			{
				ll y;cin>>y;
				g[i].push_back(y);
				q[y].insert(i);
				a[y]++;
			}
		}
		//cout<<99<<endl;
		ll ans=0;
		for(ll i=1;i<=50;i++)
		{
			if(q[i].size()==0)continue;
			//cout<<99<<endl;
			ll cnt=0;
			for(ll k=1;k<=50;k++)
			{
				b[k]=0;
			}
			for(auto j:q[i])//模拟每个元素删除
			{
				for(auto k:g[j])
				{
					b[k]--;
				}
			}
				//cout<<99<<endl;
			for(ll j=1;j<=50;j++)
			{
				b[j]+=a[j];
				if(b[j]>0)cnt++;
			}
			ans=max(ans,cnt);
		}
		cout<<ans<<endl;
	}
}

C. Card Game

从右往左拿正数就是最佳选择,然后考虑下从左往右在正数出现前是否偶数位有<=0的数,或者找一个使总价值消耗最小的数

#include<iostream>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<unordered_set>
#include<stack>
#include<queue>
#include<algorithm>
#include<time.h>
#include<random>
using namespace std;
typedef long long ll;
mt19937 rnd(time(0));
const ll mod = 1e9 + 7;
void fio()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}
ll gcd(ll x, ll y)
{
	if (y == 0)
		return x;
	else
		return gcd(y, x % y);
}
ll ksm(ll x, ll y)
{
	ll ans = 1;
	while (y)
	{
		if (y & 1)
			ans = ans%mod*(x%mod)%mod;
		x = x%mod*(x%mod)%mod;
		y >>= 1;
	}
	return ans%mod%mod;
}
ll a[250000];
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ll n;
		cin>>n;
		ll ans=0;
		for(ll i=1;i<=n;i++)
		{
			cin>>a[i];
			if(a[i]>0)
			ans+=a[i];
		}
		if(ans==0)
		{
			cout<<0<<endl;
			continue;
		}
		ll wz=0;
		for(ll i=1;i<=n;i++)
		{
			if(a[i]>0)
			{
				wz=i;
				break;
			}
		}
		if(wz%2==1)
		{
			cout<<ans<<endl;
			continue;
		}
		ll u=-999999999999;
		ll pd=0;
		for(ll i=1;i<=wz-1;i++)
		{
			if(a[i]<0&&i%2==0)
			{
				pd=1;
				break;
			}
			u=max(u,a[i]);
		}
		if(pd)
		{
			cout<<ans<<endl;
		}
		else
		{
			u=max(u,-a[wz]);
			cout<<ans+u<<endl;
		}
	}
}

D. Tree XOR

子树变成根是最佳选择,然后逐层往上就有解了。
数据范围大,一个个枚举不现实,考虑转移关系,从一个根节点到另一个根节点的变换,要考虑一个是要变的,一个本来不要变后面变了的

#include<iostream>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<unordered_set>
#include<stack>
#include<queue>
#include<algorithm>
#include<time.h>
#include<random>
using namespace std;
typedef long long ll;
mt19937 rnd(time(0));
const ll mod = 1e9 + 7;
void fio()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}
ll gcd(ll x, ll y)
{
	if (y == 0)
		return x;
	else
		return gcd(y, x % y);
}
ll ksm(ll x, ll y)
{
	ll ans = 1;
	while (y)
	{
		if (y & 1)
			ans = ans%mod*(x%mod)%mod;
		x = x%mod*(x%mod)%mod;
		y >>= 1;
	}
	return ans%mod%mod;
}
ll a[250000];
vector<ll>g[250000];
ll sz[250000];
ll b[250000];
ll ans=0;
void dfs(ll x,ll fa)
{
	sz[x]=1;
	for(auto j:g[x])
	{
		if(j==fa)continue;
		dfs(j,x);
		sz[x]+=sz[j];
	}
//	cout<<x<<" "<<sz[x]<<endl;
	if(x!=1)
	{
		ans+=(a[fa]^a[x])*sz[x];
	}
}
ll n;
void df(ll x,ll fa,ll zy,ll fs)
{
	//sz[x]+=sz[fa];//中心转移
	if(x!=1)
	{
		fs-=(a[x]^zy)*sz[x];//最后一步不转化了
		fs+=(a[x]^zy)*(n-sz[x]);
		b[x]=fs;
	}
    for(auto j:g[x])
	{
		if(j==fa)continue;
		df(j,x,a[x],fs);
	}
}
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ans=0;
		cin>>n;
		for(ll i=1;i<=n;i++)cin>>a[i],g[i].clear();
		for(ll i=1;i<n;i++)
		{
			ll l,r;
			cin>>l>>r;
			g[l].push_back(r);
			g[r].push_back(l);
		}
		vector<ll>g;
		dfs(1,-1);
		b[1]=ans;
		df(1,-1,0,ans);
		for(ll i=1;i<=n;i++)cout<<b[i]<<" ";
		cout<<endl;
	}
}

E1

思路:先变成字符串型,然后分别暴力出各自数组变成顺序数组的次数,最后综合分析即可

标签:return,题解,ll,ans,Codeforces,x%,899,include,mod
From: https://www.cnblogs.com/cjcf/p/18462907

相关文章

  • 带余除法题解
    题面带余除法题目背景注意:提交至洛谷时,请使用标准输入输出,而非文件输入输出。NOTICE:WhensubmittingyourcodeonLuogusite,pleaseusestandardIOinsteadoffileIO.点我(或在本题底部)下载中文试题PDF。Clickhere(oratthebottomofthispage)todownload......
  • Tarjan缩点题单 刷题题解
    Tarjan缩点可以将一个图的每个强连通分量缩成一个点,然后构建新图,该图就会变成一个有向无环图。变成有向无环图之后就能结合最短路,拓扑......解决相应题目洛谷题单分享:https://www.luogu.com.cn/training/526565前几道是绿题,没什么好写的,大致过一下1.强连通分量题目链接:https:......
  • 【算法题解记录】_1
    目录【算法题解记录】_1leetcode_115题【算法题解记录】_1还是干这个事了,要吃饭嘛,决定把在解题或者解完题进一步优化的时候,发现的有意思的地方记录一下leetcode_115题动态规划解的字符串匹配,矩阵全部都遍历,用时比较长,发现排在网友们的末尾纸上画了一下矩阵,行数代表被匹配串s......
  • 系统开发基础错题解析二【软考】
    目录前言1.人机界面设计2.架构设计2.1管道过滤器体系2.2仓库风格3.软件测试相关概念4.白盒测试用例4.14.25.测试分类与阶段任务划分6.软件维护类型7.软件质量保证8.软件过程改进前言本文专门用来记录本人在做软考中有关系统开发基础的错题,我始终认为教学相长是最快......
  • 数学题解报告
    TeamWork题意:求\(\sum_{i=1}^n\dbinom{n}{i}i^k\)\(n<=1e9,k<=5e3\)推式子\[\begin{aligned}记f_{n,k}&=\sum_{i=1}^n\dbinom{n}{i}i^k\\&=\sum_{i=1}^n\left[\dbinom{n-1}{i-1}+\dbinom{n-1}{i}\right]i^k\\&=\sum_{i=1}^n\d......
  • 神奇的幻方 NOIP 2015 题解
    描述幻方是一种很神奇的 N×N 矩阵:它由数字 1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。当 N 为奇数时,我们可以通过下方法构建一个幻方:首先将 1 写在第一行的中间。之后,按如下方式从小到大依次填写每个数 K(K=2,3,⋯,N×N) :若 (K−1)......
  • Android12.0 需求开发篇+问题解决篇之IPC socket通信
    1.需求描述        应用组C程序客户端和Android系统层Java服务端进行通信需求,这里其实在Android系统下IPC的方式有很多,像Binder作为Android特有的跨进程通信,但是应用组的同事之前是非Android系统下进行应用开发,使用的都是socket这种通用IPC通信。这里为兼容应用组代码......
  • 题解:牛客小白月赛102(A - C)
    A序列中的排列题意:每次给你两个正整数\(n,k\),并给你一段长度为\(n\)的序列。(所有输入均为小于等于100的正整数)问:原序列中是否存在子序列,使得这个子序列是\(k\)的排列子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的......
  • BUUCTF_MISC题解析(7)
    7.wireshark下载文件发现里面是一个pcap格式的文件。而pcap格式就是网络分析工具保存的网络数据包,是捕获的从网卡发送或者接收的每一个数据包的离线网络流量。 在wireshark官网上下载wireshark,wireshark是网络封包分析工具。将文件用wireshark打开,发现有三个部分,上半部分绿......
  • P9020 [USACO23JAN] Mana Collection P 题解
    P9020[USACO23JAN]ManaCollectionP题解首先考虑对于长为\(d\les\)的最优路径,最优的方法一定是先在起点等\(s-d\)秒再走以确保收集到的最大。\(n\le18\)我们显然考虑状压dp。考虑最大法力值难以计算,正难则反,考虑使未被选择的最小。于是我们设\(dp_{sta,i}\)表示状......