这次的题目都是什么鬼?

玄学乱搞+肉眼看CODE+倒着搜索?

好吧是我ZZ了

链接在此

T1 玄学乱搞

由于考场上写的部分分做法忘记讨论n<=2000时的情况,少得了30pts

很容易得到一个基于排序的算法:

  • 记录每个数的值以及编号

  • 按编号将原数组从大到小排序

  • 对于每一个数,用在它之前的编号最大和最小的分别更新ans

对于这个算法的正确性显然。因为之前所有点的值都比它大,所以可以稳定确立下min(h[i],h[j])的值,然后记录编号的方式就OK了

但是这里的数据是1e7,快拍时间复杂度为O(n log2 n)要GG的

所以很自然地联想到基数排序,由于我姿势水平有限,像LowestJN dalao那样高级的基排,所以只会按位比较的那种

极限复杂度为:O(n log10 max{a[i]})

当n=1e7,max{a[i]}=1e9时,总操作数为9e7≈1e8

理论上机子快一点,常数小一点就可以卡过去了

然而我太蒟了所以被卡

这里贴一下Radix_sort的CODE以供参考:

#include<cstdio>
#include<cstring>
const int N=1e7+5;
using namespace std;
typedef long long LL;
struct data
{
int x,id;
}a[N],temp[N];
int cnt[15],n,d,MIN,MAX;
LL ans=-1;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline int int_max(int a,int b)
{
return a>b?a:b;
}
inline int int_min(int a,int b)
{
return a<b?a:b;
}
inline int abs(int x)
{
return x>0?x:-x;
}
inline LL LL_max(LL a,LL b)
{
return a>b?a:b;
}
inline int getbit(int x)
{
int tot=0;
if (!x) return 1;
while (x) ++tot,x/=10;
return tot;
}
inline void radix_sort(int n)
{
register int i,j;
int radix=1;
for (i=1;i<=d;++i,radix*=10)
{
memset(cnt,0,sizeof(cnt));
for (j=1;j<=n;++j)
++cnt[(a[j].x/radix)%10];
for (j=8;j>=0;--j)
cnt[j]+=cnt[j+1];
for (j=n;j>=1;--j)
temp[cnt[(a[j].x/radix)%10]--]=a[j];
memcpy(a,temp,sizeof(a));
}
}
int main()
{
register int i;
//freopen("A.in","r",stdin); freopen("A.out","w",stdout);
for (read(n),i=1;i<=n;++i)
read(a[i].x),a[i].id=i,d=int_max(d,getbit(a[i].x));
radix_sort(n);
for (MIN=MAX=a[1].id,i=2;i<=n;++i)
ans=LL_max(ans,(LL)int_max(abs(a[i].id-MIN),abs(a[i].id-MAX))*a[i].x),MIN=int_min(MIN,a[i].id),MAX=int_max(MAX,a[i].id);
printf("%lld",ans);
return 0;
}

好吧我们来看标算:

由于我们发现从左往右这种传统的扫描方式难以得出答案,所以我们考虑从两边向中间寻找

设立l,r表示目前两端的区间范围,所以我们可以用:

ans=max(ans,(r-l)*min(h[l],h[r]))

来更新ans

由于min这个操作,为了贪心我们把大的那个数留下来到下一次,即

if (h[l]<h[r]) ++l; else --r;

这样就实现了O(n)的复杂度

CODE

#include<cstdio>
using namespace std;
typedef long long LL;
const int N=1e7+5;
int a[N],l,r,n;
LL ans;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline LL max(LL a,LL b)
{
return a>b?a:b;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
register int i;
//freopen("A.in","r",stdin); freopen("A.out","w",stdout);
for (read(n),i=1;i<=n;++i)
read(a[i]);
l=1; r=n;
while (l<r)
{
ans=max(ans,(long long)(r-l)*min(a[l],a[r]));
if (a[l]<a[r]) ++l; else --r;
}
printf("%lld",ans);
return 0;
}

T2 肉眼看CODE

我是真的蒙蔽了

首先%%%XZTdalao肉眼看拿了70+pts

还有一群初三dalao直接A了此题(据说有人花了2H在看这个)

不过不知道标算是什么

听他们说有一个比较可行的算法,就是先rand()一组方案,然后看一下得分。然后根据得分来修改算法

不过可能要惊人的脚本使用技术耐心

话说我只认出了姜度dalao的代码,有些人还认出了楼神Manchery

实为佩服,只能说我输了

T3 倒着搜索

这道题其实真的很简单。

我们先写好DFS爆搜,然后剪剪枝

接下来开始打表

然后把枚举的顺序由从小到大改为从大到小即可成功A掉此题(快得飞起)

这也是什么搜索技巧吗?

正解:Dancing Link O(n)找规律

爆搜CODE

#include<cstdio>
#include<cstdlib>
using namespace std;
int num[55],n,m;
inline void print(void)
{
for (register int i=1;i<=m;++i)
if (!num[i]) putchar('-'); else putchar(num[i]+'A'-1);
exit(0);
}
inline void DFS(int now)
{
if (!now) print();
for (register int i=1;i<=m;++i)
if (!num[i])
{
num[i]=now;
if (i+now+1<=m&&!num[i+now+1]) num[i+now+1]=now,DFS(now-1),num[i+now+1]=0;
if (i-now-1>=1&&!num[i-now-1]) num[i-now-1]=now,DFS(now-1),num[i-now-1]=0;
num[i]=0;
}
}
int main()
{
scanf("%d",&n); m=n<<1|1;
DFS(n);
return 0;
}

EZ 2018 04 13 NOIP2018 模拟赛(八)的更多相关文章

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

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

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

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

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

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

  4. EZ 2018 04 06 NOIP2018 模拟赛(七)

    我是链接 这次是真的惨,码了将近2hours的可持久化线段树炸掉了! 而且本地拍了一万年也没发现哪里炸了. T1 压位的入门题,话说这道题能拿个99分就可以了(100分要FFT) 对于暴力,就是暴力找 ...

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

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

  6. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  7. EZ 2018 04 01 ZJOI2018模拟赛04.01

    现在开始填以前的坑 这次老叶强制我们打一下这次省选题,然后我已经做好了掉Rating到死的准备 然后考完--莫名涨了 Orz 题目链接 由于很多东西我都不会,所以详细请看:dalao的题解 T1 我T ...

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

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

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

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

随机推荐

  1. 简单的分页小demo

    public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Sy ...

  2. Google Play内购测试

    Google Play内购测试 最近项目做海外版本,接入Google wallet支付后,测试验证比较繁琐,故记录一下. Google wallet支付方式接入完成后,需要按照如下步骤设置,才可以进行 ...

  3. for之于while的优势

    前言 for与while各有功效,下面就只列举for之于while的优势有哪些 优势 1.循环中提供了特殊的机会来将变量的作用域最小化.(无论是传统的还是for-each形式的)for循环,都允许声明 ...

  4. Linux开启和关闭防火墙

    一.即时生效,重启后失效: 1.启动:service iptables start 2.关闭:service iptables stop 二.重启后永久生效: 1.启动:chkconfig iptab ...

  5. 使用Amanda ZRM备份远程MySQL数据库

    本文写道最后的时候,我才发现ZRM for MySQL的一个致命问题,就我目前的理解和测试来看,它恢复数据的时候是采取覆盖的方式,举个例子,假定某台数据库服务器上有两个数据库test1,test2,你 ...

  6. UNIX高级环境编程(15)进程和内存分配 < 故宫角楼 >

    故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详.   首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内 ...

  7. python os模块 遍历目录

    #os #os ->tree命令 import os #递归 #目录 ->文件,文件夹 -> 文件文件夹 dirpath = input('请输入你要遍历的目录\n') def ge ...

  8. Linux uptime命令详解

    常见的命令展示 uptime 08:21:34 up 36 min, 2 users, load average: 0.00, 0.00, 0.00 #当前服务器时间: 08:21:34 #当前服务器 ...

  9. kettle 启动spoon一闪而过

    Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移(ETL). Kettle有三个主要组件:Spoon,Kitchen,Pan.其中Spoon是一个图形化的界面. 一.安装kettle ...

  10. 脱壳_00_压缩壳_ASPACK

    写在前面的话: Aspack是最常见的一种压缩壳,具有较好的兼容性.压缩率和稳定性,今天我们就来一起分析一下这个壳: 零.分析压缩壳: 0.在开始动态调试前,用PEID和LoadPE查看一些信息,做到 ...