首页 > 其他分享 >Codeforces 890-891的一些题目的反思

Codeforces 890-891的一些题目的反思

时间:2023-08-08 17:47:51浏览次数:46  
标签:890 891 return sz int Codeforces ans include

和atcoder一起出交互题是吧。

D题回复逆序对个数,对于[L,R-1]和[L,R],如果R是最大值,那么对逆序对个数无影响。这样来确认某个数是不是最大的,然后递归扩展到整个区间

这里看到逆序对,要想到归并排序、分治、递归、区间合并。。。。。

查看代码

// Problem: D. More Wrong
// Contest: Codeforces - Codeforces Round 890 (Div. 2) supported by Constructor Institute
// URL: https://codeforces.com/contest/1856/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
#include<iostream>
using namespace std;
int ask(int l,int r)
{
	if(l==r)return 0;
	cout<<"? "<<l<<" "<<r<<endl;
	int c;
	cin>>c;
	return c;
}
int solve(int l,int r)
{
	if(l==r)return r;
	int mid=l+r>>1;
	int L=solve(l,mid),R=solve(mid+1,r);
	if(ask(L,R-1)==ask(L,R))
	return R;
	return L;
}
int main()
{
	int T,n;
	cin>>T;
	while(T--)
	{
		cin>>n;
		int ans=solve(1,n);
		 cout << "! " << ans << endl;
	}
	return 0;
}

E1当时想到了思路,不过在怎么让乘积最大那里陷入困境。DP实在是太差了。每一层贡献的是分成两个后的最大乘积。另外就是算子树大小也不熟练,老是害怕DFS会爆。顺便学习了bitset优化的01背包

查看代码
 // LUOGU_RID: 119388498
// Problem: E1. PermuTree (easy version)
// Contest: Codeforces - Codeforces Round 890 (Div. 2) supported by Constructor Institute
// URL: https://codeforces.com/contest/1856/problem/E1
// Memory Limit: 512 MB
// Time Limit: 2000 ms

#include<iostream>
#include<vector>
#include<bitset>
using namespace std;
const int maxn=5005;
int n,x;
long long tot;
vector<int>tree[5005];
int sz[5005];
void dfs(int i)
{
	bitset<maxn>dp;
	dp[0]=1;
	//dp.set(0);
	for(auto nex:tree[i])//这个for循环承载了太多
	{
		dfs(nex);//计算子树大小
		sz[i]+=sz[nex];
		dp|=dp<<sz[nex];//相当于01背包的内层循环。
	}
	long long tmp=0;
	for(int j=0;j<=n/2;j++)
	{
		//if(dp.test(j))
		if(dp[j])
		{
			tmp=max(tmp,1LL*j*(sz[i]-j));
		}
	}
	tot+=tmp;
	sz[i]++;
}
signed main()
{
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		cin>>x;
		tree[x].push_back(i);
	}
	dfs(1);
	cout<<tot;
	return 0;
}

891G

当时想到了枚举一个点两边连的点数多少,有点小歪。而且没有想到怎么计算点的个数。并查集和最小生成树已经快忘没了。

查看代码
 // Problem: G. Counting Graphs
// Contest: Codeforces - Codeforces Round 891 (Div. 3)
// URL: https://codeforces.com/contest/1857/problem/G
// Memory Limit: 256 MB
// Time Limit: 2000 ms
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int mod=998244353;
inline int qow(int x,int y)
{
	int ans=1;
	while(y)
	{
		if(y&1)ans=(ans*x)%mod;
		x=(x*x)%mod;
		y>>=1;
	}
	return ans;
}
int f[200005],sz[200005];
int fin(int x)
{
	if(x==f[x])return f[x];
	return f[x]=fin(f[x]);
}
struct node
{
	int x,y,w;
}a[200005];
void solve()
{
	int n,s,ans=1;
	cin>>n>>s;
	f[n]=n;
	sz[n]=1;
	for(int i=1;i<n;i++)
	{
		f[i]=i;
		sz[i]=1;
		cin>>a[i].x>>a[i].y>>a[i].w;
	}
	sort(a+1,a+n,[](node x, node y){return x.w<y.w;});
	for(int i=1;i<n;i++)
	{
		int x=fin(a[i].x),y=fin(a[i].y),szx=sz[x],szy=sz[y];
		int edgeset=szx*szy-1;//除了已经添加的这条边,其它可以添加的边
		if(s-a[i].w+1>0)
		ans=(ans*qow(s-a[i].w+1,edgeset))%mod;//每个可以添加边的空位都可以添加大于该边长度到上限的个数或者不加
		sz[x]+=sz[y];
		f[y]=x;
		sz[y]=0;
	}
	cout<<ans<<"\n";
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	return 0;
}

 

标签:890,891,return,sz,int,Codeforces,ans,include
From: https://www.cnblogs.com/qbning/p/17614987.html

相关文章

  • codeforces 891 (div3)857E - Power of Points
    E.点的力量每个测试限时2秒每个测试限制内存为256兆字节输入以标准格式输入输出以标准格式输出给定n个具有整数坐标x1,…xn的点,这些点位于数线上。对于某个整数s,我们构建段[s,x1],[s,x2],…,[s,xn]。注意,如果xi<s,则段将类似于[xi,s]。段[a,b]覆盖了所有整数点a,a+1,a+2,…,b。......
  • Codeforces 1857D:Strong Vertices 与图论无关的出度最大统计
    1857D.StrongVerticesDescription:给定两个长度均为\(n\)的数组\(a\)和\(b\)(编号\(1\)~\(n\)),如果\(a_u-a_v\geqb_u-b_v\)\((u\neqv)\),那么从\(u\)到\(v\)建立一条有向边。"Strong"定义为:一个点\(V\)可以经过有向图中合法的通路到达其他所有的点。请求解出"......
  • Codeforces Round 891 (Div. 3)
    A.ArrayColoring题意给你\(n(2\len\le50)\)个数,你可以把每个数染成红或蓝,求是否有方案满足每个颜色都有数而且两种颜色每个颜色内所有数之和的奇偶性相同。多组数据\((t\le1000)\)。例如:\([1,2,4,3,2,3,5,4]\)染成\([\color{blue}1,\color{blue}2,\color{red}4,\color{......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute A-E1
    An=50非常小所以直接暴力枚举枚举每次把某个数以下的全部减完然后看一下是否上升就行 https://codeforces.com/contest/1856/submission/217275334  B题直接贪心前面优先放最小的最后一个放最大的 然后如果重复了就到前面去看能不能调整一下 https://codeforces.......
  • 国产化SCT52241双通道下管IGBT/MOSFET栅极驱动器,可替代UCC27525A、ISL89165等
    SCT52241是是一款宽供电电压、双通道、高速、低测栅极驱动器,包括功率MOSFET,IGBT。单个通道能够提供高达4A拉电流和4A灌电流的轨到轨驱动能力,并实现轨到轨输出。高达24V宽电压范围提高功率器件开关瞬间栅极驱动的振铃幅值裕度。13ns输入输出传输延迟特性适合高频功率转换器应用。SCT......
  • Codeforces Round 890 (Div. 2)
    A.TalesofaSort题目大意Alphenhasanarrayofpositiveintegers\(a\)oflengthn.Alphencanperformthefollowingoperation:Forall\(i\)from1ton,replace\(a_i\)with\(\max(0,a_i−1)\).Alphenwillperformtheaboveoperationuntil\(......
  • Codeforces Round #890 Div.2
    link题号:1856A~E2A题面:给定一个正整数\(n\)和一个长度为\(n\)的序列\(a\),重复执行以下操作直至\(a\)序列单调不减:\(\forall1\lei\len\),\(a_i=\max(a_i-1,0)\)。求一共需要执行多少次操作。多测,共\(t\)组数据。对于所有数据,保证\(1\let\le500\)......
  • Codeforces Round 890 (Div. 2) A-E1
    A.TalesofaSort题意:给出一个长为n的数组a,每次操作可以使得所有的数-1,最小不会小于0,问至少需要多少次操作才能使得a变得有序。Solution把数组a排序,从大到小遍历,如果当前的\(a[i]\)不是原来的话,那么要想让它有序,必须进行当前的\(a[i]\)次操作,这样才能使得它有序voidsolve()......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute
    Preface现在开始严格按照双号上分法来打CF了,大致就是每次比赛都拿两个号中分较少的那个打,这样可以保证两个号的最高分不降然后昨天打完就后悔了,没有拿hl666那个号打导致没抓住难得的上分机会,本来可以打到橙名渡劫局的但分全加在Kusanagi_Misuzu那个号上了不过昨天这场其实可以......
  • 【题解】Codeforces Round 890(CF1856)
    赛时过了A-E1,rk195可惜是E2傻逼了不会背包优化了,直接连普及组水平都不到了。A.TalesofaSort题目描述:给定长度为\(n\)的序列\(a\),每次操作为对于所有\(i\)将\(a_i\)变为\(\max(a_i-1,0)\),询问最少多少次操作之后可以让序列\(a\)单调不降。题目分析:唯一能改变......