zoukankan      html  css  js  c++  java
  • 10.11cdy考试题

    鸣谢cdy

    math

    【题目描述】

    众所周知, xkj是GH的得意门生, 可是xkj的数学成绩并不是很理想; 每次GH在批评完数学限训做的差的人时, 总会在后面加一句:咱们班还有一位做的最差的同学——xkj,你看看你还有对号吗, 居然比CDY做的还差; xkj只好暗想: 我也很无奈啊,我已经很努力了啊;这次为了不挨批, xkj将他的数学题抛给了正在学oi的你;

    【题目描述】

    Xkj得到了n个硬币,每个硬币都有一个面值a[i];GH又给了他一个幸运数字(给了m次); 现在可以进行以下的转换; kj可以选择一个比k大的硬币i, 将a[i]-1;选择i左边或右边的硬币;将其+1; 经过数次变换之后问最大可以形成多长的一个连续硬币区间;使得每个硬币价值都不小于k;

    【输入格式】

    第一行两个整数 n , m 代表数组长度和询问个数。接下来一行, 第 i 个正整数表示 ai 。第三行 M 个正整数, 第 i 个正整数表示第 i 次询问的 k 。

    【输出格式】

    对于每个询问, 输出一个整数表示问题的答案。

    【样例输入】

    5 6
    1 2 1 1 5
    1 2 3 4 5 6
    

    【样例输出】

    5 5 2 1 1 0
    

    【数据范围】

    对于 20% 的数据, n≤10。

    对于 40% 的数据, n≤1000。

    对于 50% 的数据, n≤100000。

    对于 100% 的数据, n≤1000000, m≤20, ai≤10^9, k≤10^9。

    请选手注意自己的常数。

    【题解】

    题目描述很逗(注:是真人真事)

    显然一个合法的区间的区间平均数大于等于询问的数字。不证。

    对于每次询问,可以把所有数字减去询问的k,然后取一个前缀和操作,我们现在要求的是使得s[i]-s[j]>=0的最大的i-j。

    对于左端点j,我们可以直接求出一个单调递减的下标数列代表左端点,至于怎么求,暴xjb力求一下就行了。

    对于右端点i,我们每次可以找出对应的使得s[i]>=s[j]的最靠左的左端点j(所以这就是为啥我们要维护单调递减的数列),让右端点i从右往左扫,左端点j的初位置在单调数列的最右侧,这样我们的i在向左扫的过程中,j就不用向右扫了(因为向右扫之后肯定不会更新答案,不扫也不会更新),所以单次询问就是线性的了。

    business

    【题目背景】

    Cdy, xkj, wzy师徒三人看到lsq, gxt等人做起生意, 赚起钱来, 不由得心里多了几分着急, 凭什么别人能赚钱而我却不能; 于是 师徒三人 凑在一起开始商讨 从商大计 有出资的 有出技术的有出场地的 ; 但师徒三人想在公司成立之间了解观察一下股市的情况, 他们有比较忙 就将任务交给了你来完成祝你好运;

    【题目描述】

    每天的股票都有一个初始值a[i];由于股市会有所波动 所以会有两种政令

    1.对于一段区间l~r,将这段区间内所有股票值加上k;

    2.对于一段区间l~r,将这段区间内所有股票值变为【a[i]/k】 ; (向下取整)

    为了检验你的完成情况他们会对你有两种询问形式

    3.给定l, r, 询问min(a[i])(i->l~r);(区间最小值)

    4.给定l, 人, 询问sum(a[i])(i->lr);(lr)的区间和

    【输入格式】

    第一行为两个空格隔开的整数 n,q 分别表示所涉及的股票天数个数和政令 + 询问个数。

    第二行包含 n 个由空格隔开的整数 a[1]∼a[n]

    接下来 q 行, 每行表示一个操作, 第一个数表示操作编号 1∼4 ,

    接下来的输入和问题描述一致。

    即 op, l, r若op=1; 还会有一个x;

    【样例输入】

    10 10
    -5 -4 -3 -2 -1 0 1 2 3 4
    1 0 4 1
    1 5 9 1
    2 0 9 3
    5
    3 0 9
    4 0 9
    3 0 1
    4 2 3
    3 4 5
    4 6 7
    3 8 9
    

    【样例输出】

    -2
    -2
    -2
    -2
    0
    1
    1
    

    【数据范围】

    对于 30% 的数据, n,q≤10^3 ;

    对于100%的数据1≤n,q≤105,1≤l≤r≤n,c∈[-104,104],k∈[2,109];

    【题解】

    不难看出这是一道线段树。

    区间+,区间sum,区间min都是简单的,最关键是这个区间divfloor。

    我们再维护一个区间max。

    对于一个区间,我们对它进行区间div时,查询max和min注意要O(1)。

    假设div的是k,那么对max进行divk的操作就相当于减去这个数:displaystyle max-leftlfloorfrac {max}k ight floor

    对min的也类似:displaystyle min-leftlfloorfrac {min}k ight floor。如果这两个值相等,那么整个区间减去的数就相同了,维护一个区间减即可。

    如果不同,就递归下去(就像自适应Simpson一样)

    注意卡常,区间减要直接原地做减法,各种卡常才能过,一开始tmd最大的点跑几百秒,最后卡了好几次才卡进2秒,感谢各位同学的代码参考。。。

    dance

    【题目描述】

    最近xkj沉迷于透彻无法自拔,无聊的他他又开始学起了跳舞(为了更好地找妹子吗)xkj有比较奇特他不喜欢在平地上跳舞, (哎, 有障碍才刺激啊) 于是他在一片狼藉的地上跳起了他的八字小舞; 但是同时他又想考考你, 你当然可以回答出所有问题

    【题目描述】

    此片土地的大小为n*m, (当然包括障碍)初始时xkj在某一个位置;Xkj在某一个时间段(L1,R1)内会向x1行动,时间段(L2,R2)内会向x2行动, 以此类推总共有T个时间段, 并且所有时间段均满足L[i+1]=R[i]+1,L[1]=1;其中x1,x2,……xT均为上下左右(东南西北)的一种;为了使xkj不撞到障碍你可以耗费一点能量让他不动,(当然是因为不能撞死他啦, 虽然他很爱fb);问xkj在R[T]这个时刻内最多能移动多远的距离(你耗费能量定住他时, 他边不会移动);

    【输入格式】

    输入文件的第一行包含5个数n, m, x, y和T。 N和M描述舞厅的大小,x和y为xkj的初始位置;以下n行, 每行m个字符。 第i 行第j 列的字符若为‘. ’ , 则表示该位置是空地; 若为‘x ’ , 则表示有障碍。以下T行, 顺序描述T个时间段, 格式为: Li Ri di(1 ≤ i ≤ T)。 表示在时间区间[Li, Ri]内, xkj向di方向移动。 di为1, 2, 3, 4中的一个, 依次表示北、 南、 西、 东(分别对应矩阵中的上、 下、 左、 右) 。

    【输出格式】

    输出文件仅有1行, 包含一个整数, 表示xkj滑行的最长距离(即格子数)。

    【样例输入】

    4 5 4 1 3
    ..xx.
    .....
    ...x.
    .....
    1 3 4
    4 5 1
    6 7 3
    

    【样例输出】

    3
    

    【数据范围】

    对于50%的数据, 1≤n m≤200, T≤200; 对于100%的数据, 1≤n,m≤200, t[n]≤40000。

    【题解】

    这道题原题是[NOI2005]瑰丽华尔兹,本来是单调队列优化dp,但是数据水,所以直接dp的复杂度是O(能过)//对于某些lrt大佬就是卡了

    设f[i][x][y]为到第i个时间段的末尾,坐标在(x,y)最长距离。这里为了卡常我们刷表(推表):用f[i-1][x][y]推f[i][nx][ny],(nx,ny)为(x,y)在第i时段的方向能到达的所有点(不超时并且不撞墙的点)。dp取max转移即可。

    单调队列优化不会,反正NOIP应该不考。

    cdy的题真是难(省选知识点。。。话说我的数学题???NOIP考什么数学 小凯的疑惑。。。)

  • 相关阅读:
    ubuntu 安装chrome浏览器
    ubuntu下Xmodmap映射Esc和Ctrl_L
    ubuntu 设置主屏和副屏
    maven 第一次运行报错
    Intellij Idea 配置并发布tomcat项目
    Nginx跨域设置
    Inotify+rsync实现实时数据同步
    Ubuntu-18.04设置开机启动脚本
    CentOS开机自启动/etc/rc.local不执行的解决办法
    ELK之使用kafka作为消息队列收集日志
  • 原文地址:https://www.cnblogs.com/oier/p/9776025.html
Copyright © 2011-2022 走看看