A collection of problems from Codeforces/UVAlive

(但我到现在都没收到uva的注册邮件orz...


A题 NearlyLuckyNumber 幸运数字4和7 签了有一点久的签到题...大概是开场没有静下心来

B题 FoePair 还查了了一下Foe是什么意思...尺取法然后用set判断冲突...也是写得有一点久...使用边表的时候wa了一下

C题 plusesEverywhere cf tutorial中的解法长得太难看了 但是顺便被指路去评论里学习了一下线性递推求逆元的证明...算贡献的姿势不正确就会把这道题变得很复杂 但其实只要逐位数计算所有a[i] 顺便对最末尾进行特殊处理 就好了....而我第一反应想到的却是逐i位每次计算a[i]在所有位数上面的贡献...

D题 YounglingTournament 应该是相对来讲不那么好做的题 但因为看榜发现lzw一个人分别过了D和G 就先补了D 每次有一些修改操作 要求对于新的序列 将从小到大排序之后 统计a[i]>=s[i-1]的个数 看出类fibonacci递增性其实是很直观...但是修改操作并不容易...写的第一个代码被样例cha了...然后试图改一改...发现要改对只能写一棵splay...接着发现了一种离散后用树状数组进行排序的计算方法,要言之:将离散后的权值作为下标 扔进去之后使用set进行跳跃 lower_bound的功能是查找指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值. 这里的离散应该是需要将权值相等的数字也区分开来,然后由于lower_bound的“第一个位置”,迭代器只需要前移一位就能够得到需要的区间.(正好这道题的性质也要求了 相同权值只统计一次 )(verbose.....)

#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
#define N 202020
ll a[N],tree[N],aa[N],cc[N];
struct node{ll x;int id;}b[N],c[N];
multiset<long long> s;
multiset <long long> :: iterator it,it1;
int n,m;
map<ll,int>mat;
int cmp(node a,node b){return a.x<b.x;
}
void add(int k,ll x){//printf("///%d %lld\n",k,x);for(int i=k;i<=n+m;i+=i&(-i))tree[i]+=x;return;
}
ll ask(int k){ll ans=0;if(k<=0)return ans;for(int i=k;i>0;i-=i&(-i))ans+=tree[i];return ans;
}
void solve(){if(n<=2){printf("%d\n",n);return;}int ans=2;it=s.begin();it1=it;it1++;ll tmp=*it;tmp+=*it1;while(1){it=s.lower_bound(tmp);if(it==s.end())break;//printf(" %lld %lld\n",tmp,*it);it1=it;it1--;int k=mat[*it1];tmp=ask(k);//printf("%d %lld %lld\n",k,tmp,*it);if(*it>=tmp)ans++;tmp+=*it;}printf("%d\n",ans);
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%I64d",&a[i]);b[i].x=a[i];b[i].id=i;}scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d%I64d",&c[i].id,&c[i].x);b[i+n].id=i+n;b[i+n].x=c[i].x;}sort(b+1,b+n+m+1,cmp);int now=0;for(int i=1;i<=n+m;i++){now++;if(b[i].id<=n)aa[b[i].id]=now,mat[a[b[i].id]]=now;else cc[b[i].id-n]=now,mat[c[b[i].id-n].x]=now;}//printf("%d\n",mat[7]);for(int i=1;i<=n;i++)add(aa[i],a[i]),s.insert(a[i]);solve();for(int i=1;i<=m;i++){int k=c[i].id;it=s.find(a[k]);s.erase(it);int k1=aa[k],k2=cc[i]; s.insert(c[i].x);add(k1,-a[k]);add(k2,c[i].x);aa[k]=cc[i];a[k]=c[i].x;solve();}return 0;
}

E题 UniqueParty 如果没有题解帮我翻译题面///那么我一定会读很久然后读不懂/读错/读不出中位数性质......前期做了很长的思想工作...因为题解的复杂度貌似是cas*Q*n^3....但我找不到也想不到更快的做法...抱着视死如归的心理写完然后过了...并且横向比较了一下并不慢...那也随便了吧...枚举上下两行以后就是个单调的思想 s[i]<s[j] 的情况下s[i]一定是递减 然后往右找最远的满足条件的s[j]...

F题 AlmostUnion-Find 先Mark一下Kattis这个网站...是一个带删除/加入/合并的并查集操作...暴力一点其实就可以把每个操作之后产生的并查集归到一个新的id 这样永远不会出现继承混乱的情况....(我在说什么...其实都是应该在上机前想清楚的事情...

G题 This is an interactive problem><

H题 每次选择一对叶子节点 删除其中一个 将每个点对的距离加入答案求Max 充分体现了自己做题状态没有补题时候的沉下心来...又是一次题目通读不完的经历...看完题解之后马上使我想起了上学期第一场cf的D题...都是大胆猜结论...至少对我来说是猜?...那就两个题一起写一下

TreeDestruction 每次找出一条直径 然后依次把直径外的叶子结点一一删除 最后处理直径链 (writer给出了一堆显然的英文来证明它是对的)

Minimum Diameter Tree 也是给出一棵树的形态 要求将权值和S分配到树边上 使得直径的权值和尽可能小(权值意义上的直径)

答案居然是2*s/叶子个数(L)...然后证明大概是考虑到每条边都至少在L-1条叶子作端点的路径中贡献到...对不等式取等号之后就可以构造出最优解了...由于直径一定是由leave作为端点的树链 那么一定是往这个方向想...

:( 不小心翻到了hello 2019的括号题 就是一场连10w数组开了10的bug都找不出来的比赛...)

I题 CrazyTown 假几何题 用一些直线将无限大的平面分割成block 求起点所在区域到终点的最短路径 很良心的第一点是共同交点不算相邻 很良心的第二点是这道题不卡常

J题 consanguine calculations<太恶心了><map很好用><以后要把样例说明读的仔细一点...>

K题 string modification 第一遍代码又被样例cha了 然后换成dp...


希望以后自己可以过一下脑子...赶快把还没有写的代码hack掉...

【VJudge】【Legilimens Contest 1】相关推荐

  1. 【Wannafly Camp day 2】【Legilimens Contest 3】

    >.< 感谢齐天大圣们带我飞   CF蓝名选手打得很开心 A题 [Tommy的字符串]算贡献签到题,我写完这个题的时候我们已经有人过了全场无人会题了.13:02我会F了.DFS序后在BIT ...

  2. 【CodeForces 1265C --- Beautiful Regional Contest】

    [CodeForces 1265C --- Beautiful Regional Contest] 题目来源:点击进入[CodeForces 1265C - Beautiful Regional Co ...

  3. 【*2000】【2018-2019 ICPC, NEERC, Southern Subregional Contest C 】Cloud Computing

    [链接] 我是链接,点我呀:) [题意] [题解] 我们可以很容易知道区间的每个位置有哪些安排可以用. 显然 我们优先用那些花费的钱比较少的租用cpu方案. 但一个方案可供租用的cpu有限. 我们可以 ...

  4. 贪心法田忌赛马问题Java代码,hdoj 1052 Tian Ji - The Horse Racing【田忌赛马】 【贪心】...

    hdoj 1052 Tian Ji -- The Horse Racing[田忌赛马] [贪心] 思路:先按从小到大排序, 然后从最快的开始比(假设i, j 是最慢的一端, flag1, flag2是 ...

  5. 【TI-ONE系列教程(五)】如何使用 TI-ONE SDK 玩转算法大赛

    以下文章来源于腾讯云AI平台 2020腾讯广告算法大赛已启动 TI-ONE 作为本次大赛 官方唯一指定的机器学习平台 将在比赛全流程中为参赛选手 提供机器学习平台及计算资源支持 为方便选手快速上手使用 ...

  6. 【TI-ONE系列教程(三)】如何使用 TI-ONE 平台内置框架玩转算法大赛

    以下文章来源于腾讯云AI平台 2020腾讯广告算法大赛已启动 TI-ONE 作为本次大赛 官方唯一指定的机器学习平台 将在比赛全流程中为参赛选手 提供机器学习平台及计算资源支持 为方便选手快速上手使用 ...

  7. 【Codeforces】【161Div2】

    [题目来源]http://www.codeforces.com/contest/263 [A. Beautiful Matrix] [解析]模拟即可.按照题目的意思,找到1所在的位置(x, y),然后 ...

  8. 二叉搜索树之:【BST】【基本应用汇合】

    Ⅰ 索树BST与平衡树Treap的区别,已经BST的基本功能介绍 二叉搜索树之:[二叉搜索树与平衡树的区别][BST和treap的区别]_bei2002315的博客-CSDN博客 Ⅱ 二叉搜索树的基本 ...

  9. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

最新文章

  1. linux挂载卸载不掉 umount target is busy
  2. angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...
  3. HH SaaS电商系统的采购功能模块设计
  4. SonarQube开机自启动
  5. Ubuntu16.04 Caffe2 编译安装步骤记录
  6. phpcmsV9 如何开启“会员注册” - 教程篇
  7. Origin绘制带误差棒的曲线(Error Band)
  8. 网易游戏java_2019秋招|网易游戏一面面经(Java开发)
  9. sk-learn中对数据集划分函数train_test_split和StratifiedShuffleSplit
  10. 【华为云技术分享】数据赋能,如何精细化保障企业大数据安全
  11. 游戏中基于物理的渲染简简明科普
  12. 百度搜索大数据:“摆摊技巧”搜索热度暴涨655%;中国电信:将逐步关闭3G网络业务;IntelliJ IDEA新版发布|极客头条...
  13. 忘记using namespace std;
  14. 史上最全的人工智能知识图谱
  15. python round用法_Python round 函数
  16. 关于把Excel转换成word的经验
  17. python中--snip--是什么意思
  18. 初次接触peoplesoft
  19. 为什么计算机打开u盘这么慢,电脑读取u盘文件速度慢
  20. 划重点 传输层协议 tcp三次握手和四次挥手

热门文章

  1. Vue—单页面应用与多页面应用的区别
  2. Python基础之Linux基础入门(Ubuntu)——其他命令
  3. CandidateScorer
  4. Linux系统配置VLAN
  5. 如何学好计算机英语怎么说,如何学好英语翻译
  6. 大数据智能分析解决方案
  7. 租户隔离怎么做MYSQL_基于JPA实现SaaS多租户模式的数据存储——共享数据库,隔离数据架构...
  8. 最新《北风网web全栈教程 前端开发全套教程》
  9. @Primary和@Qualifier注解
  10. 大学英语四线上考试翻译题