Codeforces Round #656 (Div. 3)部分题解
Codeforces Round #656 (Div. 3)题解
A.Three Pairwise Maximums
解题思路:
依照题意和样例,三个整数x,y,z必须有两个相同且都比第三个数大。
如果x==y则说明a为最大值,此时需要满足a>=z,如果不满足该条件,则无解,因为z=max(b,c),我们不能确定b,c谁比较大,所以我们就假设两个数一样的即可。而当y == z和x == z同理。
#include<bits/stdc++.h>
using namespace std;
int a[3];
int main() {
	//freopen("in.txt", "r", stdin);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t; cin >> t; while (t--) {
		cin >> a[0] >> a[1] >> a[2];
		sort(a, a + 3);
		if (a[1] != a[2]) {
			cout << "NO" << endl;
			continue;
		}
		cout << "YES" << endl;
		cout << a[0] << " " << a[0] << " " << a[2] << endl;
	}
}
B.Restore the Permutation by Merger
题目说是相对顺序插入的,所以我们可以直接遍历来做。
#include<bits/stdc++.h>
using namespace std;
int t, n, a;
int main() {
	//freopen("in.txt", "r", stdin);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin >> t; while (t--) {
		cin >> n; int b[55] = { 0 };
		for (int i = 0; i < 2 * n; ++i) {
			cin >> a;
			if (!b[a])
				cout << a << " ";
			b[a]++;
		}
		cout << endl;
	}
}
C.Make It Good
解题思路:
满足中间大两边小。
要找最长“好序列”,从后往前找,找到第一个不满足从后往前递增条件的元素,然后从这个元素往前找,找到开始升的那个元素就停止。最后答案就是n减去最长“好序列”长度。
#include<bits/stdc++.h>
using namespace std;
int a[200005];
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> a[i];
        int R = n;
        while (a[R - 1] >= a[R] && R >= 1) R--;
        while (a[R - 1] <= a[R] && R >= 1) R--;
        int ans = R - 1;
        if (ans == -1) ans = 0;
        cout << ans << endl;
    }
    return 0;
}
D. a-Good String
解题思路:
暴力枚举,取最小值
#include<bits/stdc++.h>
using namespace std;
char a[131073];
int t, n;
int solve(int l,int r,char m) {
	if (l == r) {
		if (a[l] == m)return 0;
		else return 1;
	}
	int mid = (l + r) >> 1, left = 0, right = 0,len = r - l + 1;
	for (int i = l; i <= mid; ++i) if (a[i] == m)left++;
	for (int i = mid + 1; i <= r; ++i) if (a[i] == m)right++;
	int ans = min(len / 2 - left + solve(mid + 1, r, m + 1), len / 2 - right + solve(l, mid, m + 1));
	return ans;
}
int main() {
	//freopen("in.txt", "r", stdin);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin >> t; while (t--) {
		char m = 'a';
		cin >> n;for(int i = 1;i <= n;++i){
			cin >> a[i];
		}
		cout << solve(1, n, m) << endl;
	}
}
E. Directing Edges
解题思路:
首先可以看出这是一道拓扑的题。但由于不太好维护得建图。建反方向的边,最后再拓扑排。但由于我太菜了,就没做出来。代码就放dalao们做的了。
#include<bits/stdc++.h>
using namespace std;
vector<int>e[200005];
int u[200005],v[200005];
int T,n,m;
int in[200005],tp[200005];
queue<int>q;
bool topsort(){
	int ct=0,tmp=0;
	for(int i=1;i<=n;i++) if(!in[i]) q.push(i),ct++,tp[i]=++tmp;
	while(!q.empty()){
		int U=q.front();q.pop();
		for(int V:e[U]){
			in[V]--;
			if(!in[V]) q.push(V),ct++,tp[V]=++tmp;
		}
	}
    return ct<n;
}
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&m);memset(in,0,sizeof(in));
		for(int i=1;i<=n;i++) e[i].clear();
		for(int o,i=1;i<=m;i++){
			scanf("%d%d%d",&o,&u[i],&v[i]);
			if(o) in[v[i]]++,e[u[i]].emplace_back(v[i]);
		}if(topsort()) puts("NO");
		else{
			puts("YES");
			for(int i=1;i<=m;i++)
			if(tp[u[i]]<tp[v[i]]) printf("%d %d\n",u[i],v[i]);
			else printf("%d %d\n",v[i],u[i]);
		}
	}return 0;
}
Codeforces Round #656 (Div. 3)部分题解的更多相关文章
- # Codeforces Round #529(Div.3)个人题解
		Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ... 
- Codeforces Round #557 (Div. 1) 简要题解
		Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ... 
- Codeforces Round #540 (Div. 3) 部分题解
		Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ... 
- Codeforces Round #538 (Div. 2) (A-E题解)
		Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ... 
- Codeforces Round #531 (Div. 3) ABCDEF题解
		Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ... 
- Codeforces Round #527 (Div. 3) ABCDEF题解
		Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ... 
- Codeforces Round #499 (Div. 1)部分题解(B,C,D)
		Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ... 
- Codeforces Round #545 (Div. 1) 简要题解
		这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ... 
- Codeforces Round #624 (Div. 3)(题解)
		Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ... 
- Codeforces Round #821(Div.2) (A-C) 题解
		Codeforces Round #821(Div.2) (A-C) A.Consecutive Sum 大致题意 给定一组共 n 个数据 ,如果俩个数的下标在 mod k 意义下同余,则可以交换a[ ... 
随机推荐
- Linux 运维人员最常用 150+命令汇总
			版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 目录 版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 命令帮助手册1 命令帮助手册2 ... 
- Java中的并发队列
			1.队列 队列是一种数据结构.它有两个基本操作:在队列尾部加入一个元素,和从队列头部移除一个元素(注意不要弄混队列的头部和尾部)就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻 ... 
- 探究vue的diff算法
			1.diff算法是什么? diff算法是一种通过**同层的树节点**进行比较的高效算法 Diff 算法探讨的就是虚拟 DOM 树发生变化后,生成 DOM 树更新补丁的方式.对比新旧两株虚拟 DOM 树 ... 
- python 获取apk 信息
			python 获取apk 信息 1.安装androguard pip install androguard 2.获取apk的相关信息 引入基础信息 from androguard.misc impor ... 
- 面试官:说一下MySQL主从复制的原理?
			MySQL 主从复制(Master-Slave Replication)是一种数据复制技术,用于在多个数据库服务器之间的数据同步.在主从复制架构中,一个服务器被设置为主服务器(Master),充当数据 ... 
- Git和Github库详细使用教程
			SVN 是集中式或者有中心式版本控制系统,版本库是集中放在中央服务器的; Git 是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为 ... 
- 【2】从零玩转OSS阿里云存储服务之Java代码操作-2-cong-ling-wan-zhuan-oss-a-li-yun-cun-chu-fu-wu-zhi-java-dai-ma-cao-zuo
			title: [2]从零玩转OSS阿里云存储服务之Java代码操作 date: 2021-06-09 17:37:14.486 updated: 2021-12-26 17:43:12.779 url ... 
- 在Linux上部署.net Core  步骤以及遇到的一些问题
			Linux安装部署手册 一.安装.NET Core SDK centos 7 系统命令为: sudo rpm -Uvh https://packages.microsoft.com/config/ce ... 
- flutter BLoC框架
			BLoC(Business Logic Component)是一种在Flutter中用于管理状态和处理业务逻辑的设计模式和架构模式. BLoC 的核心思想是将应用程序的状态.业务逻辑和UI分离开来,以 ... 
- 神经网络基础篇:史上最详细_详解计算图(Computation Graph)
			计算图 可以说,一个神经网络的计算,都是按照前向或反向传播过程组织的.首先计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作.后者用来计算出对应的梯度或导数.计算图解释了为什么用这种方式 ... 
