点此进入比赛

得分: \(30+30+70=130\)(弱爆了)

排名: \(Rank\ 22\)

\(Rating\):\(-31\)

\(T1\):【HHHOJ260】「NOIP模拟赛 捌」Digits(点此看题面)

比赛时写数位\(DP\)写挂了,最后交了个裸暴力。(后来发现写挂是因为没考虑借位的情况)

好吧,其实数位\(DP\)也是可以过的,但是,好像有个更简单的方法。

对于每一位,我们可以直接枚举出相加与这一位上数字相等的两个数字(总共只有\(4\)种情况),然后求解即可。

分类讨论这里就省略了,直接看代码吧:

#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define uint unsigned int
#define LL long long
#define ull unsigned long long
#define swap(x,y) (x^=y,y^=x,x^=y)
#define abs(x) ((x)<0?-(x):(x))
#define INF 1e9
#define Inc(x,y) ((x+=y)>=MOD&&(x-=MOD))
#define MOD 1000000007
#define Calc1(x,y) (((i-(x)-(y))/10+1)%MOD*(tot+1)%MOD*(x)%MOD*(y)%MOD)
#define Calc2(x,y) (((i-(x)-(y))/10+1)%MOD*(tn-tot-1)%MOD*(x)%MOD*(y)%MOD)
using namespace std;
LL n;
class FIO
{private:#define Fsize 100000#define tc() (FinNow==FinEnd&&(FinEnd=(FinNow=Fin)+fread(Fin,1,Fsize,stdin),FinNow==FinEnd)?EOF:*FinNow++)#define pc(ch) (FoutSize<Fsize?Fout[FoutSize++]=ch:(fwrite(Fout,1,FoutSize,stdout),Fout[(FoutSize=0)++]=ch))LL f,FoutSize,OutputTop;char ch,Fin[Fsize],*FinNow,*FinEnd,Fout[Fsize],OutputStack[Fsize];public:FIO() {FinNow=FinEnd=Fin;}inline void read(LL &x) {x=0,f=1;while(!isdigit(ch=tc())) f=ch^'-'?1:-1;while(x=(x<<3)+(x<<1)+(ch&15),isdigit(ch=tc()));x*=f;}inline void read_char(char &x) {while(isspace(x=tc()));}inline void read_string(string &x) {x="";while(isspace(ch=tc()));while(x+=ch,!isspace(ch=tc())) if(!~ch) return;}inline void write(LL x) {if(!x) return (void)pc('0');if(x<0) pc('-'),x=-x;while(x) OutputStack[++OutputTop]=x%10+48,x/=10;while(OutputTop) pc(OutputStack[OutputTop]),--OutputTop;}inline void write_char(char x) {pc(x);}inline void write_string(string x) {register LL i,len=x.length();for(i=0;i<len;++i) pc(x[i]);}inline void end() {fwrite(Fout,1,FoutSize,stdout);}
}F;
int main()
{register LL i,j,T,ans,tn,tot,lim;F.read(T);while(T--){for(F.read(n),ans=tot=0,tn=1,i=n;i;Inc(tot,tn*(i%10)),i/=10,tn=(tn<<3)+(tn<<1)){if(i%10<=i) for(j=1;j<=i%10;++j) Inc(ans,Calc1(j,i%10-j));//相加与这一位相等if(i%10-1<=i) for(j=1;j<i%10;++j) Inc(ans,Calc2(j,i%10-j-1));//相加比这一位少1,即下一位向上进位了if(i%10+10<=i) for(j=i%10+1;j<=9;++j) Inc(ans,Calc1(j,i%10-j+10));//相加比这一位多10,即向上进一位if(i%10+9<=i) for(j=max(i%10,1);j<=9;++j) Inc(ans,Calc2(j,i%10-j+9));//相加比这一位多9,即下一位和这一位都向上进了一位}F.write(ans),F.write_char('\n');//输出答案}return F.end(),0;
}

\(T2\):【HHHOJ261】「NOIP模拟赛 捌」Brew(点此看题面)

一道弱化版的原题: 【POJ1160】Post Office

这题就比较恶心了,考试时写了一个 暴力\(DP\) 交上去\(30\)分。

后来得知要用 \(WQS\)二分 +斜率优化\(DP\)

应该不难发现,造的酿酒厂数量越多,答案肯定越优。

但是,如果我们给造一座酿酒厂加上一个代价\(Cost\),我们就可以发现此时的图像应该是一个单谷函数,因此就可以用斜率优化\(DP\)来求解出此时的最优答案以及最优答案对应的造酿酒厂的个数

此时应该就不难想到 \(WQS\)二分 \(Cost\),求出 造酿酒厂个数恰好为\(K\) 时的最优答案。

代码如下:

#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define uint unsigned int
#define LL long long
#define ull unsigned long long
#define swap(x,y) (x^=y,y^=x,x^=y)
#define abs(x) ((x)<0?-(x):(x))
#define INF 1e18
#define Inc(x,y) ((x+=y)>=MOD&&(x-=MOD))
#define N 100000
#define GetCost(l,r) (f[l]+GetSum((l)+1,r)+Cost)
#define Sum(l,r) (sum[r]-sum[(l)-1])
using namespace std;
LL n,m,Cost,a[N+5],sum[N+5],f[N+5],g[N+5];
class FIO
{private:#define Fsize 100000#define tc() (FinNow==FinEnd&&(FinEnd=(FinNow=Fin)+fread(Fin,1,Fsize,stdin),FinNow==FinEnd)?EOF:*FinNow++)#define pc(ch) (FoutSize<Fsize?Fout[FoutSize++]=ch:(fwrite(Fout,1,FoutSize,stdout),Fout[(FoutSize=0)++]=ch))LL f,FoutSize,OutputTop;char ch,Fin[Fsize],*FinNow,*FinEnd,Fout[Fsize],OutputStack[Fsize];public:FIO() {FinNow=FinEnd=Fin;}inline void read(LL &x) {x=0,f=1;while(!isdigit(ch=tc())) f=ch^'-'?1:-1;while(x=(x<<3)+(x<<1)+(ch&15),isdigit(ch=tc()));x*=f;}inline void read_char(char &x) {while(isspace(x=tc()));}inline void read_string(string &x) {x="";while(isspace(ch=tc()));while(x+=ch,!isspace(ch=tc())) if(!~ch) return;}inline void write(LL x) {if(!x) return (void)pc('0');if(x<0) pc('-'),x=-x;while(x) OutputStack[++OutputTop]=x%10+48,x/=10;while(OutputTop) pc(OutputStack[OutputTop]),--OutputTop;}inline void write_char(char x) {pc(x);}inline void write_string(string x) {register LL i,len=x.length();for(i=0;i<len;++i) pc(x[i]);}inline void end() {fwrite(Fout,1,FoutSize,stdout);}
}F;
inline LL GetSum(LL l,LL r)
{if(l>r) return 0;register LL mid=l+r>>1,ln=mid-l+1,rn=r-mid+1;return (Sum(mid,r)-rn*a[mid])+(ln*a[mid]-Sum(l,mid));
}
class Class_Monotone_queue//单调队列
{private:struct key{LL S,L,R;//L和R记录区间,S记录上次的转移点key(LL x=0,LL y=0,LL z=0):S(x),L(y),R(z){}}data[N+5];LL H,T;public:inline void Clear() {data[H=T=1]=key(0,1,n);}//清空inline bool empty() {return H>T;}//判断队列是否为空inline key Front() {return data[H];}//返回队首inline key Back() {return data[T];}//返回队尾inline void PushBack(key x) {data[++T]=x;}//在队尾加入一个元素inline void PopFront() {++H;}//弹出队首inline void PopBack() {--T;}//弹出队尾inline void Push(LL x)//加入一个新的元素{register LL lst=-1,l,r,mid;while(!empty())//只要队列不为空{if(GetCost(data[T].S,data[T].L)>GetCost(x,data[T].L)) {lst=data[T].L,PopBack();continue;}//如果原先的斜率大于当前的斜率,就弹出队尾,并跳过当前循环for(mid=(l=data[T].L)+(r=data[T].R)>>1;l<=r;mid=l+r>>1) GetCost(data[T].S,mid)>GetCost(x,mid)?r=mid-1:l=mid+1;//二分求出最早的从当前状态转移要优于原先状态转移的时刻if(l<=data[T].R) data[T].R=(lst=l)-1;//更新break;//退出循环}if(~lst) PushBack(key(x,lst,n));//如果有值,将其加入队列if(!empty()&&++data[H].L>data[H].R) PopFront();//如果队首所表示区间为空,则将其弹出                  }
}q;
inline bool check(LL C)//求出额外代价为C时的最优答案以及对应造酿酒厂的个数是否小于等于m
{Cost=C,q.Clear();//清空数组for(register LL i=1;i<=n;++i)//斜率优化DP f[i]=GetCost(q.Front().S,i),g[i]=g[q.Front().S]+1,q.Push(i);//计算出最优答案以及对应造酿酒厂的个数,然后将当前的i加入单调队列return g[n]<=m;//如果g[n]≤m则返回true
}
int main()
{register LL i,j,l,r,mid;for(F.read(n),F.read(m),i=1;i<=n;++i) F.read(a[i]);for(sort(a+1,a+n+1),i=1;i<=n;++i) sum[i]=sum[i-1]+a[i];for(mid=(l=0)+(r=INF)>>1;l<=r;mid=l+r>>1) check(mid)?r=mid-1:l=mid+1;//WQS二分return check(l),F.write(f[n]-l*m),F.end(),0;//输出答案
}

\(T3\):【HHHOJ262】「NOIP模拟赛 捌」QTree(点此看题面)

先吐槽一波比赛时的数据太水(虽然我懒得优化暴力,结果还是没过)。

现在数据加强了,我本来改完能过的暴力代码现在被一个类似于菊花图的东西给卡崩了。

暴力我觉得就不用多讲了,大不了就是直接暴力修改+询问。

唯一要注意的地方应该是关于\(vis\)数组的清空,我比较建议记录一下每次操作的编号,这样就可以不用清空数组,起到了极大程度的优化。

还是谈一谈正解吧(虽然我还没过),正解的大致思路是将节点的\(BFS\)序存下来,然后用一棵线段树维护。

听起来好像并不难的样子。

但是,考虑到这是一棵基环外向树听说无论什么题目一套上一个基环外向树就会码量大增... ...

看了一下\(AC\)代码,\(4.0kb\)起步,顿时失去了打的勇气... ...

代码以后再补吧。

转载于:https://www.cnblogs.com/chenxiaoran666/p/HHHOJ_NOIP2018_eight.html

【HHHOJ】NOIP模拟赛 捌 解题报告相关推荐

  1. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  2. 20161003 NOIP 模拟赛 T2 解题报告

    Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...

  3. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  4. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  5. 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...

  6. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

  7. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  8. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  9. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

最新文章

  1. 最近开始接触网络电话
  2. 大数据神器Kafka入门
  3. 大话数据结构13:二叉树 数组存储
  4. 苹果系统安装python环境_如何在mac下配置python虚拟环境
  5. 【Python】理解Python(2) - help() 函数? or 类?
  6. Chelly的串串专题
  7. Mac OS X 10.2 (Macintosh)的101个应用技巧(转)
  8. Apple中文社区平台的 Mac 用户群体
  9. 【工程源码】CYUSB3014芯片使用EEPROM无法下载固件说明
  10. 豆瓣社区:《如何高效学习》应用与心得
  11. 公众号如何裂变涨粉?
  12. iCloud备份失败怎么办?iCloud无法备份解决办法分享!
  13. python初学者看什么书-关于 Python 的经典入门书籍有哪些?
  14. arm开发板与windows下的pjsip建立通话
  15. EasyAdmin极简社区论坛系统源码
  16. CAD标注的偏移尺寸和实际尺寸不同该如何解决?
  17. OllyDbg插件编写
  18. Qt音视频开发04-保存音频文件(pcm/wav/aac)
  19. 如何在html中插入本地音乐
  20. 前端逼死强迫症系列之css

热门文章

  1. Safe Or Unsafe(hdu2527)哈弗曼VS优先队列
  2. 让人少奋斗十年的工作经验
  3. 【Spring AOP】基于注解的 AOP 编程
  4. 【jQuery笔记Part3】01-jQuery-each遍历
  5. 索引书单(持续更新中)
  6. Windows远程桌面(mstsc) 无法全屏显示的解决方法
  7. Linux不讲武德——开机无法进入登录界面 卡在进度条就不动了
  8. 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序
  9. mybatis基础总结01
  10. FISSA:融合项目相似度模型和自注意网络的时序推荐