2018.10.29 NOIP2018模拟赛 解题报告
得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\))
\(T1\):简单的求和(点此看题面)
原题: 【HDU4473】Exam
这道题其实就是上面那题的弱化版,只不过把多组数据改成了单次询问。
题解可以参考上面给出的链接。
比赛时我没想到可以这么做,于是写了个除法分块,交上去\(70\)分。
\(CJJ\)奆佬写了一个传说中的\(cjj\)筛,结果\(80\)分\(ORZ\)。
代码如下:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL n;
class Class_BruteForceSolver//暴力
{
public:
inline void Solve(LL x)
{
register LL i,j,k,lim,ans=0;
for(i=1;i<=x;++i) for(j=1;j<=i;++j) for(k=1,lim=i/j;k<=lim;++k) if(!(i%(j*k))) ++ans;
printf("%lld",ans);
}
}BruteForceSolver;
class Class_DivideSolver//除法分块(70分)
{
private:
inline LL Calc(LL x)
{
register LL l,r,res=0;
for(l=1;l<=x;l=r+1) r=x/(x/l),res+=(r-l+1)*(x/l);
return res;
}
public:
inline void Solve(LL x)
{
register LL l,r,ans=0;
for(l=1;l<=x;l=r+1) r=x/(x/l),ans+=(r-l+1)*Calc(x/l);
printf("%lld",ans);
}
}DivideSolver;
class Class_MathSolver//用数学方法分类讨论(AC)
{
public:
inline void Solve(LL x)
{
register LL i,j,k,ans=0;
for(i=1;i*i*i<=x;++i) ++ans;
for(i=1;i*i<=x;++i) if((j=x/(i*i))>=i) ans+=3*(j-1);else ans+=3*j;
for(i=1;i*i*i<=x;++i) for(j=i+1;j<=x;++j) if((k=x/(i*j))>=j) ans+=6*(k-j);else break;
printf("%lld\n",ans);
}
}MathSolver;
int main()
{
return scanf("%lld",&n),MathSolver.Solve(n),0;
}
\(T2\):奇妙的数列(点此看题面)
被卡在了\(60\)分。
听说正解是线段树,但不知道如何维护信息,而且没有发题解,所以就没改了。
代码略。
\(T3\):树上的路径(点此看题面)
原题: 【BZOJ4458】GTY的OJ
具体做法可直接参考上面的链接,这里就不详细解释了。
代码如下:
#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define ten(x) (((x)<<3)+((x)<<1))
#define LL long long
#define N 500000
#define INF 1e18
using namespace std;
int n,m,L,R;
class FIO
{
private:
#define Fsize 100000
#define tc() (A==B&&(B=(A=Fin)+fread(Fin,1,Fsize,stdin),A==B)?EOF:*A++)
#define pc(ch) (putchar(ch))
int f,Top;char ch,*A,*B,Fin[Fsize],Stack[Fsize];
public:
inline void read(int &x) {x=0,f=1;while(!isdigit(ch=tc())) f=ch^'-'?1:-1;while(x=ten(x)+(ch&15),isdigit(ch=tc()));x*=f;}
inline void write(LL x) {if(x<0) pc('-'),x=-x;if(!x) return (void)(pc('0'));while(x) Stack[++Top]=x%10+48,x/=10;while(Top) pc(Stack[Top--]);}
}F;
class Class_RmqSolver
{
private:
#define LogN 20
public:
int fa[N+5][LogN],sum[N+5],Depth[N+5];
private:
struct key//存储每一个元素的信息
{
int pos,l,r,k,val;//pos表示起点,l,r存储可选择的区间,k存储当前选择的终点,val存储当前答案
key(int x=0,int y=0,int z=0,int w=0,int v=0):pos(x),l(y),r(z),k(w),val(v){}
inline friend bool operator < (key x,key y) {return x.val<y.val;}
};
priority_queue<key> q;//用一个堆进行维护
struct RMQ_data//RMQ求最小值
{
int MinPos,MinVal;
RMQ_data(int x=0,int y=0):MinPos(x),MinVal(y){}
inline friend bool operator < (RMQ_data x,RMQ_data y) {return x.MinVal<y.MinVal;}
}RMQ[N+5][LogN];
inline void Init() {for(register int i,j=1;j<LogN;++j) for(i=1;i<=n;++i) fa[i][j]=fa[fa[i][j-1]][j-1],RMQ[i][j]=min(RMQ[i][j-1],RMQ[fa[i][j-1]][j-1]);}//初始化
inline int getfa(int x,int dep)//找父亲
{
for(register int i=0;i<LogN;++i) if(dep&(1<<i)) x=fa[x][i];
return x;
}
inline RMQ_data get_min(int l,int r)//求最小值
{
register int i;register RMQ_data res=RMQ[l][0];
for(i=LogN-1;i>=0;--i) if(Depth[fa[r][i]]>=Depth[l]) res=min(res,RMQ[r][i]),r=fa[r][i];
return res;
}
public:
inline void Solve()
{
register int i,t;register LL ans=0;register RMQ_data s;register key now;
for(i=1;i<=n;++i) F.read(fa[i][0]),Depth[i]=Depth[fa[i][0]]+1;//初始化
for(i=1;i<=n;++i) F.read(sum[i]),sum[i]+=sum[fa[i][0]],RMQ[i][0]=RMQ_data(i,sum[fa[i][0]]);//统计前缀和+初始化(这样可以不用DFS)
for(Init(),F.read(m),F.read(L),F.read(R),i=1;i<=n;++i) if(Depth[i]>=L) t=min(R,Depth[i]),s=get_min(getfa(i,t-1),getfa(i,L-1)),q.push(key(i,getfa(i,t-1),getfa(i,L-1),s.MinPos,sum[i]-s.MinVal));//预处理把元素扔入堆中
while(m--)
{
now=q.top(),q.pop(),ans+=now.val;//取出堆中元素,统计答案,然后拆成两半重新扔入堆中
if(Depth[now.l]<Depth[now.k]) t=getfa(now.pos,Depth[now.pos]-Depth[now.k]+1),s=get_min(now.l,t),q.push(key(now.pos,now.l,t,s.MinPos,sum[now.pos]-s.MinVal));
if(Depth[now.r]>Depth[now.k]) t=getfa(now.pos,Depth[now.pos]-Depth[now.k]-1),s=get_min(t,now.r),q.push(key(now.pos,t,now.r,s.MinPos,sum[now.pos]-s.MinVal));
}
F.write(ans);//输出答案
}
}RmqSolver;
int main()
{
return F.read(n),RmqSolver.Solve(),0;
}
2018.10.29 NOIP2018模拟赛 解题报告的更多相关文章
- 2018.10.26 NOIP2018模拟赛 解题报告
得分: \(0+10+10=20\)(\(T1\)死于假题面,\(T3\)死于细节... ...) \(P.S.\)由于原题是图片,所以我没有上传题目描述,只有数据. \(T1\):颜料大乱斗(点此看 ...
- 2018.10.24 NOIP2018模拟赛 解题报告
得分: \(100+0+100=200\)(\(T2\)悲惨爆\(0\)) \(P.S.\)由于原题是图片,所以我没有上传题目描述,只有数据. \(T1\):query(点此看题面) 熟悉主席树的人都 ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2018.10.03 NOIP+ 模拟赛 解题报告
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
- 10.30 NFLS-NOIP模拟赛 解题报告
总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...
- 2018.10.26NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 70\) 实际得分:\(40 + 100 + 70\) 妈妈我又挂分了qwq..T1过了大样例就没管,直到临考试结束前\(10min\)才发现大样例是假 ...
- 2018.10.17NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...
- 20201101gryz模拟赛解题报告
写在前面 2020rp++ 停课的第一场模拟赛 拿上一年的上一年的day1来考的, 结果得分期望220pts,实际135pts,rank3,太菜了 考着考着机房灯突然灭了,当时慌的一批 以为断电代码要 ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
随机推荐
- Environment Perception: 3D Truss Environment Mapping and Parametric Expression Extraction
Experiments Preparation roscore rosrun pcl_ros pcd_to_pointcloud ~/.ros/wh2_lg707070_1ms0.01_filtere ...
- bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)
传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...
- nodejs + webpack4 + babel6 结合写Chrome浏览器插件记录
最近任务不忙,有时间了看一下Chrome插件相关的东西,于是想用nodejs + webpack写一个能直出插件的小工具. 1.nodejs + babel6 + webpack4 在写之前,是有把它 ...
- C 语言实例 - 计算标准偏差
C 语言实例 - 计算标准偏差 计算标准偏差. 实例 #include <stdio.h> #include <math.h> float calculateSD(float ...
- FoundToday for HK 技术支持
FoundToday for HK 技术支持 技术支持网址:有问题或建议请留言. 邮箱地址: swvrwafet@zoho.com Program design & system cons ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow
题目描述 \(FJ\)给他的牛棚的\(N(2≤N≤50,000)\)个隔间之间安装了\(N-1\)根管道,隔间编号从\(1\)到\(N\).所有隔间都被管道连通了. \(FJ\)有\(K(1≤K≤10 ...
- 洛谷P3384【模板】树链剖分
题目描述 如题,已知一棵包含\(N\)个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作\(1\): 格式: \(1\) \(x\) \(y\) \(z\) 表示将树从\(x\ ...
- linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理
不知道大家那有没有要清理的这个事情.需要清理目录历史文件.可能后续也会有很多其他地方需要清理历史文件,可能会用到. 我这两天空闲写了个脚本,清理比较方便,有要进行清理的大量历史文件的话可以用. 脚本用 ...
- jcmd jmap应用:一个String经典笔试题的验证
笔试题: String strA = new String("123123");这一行中创建了几个String对象?? public class StringHeapCountTe ...
- JDK11 | 第七篇 : ZGC 垃圾收集器
一.简介 Java 11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间. 在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性. ...