EZ 2018 02 28 NOIP2018 模拟赛(二)
我TM的终于改完了(其实都是SB题)
题目链接:http://211.140.156.254:2333/contest/53
T1送分,T2前40%送分,还有骗分机制在里面,T3暴力50
所以200应该有的吧(事后诸葛亮)
但T2的第一问智障了,但是无解骗分(直接搞一个数再开个根)弄了38分,所以RANK还是蛮高的。
日常膜拜dalao CJJ 终于涨Rating了
T1 很无脑,但有点坑。就是纯的高精度乘法,注意一下0.2输出.2之类的问题就好了
小数点不用管,最后算一下小数部分几位再输出就可以了
CODE
#include<cstdio>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
string s;
int a[],b,p,i,j,last[],ans[],k,len;
int main()
{
//freopen("A.in","r",stdin); freopen("A.out","w",stdout);
cin>>s; cin>>b; last[len=]=;
while (s[]=='') s.erase(,);
while (s[s.size()-]==''||s[s.size()-]=='.') s.erase(s.size()-,);
for (i=s.size()-;i>=;--i)
if (s[i]=='.') p=k; else a[++k]=s[i]-'';
p*=b;
while (b--)
{
memset(ans,,sizeof(ans));
for (i=;i<=len;++i)
for (j=;j<=k;++j)
{
ans[i+j-]+=last[i]*a[j];
ans[i+j]+=ans[i+j-]/;
ans[i+j-]%=;
}
if (ans[k+len]!=) len=k+len; else len=k+len-;
for (i=;i<=len;++i)
last[i]=ans[i];
}
for (i=len;i>=p+;--i)
putchar(ans[i]+'');
if (p) putchar('.');
for (i=p;i;--i)
putchar(ans[i]+'');
return ;
}
T2 无脑数学推理即可。
考虑找出所有数的最小质因数(素数打表即可),然后我们可以发现
对于第一问,每次将素数个数集合一分为二,然后重复直到大小为一,如样例最小质因数集合为{5,2,1,1},质因数为{2,3,5,7};
则
所以答案就是不停地加1除以2直到等于1即可
然后是第二问,我们肯定希望个数最多的最早询问(贪心),但在操作过程中会发现这不一定最优
于是我们倒着想,从最少的向上合并,每次找出集合中最少的两个数加起来,这样就倒着实现了贪心
也可以用样例理解一下
所以总平均代价=9+4+2=15;15/9≈1.666667
小根堆即可
CODE
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int prime[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},N=,SIZE=;
priority_queue< int,vector<int>,greater<int> > tree;
int c[N],t[N],cnt,i,j,n,x,ans;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline int work(int x,int dep)
{
if (x==) return dep;
work((x+)/,dep+);
}
int main()
{
read(n);
for (i=;i<=n;++i)
{
read(x);
for (j=;j<SIZE;++j)
if (x%prime[j]==) { c[i]=prime[j]; break; }
if (!c[i]) c[i]=x;
}
sort(c+,c+n+);
for (i=;i<=n;++i)
if (c[i]^c[i-]) t[++cnt]++; else t[cnt]++;
printf("%d\n",work(cnt,));
for (i=;i<=cnt;++i)
tree.push(t[i]);
for (i=;i<cnt;++i)
{
int x=tree.top(); tree.pop();
int y=tree.top(); tree.pop();
ans+=x+y; tree.push(x+y);
}
printf("%.6lf",(double)ans/n);
return ;
}
T3 大力数据结构题。
考虑一个50分的算法:对于每次询问,O(n)找出所有a[i]>=x>a[i-1]的数的对数,就使ans++
但如果优化可能会比较困难。
所以考虑另一种算法:记录每一个高度下的ans[](即此时如果洪水高度为x,那么可以直接得到ans[x]),比如样例:
当a[4]变成1后:
有没有发现,当一个石头下降(or 上升)时,如果当前高度x下,它两边都有石头(在此高度下),那么相应的ans[x]就+1;它两边都是空的(在此高度下),那么相应的ans[x]就-1;否则不变。
所以相当于我们在修改时先把当前石头高度清零,再把它拔到对应的高度下,所以每次更新都是区间的。
因此线段树or树状数组即可
由于a[i]<=1e9,因此我们把所有数据都读进来再离散化一下就可以了
线段树CODE
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
struct data
{
int num,x,id,r;
}a[N];
int tree[N*],add[N*],n,m,i,opt,cnt;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void write(int x)
{
if (x/) write(x/);
putchar(x%+'');
}
inline int max(int a,int b)
{
return a>b?a:b;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
inline int comp1(data a,data b)
{
return a.x<b.x;
}
inline int comp2(data a,data b)
{
return a.num<b.num;
}
inline void up(int root)
{
tree[root]=tree[root*]+tree[root*+];
}
inline void down(int root,int l,int r)
{
if (add[root])
{
tree[root*]+=add[root]*l;
tree[root*+]+=add[root]*r;
add[root*]+=add[root];
add[root*+]+=add[root];
add[root]=;
}
}
inline void change(int root,int l,int r,int beg,int end,int v)
{
if (l>=beg&&r<=end)
{
tree[root]+=(r-l+)*v;
add[root]+=v;
return;
}
int mid=l+r>>;
down(root,mid-l+,r-mid);
if (beg<=mid) change(root*,l,mid,beg,end,v);
if (end>mid) change(root*+,mid+,r,beg,end,v);
up(root);
}
inline int query(int root,int l,int r,int id)
{
if (l==r&&l==id) return tree[root];
int mid=l+r>>,res=;
down(root,mid-l+,r-mid);
if (id<=mid) res+=query(root*,l,mid,id);
if (id>mid) res+=query(root*+,mid+,r,id);
return res;
}
int main()
{
read(n); read(m);
for (i=;i<=n;++i)
read(a[i].x),a[i].num=i;
for (i=n+;i<=n+m;++i)
{
read(opt);
if (opt==) read(a[i].x),a[i].num=i;
if (opt==) read(a[i].id),read(a[i].x),a[i].num=i;
}
sort(a+,a+n+m+,comp1);
for (i=,a[].r=;i<=n+m;++i)
if (a[i].x!=a[i-].x) a[i].r=a[i-].r+; else a[i].r=a[i-].r; cnt=a[n+m].r;
sort(a+,a+n+m+,comp2);
for (i=;i<=n;++i)
if (a[i].r>a[i-].r) change(,,cnt,a[i-].r+,a[i].r,);
for (i=n+;i<=n+m;++i)
if (!a[i].id) write(query(,,cnt,a[i].r)),putchar('\n'); else
{
int num=a[i].id,l,r;
if (num==) l=; else l=a[num-].r;
if (num==n) r=; else r=a[num+].r;
if (max(l,r)<a[num].r) change(,,cnt,max(l,r)+,a[num].r,-);
if (min(l,r)) change(,,cnt,,min(a[num].r,min(l,r)),);
a[num].r=a[i].r;
if (max(l,r)<a[num].r) change(,,cnt,max(l,r)+,a[num].r,);
if (min(l,r)) change(,,cnt,,min(a[num].r,min(l,r)),-);
}
return ;
}
EZ 2018 02 28 NOIP2018 模拟赛(二)的更多相关文章
- EZ 2018 02 26 NOIP2018 模拟赛(一)
这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 05 04 NOIP2018 模拟赛(十二)
这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
- EZ 2018 05 20 NOIP2018 模拟赛(十五)
这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...
- EZ 2018 03 09 NOIP2018 模拟赛(三)
最近挺久没写比赛类的blog了 链接:http://211.140.156.254:2333/contest/59 这次的题目主要考验的是爆搜+打表的能力 其实如果你上来就把所有题目都看过一次就可以知 ...
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 05 13 NOIP2018 模拟赛(十三)
这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...
随机推荐
- JSON教程基础
一.基础简介 二.JSON 语法 三.JSON 使用 一.基础简介 1.JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本 ...
- Hibernate 注释用法
注释 到现在为止,你已经看到 Hibernate 如何使用 XML 映射文件来完成从 POJO 到数据库表的数据转换的,反之亦然.Hibernate 注释是无需使用 XML 文件来定义映射的最新方法. ...
- 转:C# 深入理解堆栈、堆在内存中的实现
尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(GarbageCollection),但是我们还是应该了解它们,以优化我们的应用程序.同时,还需要具备一些基础的内存管理工作机制 ...
- Mysql缓存中innodb_buffer_pool与Qcache的区别
innodb buffer pool和Qcache的缓存区别? 1.Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0; 2.b ...
- 自定义上传控件(兼容IE8)
上传控件是 <input type="file"/> 而实际开发过程中,都会自定义一个控件,因为这个控件本身难看,而且不同浏览器效果不一样. 如IE8显示如下: 谷歌浏 ...
- 数据结构习题Pop Sequence的理解----小白笔记^_^
Pop Sequence(25 分) Given a stack which can keep M numbers at most. Push N numbers in the order of 1, ...
- 基于Map的简易记忆化缓存
背景 在应用程序中,时常会碰到需要维护一个map,从中读取一些数据避免重复计算,如果还没有值则计算一下塞到map里的的小需求(没错,其实就是简易的缓存或者说实现记忆化).在公司项目里看到过有些代码中写 ...
- BZOJ3676:[APIO2014]回文串(SAM,Manacher)
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- POJ3801 Crazy Circuits
嘟嘟嘟 上下界网络流之最小流. 建图不说啦,裸的. 在有附加源\(S\)和附加汇\(T\)的图上跑完后,删除和\(S, T\)相连的边.然后因为可能流多了,所以现在应该退流,于是我们从\(t\)到\( ...
- Project configuration is not up-to-date with pom.xml
导入maven工程后,出现如下错误: Description Resource Path Location TypeProject configuration is not u ...