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级选拔赛题解的更多相关文章

  1. ACM HDU 2041--超级楼梯题解

    超级楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  3. 《ACM国际大学生程序设计竞赛题解Ⅰ》——基础编程题

    这个专栏开始介绍一些<ACM国际大学生程序设计竞赛题解>上的竞赛题目,读者可以配合zju/poj/uva的在线测评系统提交代码(今天zoj貌似崩了). 其实看书名也能看出来这本书的思路,就 ...

  4. 2019级第一次月赛暨ACM工作室第一次招新赛、补题赛

    A:最简单签到,没有之一 Description 此题简单如题意,就是求最大值 Input 多组输入 每组输入输入一串字符串(包括字母和数字),长度小于500 Output 每行输出字符ASCII值与 ...

  5. 江西理工大学南昌校区acm选拔赛题解

    第一题略 第二题 #include<stdio.h> int main() { int a1,a2,a3,b1,b3,b2,c1,c2,c3,n,sum,d1,d2,d3,i; scanf ...

  6. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解

    链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  7. 华东交通大学2018年ACM“双基”程序设计竞赛部分题解

    链接:https://ac.nowcoder.com/acm/contest/221/C来源:牛客网 C-公式题(2) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  8. CSUST选拔赛题解

    本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...

  9. ACM团队招新赛题解

    标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenn ...

  10. 【好好补题,因为没准题目还会再出第三遍!!】ACM字符串-组合数学(官方题解是数位DP来写)

    ACM字符串 .长度不能超过n .字符串中仅包含大写字母 .生成的字符串必须包含字符串“ACM”,ACM字符串要求连在一块! ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个 输入 ...

随机推荐

  1. charles谷歌浏览器抓包方法

    charles谷歌浏览器抓包方法 在工作中,我们会在PC电脑上测试页面,查看后端接口,我们会选择浏览器F12的功能来查看后端请求的接口,那我们能不能用charles抓包工具去抓呢?下面简答介绍一下ch ...

  2. .net 温故知新【15】:Asp.Net Core WebAPI 配置

    关于Asp.Net Core中的配置实际之前我已经整理过.net 中以json方式进行配置的介绍(.net 温故知新:[8].NET 中的配置从xml转向json),当时我们说Asp.Net Core ...

  3. python原生数据类型(上)

    # 查看数据 print('hello world') # 查看数据类型 type('hello world') hello world str 1 数据类型定义 1.1 不可变数据类型 # 数值 # ...

  4. Java并发(十八)----常见线程安全类及实例分析

    1.常见线程安全类 String Integer StringBuffer Random Vector Hashtable java.util.concurrent (JUC)包下的类 这里说它们是线 ...

  5. GHOST 系统安装教程 轻松一键,系统恢复到最佳状态

    硬盘安装系统 安装前准备 1.保证能够正常进入系统: 2.下载Ghost系统镜像文件: 3.下载镜像安装器: 安装步骤 1.下载Ghost系统镜像"Win7_x64_Pure_5.07.GH ...

  6. 整合SpringBoot + Dubbo + Nacos 出现 Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass

    版本 SpringBoot:2.7.3 Dubbo:3.0.4 Nacos:2.0.3 异常信息如下 Unable to make protected final java.lang.Class ja ...

  7. Chrome扩展开发系列开篇

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 浏览器现状 研究机构 Statcounter 发布了 2023 年 9 月报告,揭示了有关浏览器的最 ...

  8. 华企盾DSC苹果Mac针对Word编辑文件不加密

    解决方法:查看了客户端的控制台日志显示的进程名和加密后缀都正常,可能文件内部有rename的操作,加密所有类型解决 ​

  9. 【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解

    大家好,我是独孤风,今天的元数据管理平台Datahub的系列教程,我们来聊一下Datahub CLI.也就是Datahub的客户端. 我们在安装和使用Datahub 的过程中遇到了很多问题. 如何安装 ...

  10. 万界星空科技五金家具企业MES案例介绍

    五金家具行业MES解决方案 MES系统如何与家具企业生产相匹配?相较于其它大多数工业软件,MES系统无疑是受企业欢迎的软件之一.MES系统处于制造生产企业信息化的核心领域,有着承上启下的作用.那MES ...