test20190731 夏令营NOIP训练16
0+90+0=90。我只挑了T2做。
连接格点
有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。
输入格式:
第一行输入两个正整数m和n。
以下若干行每行四个正整数x1,y1,x2,y2,表示第x1行第y1列的点和第x2行第y2列的点已经有连线。输入保证|x1-x2|+|y1-y2|=1。
输出格式:
输出使得连通所有点还需要的最小花费。
样例输入:
2 2
1 1 2 1
样例输出:
3
数据范围:
m,n<=1000
时间限制:
1000
空间限制:
32768
最小生成树,而且不用排序了。
无序字母对
给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。
输入格式:
第一行输入一个正整数n。
以下n行每行两个字母,表示这两个字母需要相邻。
输出格式:
输出满足要求的字符串。
如果没有满足要求的字符串,请输出“No Solution”。
如果有多种方案,请输出前面的字母的ASCII编码尽可能小的(字典序最小)的方案
样例输入:
4
aZ
tZ
Xt
aX
样例输出:
XaZtX
数据范围:
不同的无序字母对个数有限,n的规模可以通过计算得到。
时间限制:
1000
空间限制:
32768
题解
题意很清晰了,显然是求字典序最小的欧拉回路方案,但是我都忘了欧拉回路这回事。
手动模拟
发现合法情况一定是度数为奇数的点的个数为0或2。如果是0那就找最小的,如果是2那就找度数为奇数的最小的。
然后发现中间合并两个无序对,度数的变化是偶数2,所以一定有解。然后用set维护找字典序最小的即可。
但是交到洛谷1341发现WA了。然后看数据,发现了这种情况:
5
ax
xx
xt
tp
ps
也就是自环。在ax的时候x优先选择走t,但是之后就走不到x了。
所以在选择字典序较小的之前还要判断x下一个是否必须走到自己。这个就把其他点连回x的边数考虑一下就好了,把x放到后面边数至少为3。
最后还是有一个点莫名RE,而学军中学的数据好像是一样的,所以这题就是90分了。
#include<bits/stdc++.h>
#define co const
#define il inline
template<class T> T read(){
T x=0,w=1;char c=getchar();
for(;!isdigit(c);c=getchar())if(c=='-') w=-w;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*w;
}
template<class T>il T read(T&x){
return x=read<T>();
}
using namespace std;
co int N=52;
il int idx(char c){
return islower(c)?26+c-'a':c-'A';
}
il char inv(int i){
return i<26?i+'A':i-26+'a';
}
int n,c[N];
multiset<int> s[N];
multiset<int>::iterator it;
int main(){
read(n);
for(int i=1;i<=n;++i){
char p[3];scanf("%s",p);
++c[p[0]=idx(p[0])],++c[p[1]=idx(p[1])];
s[p[0]].insert(p[1]),s[p[1]].insert(p[0]);
}
int cnt=0;
for(int i=0;i<N;++i)
if(c[i]&1) ++cnt;
if(cnt!=0&&cnt!=2) return puts("No Solution"),0;
char ans[3000];
if(cnt==0){
for(int i=0;i<N;++i)
if(c[i]>=2){ans[0]=i,c[i]-=1;break;}
}
else{
for(int i=0;i<N;++i)
if(c[i]&1){ans[0]=i,c[i]-=1;break;}
}
for(int i=1;i<=n;++i){
if(s[ans[i-1]].count(ans[i-1])){ // edit 1
int cnt=0;
for(int j=0;j<N;++j)if(j!=ans[i-1])
cnt+=s[j].count(ans[i-1]);
if(cnt<3){
ans[i]=ans[i-1],c[ans[i]]-=2;
s[ans[i]].erase(s[ans[i]].find(ans[i])),s[ans[i]].erase(s[ans[i]].find(ans[i]));;
continue;
}
}
int cnt=0;
it=s[ans[i-1]].begin();
if(i<n&&c[*it]==1) ++it;
ans[i]=*it,c[ans[i]]-=2; // i==n doesn't matter
s[ans[i-1]].erase(s[ans[i-1]].find(ans[i])),s[ans[i]].erase(s[ans[i]].find(ans[i-1]));
}
for(int i=0;i<=n;++i) ans[i]=inv(ans[i]);
ans[n+1]=0;
puts(ans);
return 0;
}
/*
5
ax
xx
xt
tp
ps
*/
欧拉回路
欧拉回路算法直接就可以解决这个问题。
欧拉回路是在回溯的时候把路径的答案加进去。这样在x之后如果能回来,先走的就是字典序较小的;如果不能,先走的就是x。
感觉理解深入了不少。时间复杂度\(O(n \log n)\)。
数字转换
如果一个数x的约数和(不包括它本身,下同)比它本身小,那么x可以变成它的约数和;如果对于某个y>x且y的约数和为x,那么x也可以变成y。例如,4可以变为3,1可以变为7。限定所有的数字变换在不超过n的正整数范围内进行,求不断进行数字变换且没有重复数字出现的最多变换步数。
输入格式:
输入一个正整数n。
输出格式:
输出最少需要花费的时间。
样例输入:
7
样例输出:
3
数据范围:
n<=50 000。
时间限制:
1000
空间限制:
32768
题解
只能向较小的连无向边,所以最后图一定是森林。
然后跑树的直径就可以了。
可以用来练习线性筛求约数和(误)。
线性筛的第二重循环中要筛出来的数\(x=i\times p_j\)最小质因子一定是现在枚举的\(p_j\),此时分为两种情况:
- \(i\)没有质因子\(p_j\),那么直接计算即可。
- \(i\)有质因子\(p_j\),那么应该修改\(p_j\)的贡献。所以需要记录每个数的最小质因子对它的约数和的贡献。
然后时间复杂度\(O(n)\)。
test20190731 夏令营NOIP训练16的更多相关文章
- test20190805 夏令营NOIP训练20
100+0+0=100,由于第二题写挂rank 1就没了 山 xyz现在站在一个斜坡面前 这个斜坡上依次排布这n座山峰,xyz打算爬上其中的一座 因为xyz体力不好,所以他只能爬上最矮的一座山 又因为 ...
- test20190803 夏令营NOIP训练19
60+100+0=160 贪婪大陆 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败--人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前 ...
- test20190802 夏令营NOIP训练18
今天的题很有难度啊.然而我10:40才看题-- 高一学堂 在美丽的中山纪念中学里面,有一座高一学堂.所谓山不在高,有仙则名:水不在深,有龙则灵.高一学堂,因为有了yxr,就成了现在这个样子 = =. ...
- test20190729 夏令营NOIP训练14
40+100+0=140. 基因光线 黑大帅统治古古怪界后,一直在玩一种很奇葩的游戏.在一个二维平面上,他先复制了n个小A,把他们放在不同的位置,然后射出一条ax+by+c=0的基因光线,宽度为d,即 ...
- 夏令营501-511NOIP训练16——数字转换
传送门:QAQQAQ 题意:如果一个数x的约数和(不包括它本身,下同)比它本身小,那么x可以变成它的约数和:如果对于某个y>x且y的约数和为x,那么x也可以变成y.例如,4可以变为3,1可以变为 ...
- Noip 训练指南
目录 Noip 训练指南 图论 数据结构 位运算 期望 题解 Noip 训练指南 目前完成 \(4 / 72\) 图论 [ ] 跳楼机 [ ] 墨墨的等式 [ ] 最优贸易 [ ] 泥泞的道路 [ ] ...
- 9.19[XJOI] NOIP训练37
上午[XJOI] NOIP训练37 T1 同余方程 Problem description 已知一个整数a,素数p,求解 $x^{2}\equiv a(mod p) $ 是否有整数解 Solution ...
- NOIP训练测试2(2017081502)
唔,这是今天第二场训练测试. 上一轮不够难,现在来一波更简单的.[滑稽] 注意时间! 测试时间:3小时 题目一:Cantor表 题目二:回文数 题目三:拼数 题目四:进制位 题目五:邮票面值设计 都是 ...
- 2018.11.02 NOIP训练 停车场(线段树)
传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续0101 ...
随机推荐
- 解决ViewPager与百度地图滑动冲突
一.问题描述 ViewPager中嵌套百度地图的时候会出现百度地图滑动冲突. 二.期望结果: 滑动地图的时候只有地图滑动,滑动其他区域可以切换viewpager. 三.解决方法 自定义viewpage ...
- Echartjs axis.getAxesOnZeroOf is not a function
该问题已经解决,下面是解决思路! 问题描述: axis.getAxesOnZeroOf is not a function 使用echart 出现报这句错误,请求解决方案! 问题原因: 我给坐标设置了 ...
- 【C++面试】关于虚函数的常见问题
1.虚函数的代价 1)带有虚函数的每个类会产生一个虚函数表,用来存储虚成员函数的指针 2)带有虚函数的每个类都会有一个指向虚函数表的指针 3)不再是内敛函数,因为内敛函数可以在编译阶段进行替代,而虚函 ...
- hashlib 加密 与进度条
# 加密 ''' md5 = hashlib.md5() md5.update('how to use md5 in python hashlib?') #字节才可以 print md5.hexdig ...
- kubernetes 实践三:使用kubeadm安装k8s1.16.0
环境版本说明: 三台vmware虚拟机,系统版本CentOS7.6. Kubernetes 1.16.0,当前最新版. flannel v0.11 docker 18.09 使用kubeadm可以简单 ...
- tkinter学习笔记_01
知识点目录: 1. 文本框 Label var = tk.StringVar() # 文本框 bg 背景颜色 fonnt 字体设置 width 长 height 高 l = tk.Label(root ...
- 玩转Spring全家桶笔记 04 Spring的事务抽象、事务传播特性、编程式事务、申明式事务
1.Spring 的事务抽象 Spring提供了一致的事务模型 JDBC/Hibernate/Mybatis 操作数据 DataSource/JTA 事务 2.事务抽象的核心接口 PlatformTr ...
- 全栈项目|小书架|服务器开发-Koa2 连接MySQL数据库(Navicat+XAMPP)
为什么使用数据库 为什么需要数据库?-知乎 相比与文件系统,数据库具有以下优势: 高效率:查找效率高 高可用:可数据库共享 安全性强:数据不能随意修改 选择哪个数据库 数据库可以分为关系型数据库和非关 ...
- [unity]GPU Instance学习
前言我们之前研究过为什么Unity的UI可以合批,是因为使用了相同的材质进行渲染,UI上不同图片渲染是通过把图片打成一张图集后,使用Image组件对顶点填充了不同的UV值实现的.那么有没有什么办法可以 ...
- 7.1 为什么bulk使用奇特的json格式?
回顾: bulk的语法要求:每个json串都不能换行,不同json串之间,必须换行 为什么不用标准json数组呢?如: [ { "create":{.. ...