NOI2015 程序自动分析
来源:互联网 发布:金蝶k3数据库恢复 编辑:程序博客网 时间:2024/05/02 03:04
题目大意:
给出一系列变量的等式约束和不等式约束,要求判定其中是否有矛盾;
变量下标最大值≤10^9;
约束数量≤10^5;
题解:
这是NOI2015最水的题了;
首先,分开等式约束和不等式约束;
等式约束用并查集保存;
不等式约束先用数组存着,等约束输入完毕后再判定是否与等式约束有矛盾;
即判断不等式两端变量是否属于同一集合
到这里,70分到手;
变量有10^9个?
空间只有512MB?
要是开10^9大小的并查集肯定爆空间;
但约束只有10^5个,即能用得到的变量最多只有2*10^5个;
网上说离散化,我是不懂的,离散化不是计算几何的吗?
uoj上一位哥们干脆上了个map;
即按输入的顺序给变量重新编号,
将重新编号后的变量的编号用于并查集中,原编号保存在map中,从而大大减少空间用量;
这样,每次并查集合并或查找根结点时都需要在map中按原编号查找新编号,用时O(logn);
总用时O(n*logn),n≤10^5,可以过;
于是,他的程序总用时2265ms,倒数第二,我用了AVL树,原倒数第二,hehe;
再考虑本题;
本题只用到了search(),和insert()操作,没有排序啊什么的;
考虑用链表维护的hash;
用一个2*10^5的数组T保存原编号;
再用一个2*10^5的数组next保存下一元素位置;
用一个p(模的数)大小的数组保存每个hash值对应链表的表头;
变量新编号就是它在T数组中的位置,例T[2015]=124785,那么124785的新编号为2015;
这样查找用时O(1),总用时O(n);
该算法在uoj上排名第三(前两个见鬼去吧),用时725ms;
注:uoj是一个相当好的oj,它支持浏览别人的代码,甚至可以通过hack来阻止别人的骗分代码拿到满分,
唯一的缺点就是题目较少(因为比较新);
- NOI2015 程序自动分析
- noi2015程序自动分析
- Noi2015 程序自动分析
- [BZOJ4195][Noi2015]程序自动分析
- [BZOJ4195] [Noi2015]程序自动分析
- 【NOI2015】【BZOJ4195】程序自动分析
- 【NOI2015】bzoj4195程序自动分析
- bzoj4195: [Noi2015]程序自动分析
- 4195: [Noi2015]程序自动分析
- 4195: [Noi2015]程序自动分析
- 【bzoj4195】[Noi2015]程序自动分析
- 4195: [Noi2015]程序自动分析
- bzoj4195 [Noi2015]程序自动分析
- 4195: [Noi2015]程序自动分析
- NOI2015 Day1 T1 程序自动分析
- NOI2015 Day1 T1 程序自动分析
- BZOJ 4195 [Noi2015] 程序自动分析
- Codevs 4600 [NOI2015]程序自动分析
- 嵌入式软件开发——嵌入式软件工程师笔试题(含答案)
- SAP Business One
- tomcat
- android ndk 开发流程以及“Method could not be resolved”的解决办法,代码提示
- 【HDOJ 5326】Work
- NOI2015 程序自动分析
- 【暑期基础】I HDU 2008 数值统计
- android iptables 屏蔽某个app网络访问
- 机房收费系统Section Three
- 杭电 HDU ACM 1175 连连看(麻烦的bfs)
- solr开闭区间查询
- Setup CCStudio v3.3中添加TMS320F28035
- dynamic_cast详解
- android studio 升级后报错