首页 > 其他分享 >CF1739 部分题解

CF1739 部分题解

时间:2022-10-05 20:44:16浏览次数:74  
标签:te return int 题解 long CF1739 include 部分 mod

比赛链接:https://codeforces.com/contest/1739

AB
水题

// by SkyRainWind
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f;

signed main(){
	int te;scanf("%d",&te);
	while(te --){
		int n,m;scanf("%d%d",&n,&m);
		if(n == 1 || m == 1){
			puts("1 1");continue;
		}
		if(max(n, m) >= 4){
			puts("1 1");continue;
		}
		puts("2 2");
	}

	return 0;
}
// by SkyRainWind
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f;

void solve(){
	vector<int>vc;vc.clear();
	int n;scanf("%d",&n);
	int gg=0;
	for(int i=1;i<=n;i++){
		int x;scanf("%d",&x);
		if(i == 1)vc.push_back(x);
		else{
			int lst = vc[vc.size() - 1];
			if(x > 0 && lst - x >= 0){
				gg=1;
			}else vc.push_back(x + lst);
		}
	}
	if(gg){puts("-1");return ;}
	for(int i : vc)printf("%d ",i);puts("");
}

signed main(){
	int te;scanf("%d",&te);
	while(te --)solve();

	return 0;
}

C
以 n=8为例,考虑draw的情况就是 2 3 6 7 || 1 4 5 8这种“螺旋”的,从大到小每次枚举当前剩下最大值在哪,每次加一个组合数即可,判一下最后一个1在哪

// by SkyRainWind
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f, mod =998244353;

int fac[65], inv[65];

int pw(int x,int y){
	if(y == 0)return 1;
	if(y == 1)return x;
	int mid = pw(x, y>>1);
	if(y&1)return 1ll*mid*mid%mod*x%mod;
	return 1ll*mid*mid%mod;
}

int C(int x,int y){
	return 1ll * fac[x] * inv[x-y] % mod * inv[y]%mod;
}

void solve(){
	int n;scanf("%d",&n);
	int r1 = 0, r2 = 0;
	int cur = n -1 ;
	for(int i = n/2 -1,p=1; i>=1; i--,p++){
		if(i == n/2-1)r1 += C(cur,i), --cur;
		else{
			if(p&1)r1 += (C(cur, i)+C(cur-1,i))%mod;
			else r2 += (C(cur,i)+C(cur-1,i))%mod;
			cur -= 2;
		}
		r1 %= mod, r2 %= mod;
	}
	if(n%4 == 0)++ r2;
	else ++ r1;
	if(n%4 == 0)++ r2;
	else if(n>2)++ r1;
	printf("%d %d 1\n",r1,r2);
}

signed main(){
	fac[0] = inv[0] = 1;
	for(int i=1;i<=60;i++)fac[i] = 1ll*fac[i-1]*i%mod;
	inv[60] = pw(fac[60], mod -2 );
	for(int i=59;i>=1;i--)inv[i] = 1ll * inv[i+1]*(i+1)%mod;
	int te;scanf("%d",&te);
	while(te --)solve();

	return 0;
}

D
显然先二分答案
直接贪心会有反例,比如:
1 5 1 1 2 3 3
答案是2而非3,断2->3边
这启示我们可以自底向上贪心,每次遇到当前子树最大深度>=mid的话而且当前点不是根且父亲不是根,就把当前子树连到根

// by SkyRainWind
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f, maxn = 2e5 + 5;

int n,k;
vector<int>g[maxn];
int dep[maxn];
int tot = 0;

int dfs2(int x,int fat,int lim){
	int curd = 0;
	for(int u : g[x]){
		curd = max(curd, dfs2(u, x,lim ));
	}
	++ curd;
	if(fat != 1 && x != 1 && curd >= lim){++tot;return 0;}
	return curd;
}

int check(int x){
	tot = 0;
	dfs2(1,-1,x);
//	printf("?? %d\n",tot);
	if(tot > k)return 0;
	return 1;
}

void solve(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)g[i].clear();
	for(int i=2;i<=n;i++){
		int p;scanf("%d",&p);
		g[p].push_back(i);
	}
	int l=1,r=n, ans;
//	for(int i=1;i<=n;i++)printf("%d ",dep[i]);puts("");
//	printf("%d\n",check(1));
//	return ;
	while(l <= r){
		int mid = l +r >>1;
		if(check(mid))r = mid-1, ans =mid;
		else l = mid+1;
	}
	printf("%d\n",ans);
}

signed main(){
	int te;scanf("%d",&te);
	while(te --)solve();

	return 0;
}

E
手玩一下全是1的样例发现,如果会出现二选一的情况,一定是(i,j)->(i,j+1)->(i+1,j+1)->(i+1,j+2)这种路径(其中(i,j+1)是1跳过了)
考虑dp,设\(dp[i][j]\)表示到(i,j)结尾的答案,其中是第一次到第j列
转移考虑普通的向右转移,还有一种如果(i^1,j)的数为1的话,那么(i,j+1)如果也为1,就是上面的螺旋走最优,如果为0,显然也是经过1更优
分析一下似乎情况就全了

// by SkyRainWind
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f, maxn = 2e5+5;

int n;
char s[2][maxn];
int dp[2][maxn][2];

void ck(int &mm,int a){mm = max(mm, a);}

signed main(){
	memset(dp, -0x3f, sizeof dp);
	scanf("%d",&n);
	for(int i=0;i<=1;i++)scanf("%s", s[i] + 1);
	s[0][n+1] = s[1][n+1] = '0';
//	dp[0][0][0] = 0;
	printf("%d\n",dp[0][0][0]);
	dp[0][1][s[1][1] - '0'] = s[1][1] - '0';
	for(int i=1;i<=n;i++){
		for(int j=0;j<=1;j++){
			
		}
	}
	printf("%d\n",dp[1][2][1]);
	printf("%d\n",max(dp[0][n+1][0], dp[1][n+1][0]));

	return 0;
}

标签:te,return,int,题解,long,CF1739,include,部分,mod
From: https://www.cnblogs.com/SkyRainWind/p/16756318.html

相关文章

  • CF1707B题解
    原题CF1707BDifferenceArray思路概述题意分析给定一个长度为\(n\)的序列\(\{a\}\)。每次执行以下操作对序列\(\{a\}\)进行差分,得到差分序列\(b_i=a_{i+1}-a......
  • 【科研工具---图表部分,如何画图从Fig. A 为 Fig. B】
    Q:MATLAB如何修改坐标轴的横纵坐标设置,使得2D图片平铺空间,不存在空白位置A:Step0:MATLAB画图出来的Figure框架,即是以下的左子图。Step1:选择左上角的一栏里面的Pr......
  • CF1739 C. Card Game
    题目链接题意简述有这样一个游戏,有一摞编号为\(1\simn\)的卡片(保证\(n\)为偶数),编号大的卡片比编号小的卡片更"强".两名玩家玩这个游戏,他们平均分这\(n\)......
  • 题解【CF1149C Tree Generator】
    CF1149CTreeGenerator™不一定更好的阅读体验。牛逼题&ZROIDay3数据结构选讲。来一波详细的题解。当时和\(\texttt{ys}\),\(\texttt{hy}\)还有小猴子讨论了半......
  • [题解]洛谷 P4700
    经典题没做出来,是不是该死?是不是该死?首先缩点什么的都是套路性的,然后发现一个事,你要是缩完点直接做,就相当于有向无玕图上标记一些点,求另一些点能到达多少个标记点,这个似乎......
  • CSP-S 模拟赛 #2 题解
    300rk3。题面是本校OJ的,链接挂了找我。upd:T1被xiaopanda的hack数据卡了。T1-A-BProblem出题是一件痛苦的事情!题目看多了也有审美疲劳,于是我舍弃了大家所熟......
  • texlive编译中发现字体有问题解决
    这里可以用tlmgrinfo命令搜索需要下载的字体并从CTAN官网下载。一般这个时候也会有对应的路径,比如texmf-dist/fonts/。把下载的字体解压放在这些路径下,然后分别运行mktexl......
  • 【LGR-122】T1 & T2 题解
    T1下面所说的做法来自于dty(%%%%%%%%%)注意到每一个数的绝对值是大于等于\(2\)的,那么就可以发现一个性质:当一个区间长度为\(len\)时,如果\(len\ge62\),那么这个区间的......
  • 组态软件报警问题解决
    作为工业自动化领域的从业者,经常会使用各种组态软件,近期作者在使用业界鼎鼎大名的组态软件IFix过程中就遇到了一个小case,现在分享给大家。众所周知,IFix在运行过程中报警会......
  • 【题解】P3583 [POI2015] KWA
    模拟赛出这道题???还好赛时乱搞做出来了(/hanxlinkDescription定义一个数\(n\)的拆分为:将\(n\)表示为若干个不同的正整数的平方和。令\(k(n)\)为\(n\)的拆分中最......