IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Codeforces Round #792 (Div. 1 + Div. 2) -> 正文阅读

[C++知识库]Codeforces Round #792 (Div. 1 + Div. 2)

Codeforces Round #792 (Div. 1 + Div. 2)

Problem A

题目保证了没有0,那么一直除以10,取模10的数最小。但是要特判一位数和两位数的情况。

// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm> 
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long

using namespace std;



int n, T = 1;

void ready()
{
	int cnt = 0;
	cin >> n;
	int t = n;
	int minn = 10;
	while (n) {
		cnt++;
		minn = min(n % 10, minn);
		n /= 10;
	}
	if (cnt == 2) {
		minn = t % 10;
	}
	cout << minn << '\n';
}


void work()
{

}

signed main()
{
	IOS;
	cin>>T;
	while (T--) {
		ready();
		work();
	}
	return 0;
}



 

Problem B

三种情况,使x=ay=bz=c,三种情况分别推出x,y,z的公式,都去判断是否满足条件即可。

// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm> 
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long

using namespace std;



int n, T = 1;
int a, b, c;

	int x, y, z;
void ready()
{
	cin >> a >> b >> c;
}

bool check_() {
	if (x % y == a && y % z == b && z % x == c)
		return true;
	return false;
}


void work()
{
	x = a; y = a + b + c; z = a + c;
	if (check_()) {
		cout << x << ' ' << y << ' ' << z << '\n';
		return;
	}
	x = a + b; y = b; z = a + b + c;
	if (check_()) {
		cout << x << ' ' << y << ' ' << z << '\n';
		return;
	}
	x = a + b + c; y = b + c; z = c;
	if (check_()) {
		cout << x << ' ' << y << ' ' << z << '\n';
		return;
	}
}

signed main()
{
	IOS;
	cin>>T;
	while (T--) {
		ready();
		work();
	}
	return 0;
}



 

Problem C

只能调换两列,如果一行非递增,调换了两列之后成为了递增,那么其他行业必须调转这两列也是递增的状态。所以每一行每一行操作,排序后判断是否有错位的列,如果错位的列数超过2,则直接输出-1。如果所有行都判断后错位的列数为0,则说明已经处于递增情形,交换1行和1列。如果出现了错位列数刚好为2 的,跳出循环,调换这两列,看之后的总体是否也是递增的即可。

// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm> 
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long

using namespace std;

const int N = 2e5 + 5;

vector<int> ve[N];
vector<int> bad;
vector<int> alls;
unordered_set<int> se;
int n, T = 1, m;
int a[N];
int f[N];

void ready()
{
	cin >> n >> m;
	ffor(i, 1, n) {
		ve[i].clear();
		ffor(j, 1, m) {
			int temp;
			cin >> temp;
			ve[i].push_back(temp);
		}
	}
	ffor(i, 1, m) f[i] = false;
}

int find(int x) {
	int l = 0, r = alls.size() - 1;
	while (l < r) {
		int mid = l + r >> 1;
		if (alls[mid] >= x) r = mid;
		else l = mid + 1;
	}
	return r + 1;
}

void out() {
	cout << "f=";
	ffor(i, 1, m) cout << f[i] << ' ';
	cout << '\n';
}

void work()
{
	bad.clear();
	bool win = true;
	ffor(i, 1, n) {
		alls.clear();
		for (auto item : ve[i]) {
			alls.push_back(item);
		}
		sort(alls.begin(), alls.end());
		for (int j = 0; j < m; j++) {
			if (alls[j] != ve[i][j]) {
				bad.push_back(j);
				win = false;
			}
		}
		if (!win) {
			break;
		}
	}
	if (win) {
		cout << "1 1\n";
		return;
	}
	if (bad.size() != 2) {
		//cout << "size=" << bad.size() << '\n';
		cout << "-1\n";
		return;
	}
	int l = bad[0], r = bad[1];
	//cout << l << ' ' << r << '\n';
	ffor(i, 1, n) swap(ve[i][l], ve[i][r]);
	win = true;
	ffor(i, 1, n) {
		ffor(j, 1, m - 1) {
			if (ve[i][j] < ve[i][j - 1]) {
				win = false;
				break;
			}
		}
	}
	if (win) cout << l + 1 << ' ' << r + 1 << '\n';
	else cout << -1 << '\n';
}
signed main()
{
	IOS;
	cin>>T;
	while (T--) {
		ready();
		work();
	}
	return 0;
}



 

Problem D

贪心,跳过a[i]+i最大的点。

感谢Lnn哥的解答,为何能选择这个贪心策略。

在这里插入图片描述

主要还是j的和是固定的,这个比较难想到。

// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm> 
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long

using namespace std;

const int N = 2e5 + 5;

int n, T = 1, k;
PII a[N];
bool f[N];
int b[N];

void ready()
{
	cin >> n >> k;
	ffor(i, 1, n) {
		f[i] = false;
		cin >> a[i].first;
		a[i].second = i;
		b[i] = a[i].first;
		a[i].first += i;
	}
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n;i++) {
		PII item = a[i];
		//cout << item.first << ' ' << item.second << '\n';
	}
}


void work()
{
	rrep(i, n, n - k + 1) f[a[i].second] = true;
	int ans = 0, t = 0;
	ffor(i, 1, n) {
		if (!f[i]) {
			ans += b[i] + t;
		}
		else {
			t++; 
			//cout << "i=" << i << "\n";
		}
	}
	cout << ans << '\n';
}

signed main()
{
	IOS;
	cin>>T;
	while (T--) {
		ready();
		work();
	}
	return 0;
}



 
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:12:03  更:2022-05-27 17:13:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 22:18:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码