JXUST_NC - ACM工作室20级选拔赛题解
A - RioTian学长的星际航线
并查集板子
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n, m; //星球数和星际航线数M。
int a, b, father[maxn];
int find(int x) {
int r = x;
while (r != father[r]) r = father[r];
int i = x, j;
while (father[i] != r) {
j = father[i];
father[i] = r;
i = j;
}
return r;
}
int main() {
while (cin >> n && n) {
cin >> m;
//初始化。
for (int i = 1; i <= n; i++) father[i] = i;
while (m--) {
cin >> a >> b;
a = find(a), b = find(b);
if (a != b) father[a] = b;
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (father[i] == i) cnt++;
}
cout << cnt - 1 << endl;
}
return 0;
}
B - 江理大家庭
根据题意不断模拟。
#include <bits/stdc++.h>
using namespace std;
string s;
bool judge1(char a) {
if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') return true;
else
return false;
}
bool judge2(string s) {
bool flag1 = false, flag2 = true, flag3 = true;
//若为1说明前者为元音,若为-1说明还没有确定,若为0说明前者为辅音。
int flag = -1;
int len = s.size();
int cnt = 1; //统计连续的原因。
char pre = '0';
for (int i = 0; i < len; i++) {
if (judge1(s[i])) flag1 = true;
if (pre != '0') {
//连续字母的判断。
if (pre == s[i]) {
if (pre != 'e' && pre != 'o') flag3 = false;
} else
pre = s[i];
}
if (flag != -1) {
if (flag) {
//说明为元音,那么判断后者是否为元音。
if (judge1(s[i])) cnt++;
else {
//为辅音就改变。
cnt = 1;
flag = 0;
}
} else {
if (!judge1(s[i])) cnt++;
else {
cnt = 1;
flag = 1;
}
}
if (cnt == 3) flag2 = false;
}
if (pre == '0') pre = s[i];
if (flag == -1) {
if (judge1(s[i])) flag = 1;
else
flag = 0;
}
}
if (flag1 && flag2 && flag3) return true;
else
return false;
}
int main() {
while (cin >> s) {
if (s == "end") break;
cout << "<" << s << "> ";
cout << (judge2(s) ? "is acceptable.\n" : "is not acceptable.\n");
}
return 0;
}
C - 粗心的RioTian学长
数组绝对值排序
#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
int n, a[maxn];
bool cmp(int a, int b) { return abs(a) > abs(b); }
int main() {
while (cin >> n) {
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n, cmp);
for (int i = 0; i < n; i++) {
cout << a[i];
i == n - 1 ? cout << endl : cout << " ";
}
}
return 0;
}
D - 女装大佬RioTian
利用双指针寻找
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int t, n, s, min_len;
int a[maxn];
int main() {
cin >> t;
while (t--) {
cin >> n >> s;
for (int i = 0; i < n; i++) cin >> a[i];
min_len = maxn;
int sum = 0, cur = 0, last = 0; //双指针。
while (cur < n) {
sum += a[cur];
while (sum >= s) {
min_len = min(min_len, cur - last + 1);
sum -= a[last++];
}
cur++;
}
if (min_len == maxn) {
cout << "0" << endl;
} else {
cout << min_len << endl;
}
}
return 0;
}
E - RioTian学长的数组
简单贪心思想
字典序最小,首先让最前面的最小,最后面最大
void solve() {
int n, k;
cin >> n >> k;
int a[n + 1];
for (int i = 1; i <= n; ++i) cin >> a[i];
int i = 1, j = n;
while (true) {
if (i == j || k == 0) break;
if (a[i] >= 1) a[i] -= 1, a[j] += 1, k--;
else
i++;
}
for (int i = 1; i <= n; ++i) cout << a[i] << " ";
cout << "\n";
}
F - RioTian学长爱照相
要使 (au + av) / 2 为整数的上镜对越多,那么简单来说,奇数和奇数成对,偶数与偶数组队,这样上镜对一定最大
void solve() {
int n;
cin >> n;
vector<int> a(n);
vector<int> odd, even;
for (int &x : a) {
cin >> x;
if (x & 1) odd.push_back(x);
else
even.push_back(x);
}
for (int x : odd) cout << x << " ";
for (int x : even) cout << x << " ";
cout << '\n';
}
G - RioTian学长与矩阵
概括一下题意:在一个被限定了宽度的盒子中给一些长度为 \(2^x\) 高度为 1 的长方块,请问怎么排放才能使最终高度最小
思路:先利用 map 存储各个长度的值,然后二分找到在该行中最大的一块然后填充。
void solve() {
int n, w;
cin >> n >> w;
map<int, int> mp;
for (int i = 0, x; i < n; ++i) {
cin >> x;
mp[x]++;
}
int ans = 1, cur = w;
while (mp.size()) {
if (mp.begin()->first > cur) {
++ans, cur = w;
}
auto it = prev(mp.upper_bound(cur));
assert(it->first <= cur);
cur -= it->first;
if (--(it->second) == 0) mp.erase(it);
}
cout << ans << "\n";
}
H - 字符串的最小开销
这是一道比较难的字符串思维题
总而言之就是让连续的两个ij 出现尽可能少的次数,尽可能平均,所以直接让ababc....akbcbdbe...bkc这样过去,然后最后到(k-1)k 又连到a,刚好所有连续两个出现了一次,这样还不够的话继续循环下去就行了
void solve() {
int n, k;
cin >> n >> k;
string s;
for (int i = 0; i < k; ++i) {
s += 'a' + i;
for (int j = i + 1; j < k; ++j) s += 'a' + i, s += 'a' + j;
}
assert(s.size() == k * k);
for (int i = 0; i < n; ++i) cout << s[i % s.size()];
}
I - RioTian学长爱玩消消乐
首先给数组排序,如果存在相邻差值大于2的则输出 NO
#include <bits/stdc++.h>
using namespace std;
int main() {
int t, n, a[1100];
cin >> t;
while (t--) {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int flag = 0;
for (int i = 1; i < n && !f; i++) {
if (abs(a[i] - a[i - 1]) >= 2)
flag = 1;
}
if (flag)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
}
J - Hello,World!
签到题
cout << "hello world";
JXUST_NC - ACM工作室20级选拔赛题解的更多相关文章
- ACM HDU 2041--超级楼梯题解
超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解
题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...
- 《ACM国际大学生程序设计竞赛题解Ⅰ》——基础编程题
这个专栏开始介绍一些<ACM国际大学生程序设计竞赛题解>上的竞赛题目,读者可以配合zju/poj/uva的在线测评系统提交代码(今天zoj貌似崩了). 其实看书名也能看出来这本书的思路,就 ...
- 2019级第一次月赛暨ACM工作室第一次招新赛、补题赛
A:最简单签到,没有之一 Description 此题简单如题意,就是求最大值 Input 多组输入 每组输入输入一串字符串(包括字母和数字),长度小于500 Output 每行输出字符ASCII值与 ...
- 江西理工大学南昌校区acm选拔赛题解
第一题略 第二题 #include<stdio.h> int main() { int a1,a2,a3,b1,b3,b2,c1,c2,c3,n,sum,d1,d2,d3,i; scanf ...
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 华东交通大学2018年ACM“双基”程序设计竞赛部分题解
链接:https://ac.nowcoder.com/acm/contest/221/C来源:牛客网 C-公式题(2) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- CSUST选拔赛题解
本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...
- ACM团队招新赛题解
标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenn ...
- 【好好补题,因为没准题目还会再出第三遍!!】ACM字符串-组合数学(官方题解是数位DP来写)
ACM字符串 .长度不能超过n .字符串中仅包含大写字母 .生成的字符串必须包含字符串“ACM”,ACM字符串要求连在一块! ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个 输入 ...
随机推荐
- class-dump 混淆加固、保护与优化原理
class-dump 混淆加固.保护与优化原理 进行逆向时,经常需要dump可执行文件的头文件,用以确定类信息和方法信息,为hook相关方法提供更加详细的数据.class-dump的主要用于检查存 ...
- 如何用MySQL快速导入sql数据?
在 MySQL 中,可以使用多种方法来快速导入 SQL 数据.以下是一些常用的方法和技巧,以帮助你在 MySQL 中快速导入大量的 SQL 数据. 1. 使用 mysql 命令行工具 - 将 SQL ...
- 七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
前言 在上一章节我们在后端框架中引入 SQLite-net ORM 并封装常用方法(SQLiteHelper),今天我们的任务是设计好班级管理相关的表.完善后端班级管理相关接口并对Swagger自定义 ...
- Android 图表开源库调研及使用示例
原文地址: Android图表开源库调研及使用示例 - Stars-One的杂货小窝 之前做的几个项目都是需要实现图表统计展示,于是做之前调研了下,做下记录 概述 AAChartCore-Kotlin ...
- lua完整学习笔记
lua注释 -- 单行注释 --[[ 多行注释 ]]-- lua数据结构 nil 无效值与Java的Null类似,但是在条件表示中是false boolean 布尔值,tu ...
- 5分钟安装Kubernetes+带你轻松安装istio服务网格指南
上次我跟大家简单介绍了一下Kubernetes的各个组件及其含义,本期本来计划带领大家一起学习一些常用命令,但我认为这种方式可能无法达到学习的效果.有可能你们会直接忘记,甚至可能没有兴趣去学.我也理解 ...
- 【UniApp】-uni-app-项目实战页面布局(苹果计算器)
前言 经过前面的文章介绍,基本上 UniApp 的内容就介绍完毕了 那么从本文开始,我们就开始进行一个项目的实战 这次做的项目是苹果计算器,这个项目的难度不是很大,但是也不是很简单,适合练手 创建项目 ...
- Chrome扩展程序是如何进行消息传递的
大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 一个复杂的 Chrome 扩展程序通常由 content_scripts,background,ac ...
- 华企盾DSC控制台无法登录常见处理方法
1.查看服务器服务是否正常运行 2.服务器电脑的防火墙关闭了 3.telnet服务器IP和端口(服务器端口和数据库端口)是否是通的 4.如果是外网需要再控制台安装目录改setting配置文件 5.my ...
- 【Python】【OpenCV】【NumPy】图像数据的访问
接上一随笔,这次学习针对图像数据的访问(Numpy.array) 在OpenCV中,使用 imread() 方法可以访问图像,其返回值是一个数组,而根据传入的不同图像,将会返回不同维度的数组. 针对返 ...