这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很

然后是真的猜题意了搞了。

不过这样都可以涨Rating我也是服了。

Upt:链接莫名又消失了

A. 「NOIP2017模拟赛11.03」Egypt丶小黑车

题意一看就是很精简的数学题,

首先我们用经典的方法,假设我们用\(f_x\)表示\([1,x]\)的答案,那么最后输出的就是\(f_r-f_{l-1}\)了

然后考虑求解\(f_x\)。我们知道对于一个\([1,x]\)的区间里,含有约数\(d\)的数有\(\lfloor \frac{x}{d}\rfloor\)个。

所以我们考虑枚举所有以数码\(k\)开头的数\(d\),然后累加\(\lfloor \frac{x}{d}\rfloor\)即可。

然后我们发现这样会很慢,所以我们对于一整段数一起枚举。

什么意思,比如在枚举数码\(k=1\)时,我们每次分别求解\([1,1],[10,19],[100,199]......\)

然后我们要做的就是快速对于一段区间进行统计了。

我们先考虑最暴力的想法:每次从\([l,r]\)之间依次枚举,但这样的话当\(r-l\ge 10^5\)时就会超时

但是我们发现,当\(r-l\ge10^5\)时,设其中的一个数为\(s\),那么\(n/s\le 10^4\)。

所以我们枚举商\(m\),然后通过商来得出\([l,r]\)中对应的数有哪些即可。

CODE

  1. #include<cstdio>
  2. using namespace std;
  3. typedef long long LL;
  4. const LL pow[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000},div=100000;
  5. LL a[15],b[15],l,r;
  6. inline LL min(LL a,LL b)
  7. {
  8. return a<b?a:b;
  9. }
  10. inline LL max(LL a,LL b)
  11. {
  12. return a>b?a:b;
  13. }
  14. inline LL work(LL l,LL r,LL n)
  15. {
  16. if (r<l) return 0; register LL i; LL ans=0;
  17. if (r-l<=div)
  18. {
  19. for (i=l;i<=r;++i)
  20. ans+=n/i; return ans;
  21. }
  22. for (i=n/r;i<=n/l;++i)
  23. {
  24. LL low=max(n/(i+1),l),high=min(n/i,r);
  25. if (n/low!=n/high) ans+=(high-low)*i; else ans+=(high-low+1)*i;
  26. }
  27. return ans;
  28. }
  29. inline void solve(LL n,LL *num)
  30. {
  31. if (!n) return; register LL i,j;
  32. for (i=1;i<=9;++i)
  33. for (j=0;j<=10&&pow[j]<=n;++j)
  34. num[i]+=work(i*pow[j],min(n,(i+1)*pow[j]-1),n);
  35. }
  36. int main()
  37. {
  38. //freopen("A.in","r",stdin); freopen("A.out","w",stdout);
  39. scanf("%lld%lld",&l,&r);
  40. solve(l-1,a), solve(r,b);
  41. for (register LL i=1;i<=9;++i)
  42. printf("%lld\n",b[i]-a[i]);
  43. return 0;
  44. }

B. 「NOIP2017模拟赛11.03」Egypt丶李小车

首先讲一下题目缺少了一个很重要的条件,就是只有当敌方英雄在位置\(n\)上时才能结束踢人

然后我们考虑一下,如果我们事先知道一个点能不能到达终点,这样就可以直接统计答案了。

为什么?因为如果对面现在在位置\(i\)上,我们分情况讨论:

  1. \(i=n\)直接结束踢人即可。因为再踢下去肯定是没有当前优的。
  2. \(i+a_i\)可以到达终点,这样我们直接让字符串加上\(a\)即可。因为这样可以让字典序最小,用\(b\)的话再短也没有用。
  3. \(i+b_i\)可以到达且\(i+a_i\)无法到达。同上,字符串加上\(b\)即可。因为总比无解要强。
  4. 两个都无法到达,那么必定无解。

然后我们在上面的基础上判断一下是否有点被重复访问即可。

对于一个点能否走到终点,只需要把边反向建之后从终点BFS即可。

CODE

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cstdlib>
  4. using namespace std;
  5. const int N=1e5;
  6. struct edge
  7. {
  8. int to,next;
  9. }e[N<<1];
  10. int head[N],n,a[N],b[N],q[N],cnt,tot;
  11. bool vis[N],use[N];
  12. char ans[N];
  13. inline char tc(void)
  14. {
  15. static char fl[100000],*A=fl,*B=fl;
  16. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  17. }
  18. inline void read(int &x)
  19. {
  20. x=0; char ch=tc(); int flag=1;
  21. while (ch<'0'||ch>'9') { if (ch=='-') flag=-1; ch=tc(); }
  22. while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc(); x*=flag;
  23. }
  24. inline bool check(int x)
  25. {
  26. return x>=1&&x<=n;
  27. }
  28. inline void add(int x,int y)
  29. {
  30. e[++cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;
  31. }
  32. inline void BFS(int x)
  33. {
  34. int H=0,T=1; q[1]=x; vis[x]=1;
  35. while (H<T)
  36. {
  37. int now=q[++H];
  38. for (register int i=head[now];i!=-1;i=e[i].next)
  39. if (!vis[e[i].to]) vis[e[i].to]=1,q[++T]=e[i].to;
  40. }
  41. }
  42. inline void print(void)
  43. {
  44. for (register int i=1;i<=tot;++i)
  45. putchar(ans[i]);
  46. }
  47. inline void DFS(int now)
  48. {
  49. if (!(now^n)) { print(); exit(0); }
  50. if (use[now]) { puts("Infinity!"); exit(0); } use[now]=1;
  51. if (check(now+a[now])&&vis[now+a[now]]) ans[++tot]='a',DFS(now+a[now]); else ans[++tot]='b',DFS(now+b[now]);
  52. }
  53. int main()
  54. {
  55. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  56. register int i; read(n);
  57. memset(head,-1,sizeof(head));
  58. memset(e,-1,sizeof(e));
  59. for (i=1;i<=n;++i)
  60. {
  61. read(a[i]);
  62. if (check(i+a[i])) add(i+a[i],i);
  63. }
  64. for (i=1;i<=n;++i)
  65. {
  66. read(b[i]);
  67. if (check(i+b[i])) add(i+b[i],i);
  68. }
  69. BFS(n); if (!vis[1]) { puts("No solution!"); return 0; }
  70. DFS(1); return 0;
  71. }

C. 「NOIP2017模拟赛11.03」Egypt丶法拉利

这道题其实是水题,但是我真的因为ZZ然后没发现反例。

首先有一个很naive的想法。统计之前问号的个数,然后在冲突时看一下是否有问号,有就用问号来抵消冲突。

但是这个方法有一个致命的弱点,就是对于问号的时间把控有问题。比如有一组反例(感谢CJJ dalao无偿提供)

3

?

I 1

I 1

对于上面的想法会给出\(-1\)。但答案很明显是\(3\)。

那么是哪里出问题了,很简单,就是问号操作在I操作之间才出现,这样就无法抵消效果。

想到这里就很简单了,我们把所以问号的操作的时间存到set里。每次矛盾时把在它后前的最早出现的问号使用掉,因为你前面的不用用后面的可能会让后面的没法用。一个小贪心

然后我们就直接上STL大法即可解决其实线段树也是可以的

CODE

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<set>
  4. using namespace std;
  5. const int N=1e5+5;
  6. int a[N],last[N],x,m;
  7. char opt;
  8. set <int> s;
  9. set <int>::iterator it;
  10. inline char tc(void)
  11. {
  12. static char fl[100000],*A=fl,*B=fl;
  13. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  14. }
  15. inline void read(int &x)
  16. {
  17. x=0; char ch=tc();
  18. while (ch<'0'||ch>'9') ch=tc();
  19. while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
  20. }
  21. int main()
  22. {
  23. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  24. register int i; read(m);
  25. for (i=1;i<=m;++i)
  26. {
  27. opt=tc(); while (opt!='I'&&opt!='O'&&opt!='?') opt=tc();
  28. if (opt^'?')
  29. {
  30. read(x); a[x]+=opt^'I'?-1:1;
  31. if (a[x]<0||a[x]>1) { if ((it=s.lower_bound(last[x]))!=s.end()) s.erase(it),a[x]+=opt^'I'?1:-1; else return printf("%d",i),0; }
  32. last[x]=i;
  33. } else s.insert(i);
  34. }
  35. return printf("-1"),0;
  36. }

EZ 2018 06 17 NOIP2018 模拟赛(十九)的更多相关文章

  1. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

  2. EZ 2018 06 24 NOIP2018 模拟赛(二十)

    很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...

  3. EZ 2018 06 02 NOIP2018 模拟赛(十七)

    这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...

  4. EZ 2018 04 21 NOIP2018 模拟赛(九)

    终于停止了掉Rating的浪潮! 猥琐的链接 这次200分才Rank10,而且很多人并列 庆幸T2最后20分钟发现期望的算法打错了,然后拿到了50pts,250收场 T1 水题*1 这道题不仅做过,而 ...

  5. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

  6. EZ 2018 05 26 NOIP2018 模拟赛(十六)

    这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...

  7. EZ 2018 05 04 NOIP2018 模拟赛(十二)

    这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...

  8. EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛

    难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...

  9. EZ 2018 05 13 NOIP2018 模拟赛(十三)

    这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...

随机推荐

  1. off by null 实战

    前言 off by null 是一个比较有意思的技术 下面通过 hctf2018 的 heapstrom_zero 实战一波. 相关文件(exp, 题目)位于 https://gitee.com/ha ...

  2. 第一个Django页面(2)

    第一个Django页面 1,进入forum项目:熟悉项目里各种文件的作用 2,配置URL:在urls.py里面添加 [url路径与对应的处理函数] 3,编写处理函数:根据urls.py里添加函数的路径 ...

  3. centos6启动服务说明

    centos6启动服务说明 阅读目录 centos6.9最小化安装下的启动服务 其他服务(仅供参考,持续更新) 此表转自:参考1.参考2.另有多处补充及纠正. 1. centos6.9最小化安装下的启 ...

  4. python socket 套接字编程 单进程服务器 实现多客户端访问

    服务器: import socket #单进程服务器 实现多客户端访问 IO复用 #吧所有的客户端套接字 放在一个列表里面,一次又一次的便利过滤 server = socket.socket(sock ...

  5. python TCP socket套接字编程以及注意事项

    TCPServer.py #coding:utf-8 import socket #s 等待链接 #c 实时通讯 s = socket.socket(socket.AF_INET,socket.SOC ...

  6. Emmet快速编写代码

    Emmet快速编写代码 ★div → <div></div>, span → <span></span> ★CSS选择器 ​ 给标签指定id选择器 di ...

  7. shell脚本之颜色效果显示以及PS1颜色实战

    在bash shell脚本中我们可以使用ASCII颜色来显示文本信息. 格式:\033\[31m hello \033[0m ##m: 左侧#:这个#可以是3或者4,作用不一样. 3:前景色 4:背景 ...

  8. Sql 注入详解:宽字节注入+二次注入

    sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshel ...

  9. 社交网络编程API之iOS系统自带分享

    社交网络编程API 社交网络编程主要使用iOS提供的Social框架,目前Social框架主要包含两个类: SLComposeViewController 提供撰写社交信息(如微博信息)的视图控制器, ...

  10. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...