ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #743 (Div. 2) ABC题解(持续更新)

2021-09-20 22:33:49  阅读:141  来源: 互联网

标签:743 int 题解 scanf Codeforces ..... maxn ans include


CSP202109很菜地只拿了390。。。过来更更题解。


A水题,所有数位换到个位来减就好

点击查看代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<bitset>
#include<queue>
#include<vector>
#include<cstdio>
#include<set>
#include<map>
#include<cmath>
 
using namespace std;
char ss[105];
int main(){
	int t,n;
	scanf("%d",&t);
	while(t--) {
		scanf("%d",&n);
		scanf("%s",&ss[1]);
		int ans = 0;
		for(int i=1;i<n;i++) {
			if(ss[i]!='0') ans += 1 + ss[i]-'0';
		}
		ans += ss[n]-'0';
		printf("%d\n",ans);
	}
	   
	return 0;
}

B

顺着一个一个数字枚举A数组中的数,找到可以满足的最小B数组的数然后计算答案就可以了。(具体还可以利用上单调性)

点击查看代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<bitset>
#include<queue>
#include<vector>
#include<cstdio>
#include<set>
#include<map>
#include<cmath>
 
using namespace std;
const int maxn = 2e5+5;
int t,n;
int a[maxn],b[maxn],pos[maxn];
int main(){
	scanf("%d",&t);
	while(t--) {
		scanf("%d",&n);
		for(int i=1;i<=n;i++) scanf("%d",&a[i]),pos[a[i]]=i;
		for(int i=1;i<=n;i++) scanf("%d",&b[i]),pos[b[i]]=i;
		int ans = 2*n;
		int MX = 2*n;
		for(int i=2*n-1;i>=1;i-=2) {
			MX = min(MX,pos[i+1]);
			ans = min(ans,pos[i]-1+MX-1);
		}
		printf("%d\n",ans);
	}	
	return 0;
}

C 好像就是一个拓扑排序的事啊,,有环无解,无欢转移如果出边的点更大就max(f[x])否则max(f[x]+1)。

点击查看代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<bitset>
#include<queue>
#include<vector>
#include<cstdio>
#include<set>
#include<map>
#include<cmath>
 
using namespace std;
const int maxn = 2e5+5;
vector<int>ve[maxn];
int n,rd[maxn],f[maxn];
int qe[maxn],qf,qb;
void init() {
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		scanf("%d",&rd[i]);
		for(int j=1;j<=rd[i];j++) {
			int x; scanf("%d",&x);
			ve[x].push_back(i);
		}
	}
	int cnt=0;
	qf = 1; qb = 0;
	for(int i=1;i<=n;i++) {
		if(!rd[i]) {
			qe[++qb] = i; f[i]=1;
		} else f[i] = 0;
	}
	while(qf<=qb) {
		int x = qe[qf++]; cnt++;
		for(int y:ve[x]) {
			if(y>x) f[y] = max(f[y],f[x]);
			else f[y] = max(f[y],f[x]+1);
			if(--rd[y]==0) {
				qe[++qb] = y;
			}
		}
	}
	if(cnt!=n) puts("-1");
	else {
		int ans = 1;
		for(int i=1;i<=n;i++)
			ans = max(ans,f[i]);
		printf("%d\n",ans);
	}
	for(int i=1;i<=n;i++) ve[i].clear();
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--) {
		init();
	}
	return 0;
}

D我裂开来。。题解没看懂????wtf.....留给以后看吧。。嘴巴上口胡就是对于n为奇数,先要满足所有数的xor和为0,那么就按照1,3,5.....n-4,n-2这么搞就可以保证n个数都有ai=ai-1并且an,an-2,an-3为0,之后an-4,an-6.....1这么再来搞就可以全数列为0。对于偶数n就是一定有一个奇数个的前缀+一个奇数个的后缀都满足这个搞法?but证明没懂,更不会code.....orz太菜了太菜了。

标签:743,int,题解,scanf,Codeforces,.....,maxn,ans,include
来源: https://www.cnblogs.com/newuser233/p/15315451.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有