文章目录

  • 考试复盘
  • A
  • B
  • C

考试复盘

今天的题其实蛮温柔的

考完试预估分160160160,好家伙到手的只有14\frac{1}{4}41​

第一题是原题,做过的,虽然忘记怎么做了。。。⊙︿⊙

但是因为本身较简单,考场上也想到了正解

但是因为我的SBSBSB二分midmidmid附近点的取舍可能导致了答案位置的偏差111

(╥╯^╰╥)哭晕在厕所了谢谢

第二题感觉就是DPDPDP转移,联想到了正睿的一道划段合并DPDPDP

但是passpasspass了,发现自己需要将i,i+1i,i+1i,i+1与i,i−1i,i-1i,i−1是否相邻的信息拿到

自己的DPDPDP转移不动

反正就是没想到再拿一个DPDPDP,两个相互转移

打了303030的暴力表,结果又出现了经典菜谱——没输入完就直接return0return\ 0return 0

丢了

第三题扑脸而来的NTTNTTNTT味道,但是不会

只能写最原始的DPDPDP暴力打表,结果忘记调用打表函数,结果全是000

Y(>_<、)Y

总结:

今天考试的题目比较简单,所以暴露出了很多细节/策略问题,如果在省选场上出现那简直就是死亡名单

1.对细节偏差非常讲究的题目(T1)一定要构造数据想办法测一测那个临界附近

2.如果暴力分能打表,那么最好先写了后放在后面自己跑,继续往下做。今天是最后十几分钟打的表,时间就很紧张。如果一开始看到就直接打表肯定是不会这么慌张的(T3)

3.对于自己不喜欢写对拍这件事,真的要在后面每一场比赛中强迫自己写——不一定要拍正解,至少保证自己能拿到的分一定不能丢!(T2如果写对拍,肯定发现自己直接结束程序的bug)

省选在即,把握细节,优化策略,是最后的王牌!

A

考虑枚举作为中位数的妹子

然后两边一定是选一段等长的区间

设选的中位数在mid处

二分两边选多少数,设选了x个

比较这2x+12x+12x+1个数的平均数和第mid−xmid-xmid−x和n−x+1n-x+1n−x+1个数的平均数

如果前者大,说明xxx应该变小,否则xxx变大

#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 200005
int n;
double a[maxn], sum[maxn];double calc( int pos, int x ) {return ( sum[pos] - sum[pos - x - 1] + sum[n] - sum[n - x] ) / ( x << 1 | 1 );
}int main() {scanf( "%d", &n );for( int i = 1;i <= n;i ++ )scanf( "%lf", &a[i] );sort( a + 1, a + n + 1 );for( int i = 1;i <= n;i ++ )sum[i] = sum[i - 1] + a[i];double ret = 0;for( int i = 1;i <= n;i ++ ) {int l = 0, r = min( i - 1, n - i ), x = 0;while( l < r ) {int mid = ( l + r ) >> 1;if( calc( i, mid ) < calc( i, mid + 1 ) )l = mid + 1;elser = mid;}ret = max( ret, calc( i, l ) - a[i] );}printf( "%.4f\n", ret );return 0;
}

B

设计状态f[i][j]f[i][j]f[i][j]表示前iii个数的排列且包含jjj对非法相邻数对的方案数,当我们放入i+1i+1i+1这个数的时候发生3种状况:

  • 打破一对非法相邻数对

  • 增加一对非法相邻数对

  • 不变。

增加的情况就发生在iii和i+1i+1i+1相邻的情况

所以我们还需要知道iii是否处于某个非法相邻数对。

因此重新设计状态

f[i][j]f[i][j]f[i][j]:前i个数的排列且包含j对非法相邻数对,iii存在于非法相邻数对中的方案数

g[i][j]g[i][j]g[i][j]:iii不存在于非法相邻数对中的方案数

转移就是考虑i+1i+1i+1的放置方法

f[i][j]f[i][j]f[i][j] 的放置方法有4种:

  • 与i相邻且增加一对非法相邻数对,只会是[i−1,i,i+1],1[i-1,i,i+1], 1[i−1,i,i+1],1种方法

    f[i+1][j+1]f[i+1][j+1]f[i+1][j+1]

  • 与iii相邻且不改变非法相邻数对数,只会是[i−1,i+1,i],1[i-1,i+1,i], 1[i−1,i+1,i],1种方法

    f[i+1][j]f[i+1][j]f[i+1][j]

  • 不与iii相邻且减少一对非法相邻数对,有j−1j-1j−1种方法

    g[i+1][j−1]g[i+1][j-1]g[i+1][j−1]

  • 不与i相邻且不改变非法相邻数对数,有i−ji-ji−j种方法

    g[i+1][j]g[i+1][j]g[i+1][j]

g[i][j]g[i][j]g[i][j]有333种情况

  • 与iii相邻且增加一对非法相邻数对,可能是[i+1,i][i+1,i][i+1,i]或[i,i+1],2[i,i+1],2[i,i+1],2种方法

    f[i+1][j+1]f[i+1][j+1]f[i+1][j+1]

  • 不与iii相邻且减少一对非法相邻数对,有jjj种摆放方法

    g[i+1][j−1]g[i+1][j-1]g[i+1][j−1]

  • 不与iii相邻且不改变非法相邻数对数,有i−j−1i-j-1i−j−1种摆放方法

    g[i+1][j]g[i+1][j]g[i+1][j]

最终的答案就是g[N][0]g[N][0]g[N][0]

#include <cstdio>
#include <cstring>
#define int long long
#define maxn 1005
int n, mod;
int f[maxn][maxn], g[maxn][maxn];signed main() {while( ~ scanf( "%lld %lld", &n, &mod ) ) {memset( f, 0, sizeof( f ) );memset( g, 0, sizeof( g ) );g[1][0] = 1;for( int i = 1;i < n;i ++ )for( int j = 0;j < i;j ++ ) {f[i + 1][j + 1] = ( f[i + 1][j + 1] + f[i][j] ) % mod;f[i + 1][j] = ( f[i + 1][j] + f[i][j] ) % mod;if( j ) g[i + 1][j - 1] = ( g[i + 1][j - 1] + f[i][j] * ( j - 1 ) ) % mod;g[i + 1][j] = ( g[i + 1][j] + f[i][j] * ( i - j ) ) % mod;f[i + 1][j + 1] = ( f[i + 1][j + 1] + g[i][j] * 2 ) % mod;if( j ) g[i + 1][j - 1] = ( g[i + 1][j - 1] + g[i][j] * j ) % mod;g[i + 1][j] = ( g[i + 1][j] + g[i][j] * ( i - j - 1 ) ) % mod; }printf( "%lld\n", ( g[n][0] + mod ) % mod );}return 0;
}

C

令N=3×7×11×47=10857N=3\times 7\times 11\times 47 =10857N=3×7×11×47=10857

fi,jf_{i,j}fi,j​表示前iii位模NNN为jjj的方案数

利用倍增思想,优化暴力转移

f2i,(j⋅10i+k)%N=∑fi,j⋅fi,kf_{2i,(j·10^i+k)\%N}=\sum f_{i,j}·f_{i,k}f2i,(j⋅10i+k)%N​=∑fi,j​⋅fi,k​

固定2i2i2i,令k=10i,gt=∑j⋅k%N=tfi,j,ht=fi,tk=10^i,g_t=\sum_{j·k\%N=t}f_{i,j},h_t=f_{i,t}k=10i,gt​=∑j⋅k%N=t​fi,j​,ht​=fi,t​

则转移变为f2i,j+k=gj∗hkf_{2i,j+k}=g_j*h_kf2i,j+k​=gj​∗hk​

标准可爱的卷积形式,FFTFFTFFT加速矩阵

#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
#define ll long long
#define maxn 200100
#define mod 9973
#define N 10857struct complex {double x, i;complex(){}complex( double X, double I ) {x = X, i = I;}
}A[maxn], B[maxn];double pi = acos( -1.0 );complex operator + ( complex a, complex b ) {return complex( a.x + b.x, a.i + b.i );
}complex operator - ( complex a, complex b ) {return complex( a.x - b.x, a.i - b.i );
}complex operator * ( complex a, complex b ) {return complex( a.x * b.x - a.i * b.i, a.x * b.i + a.i * b.x );
}int len = 32768;
int r[maxn];void FFT( complex *v, int opt ) {for( int i = 0;i < len;i ++ )if( i < r[i] ) swap( v[i], v[r[i]] );for( int i = 1;i < len;i <<= 1 ) {complex omega( cos( pi / i ), opt * sin( pi / i ) );for( int j = 0;j < len;j += ( i << 1 ) ) {complex w( 1, 0 );for( int k = 0;k < i;k ++, w = w * omega ) {complex x = v[j + k], y = v[j + k + i] * w;v[j + k] = x + y;v[j + k + i] = x - y;}}}
}int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % N;x = x * x % N;y >>= 1;}return ans;
}bool check( int x ) {return x % 2 && x % 3 && x % 5 && x % 7 && x % 11 && x % 47;
}void mul( int *f, int *g, int L ) {int k = qkpow( 10, L );for( int i = 0;i < N;i ++ ) {A[i * k % N] = complex( int( f[i] + A[i * k % N].x ) % mod , 0 );B[i] = complex( g[i], 0 );f[i] = 0;}FFT( A, 1 ), FFT( B, 1 );for( int i = 0;i < len;i ++ ) A[i] = A[i] * B[i];FFT( A, -1 );for( int i = 0;i < len;i ++ ) {f[i % N] = ( f[i % N] + (ll)( A[i].x / len + 0.5 ) ) % mod;A[i] = B[i] = complex( 0, 0 );}
}int n;
int c[5] = { 1, 2, 3, 5, 7 };
int f[maxn], g[maxn];int main() {scanf( "%d", &n );if( n == 1 ) return ! printf( "1\n" );else n --;int L = f[0] = g[1] = g[2] = g[3] = g[5] = g[7] = 1;int l = log2( len );for( int i = 0;i < len;i ++ )r[i] = ( r[i >> 1] >> 1 ) | ( ( i & 1 ) << ( l - 1 ) );while( n ) {if( n & 1 ) mul( f, g, L );mul( g, g, L );n >>= 1;L <<= 1;}int ans = 0;for( int i = 0;i < N;i ++ )for( int j = 0;j < 5;j ++ )if( check( i * 10 + c[j] ) )ans = ( ans + f[i] ) % mod;else;printf( "%d\n", ans );return 0;
}

[2021.4.7多校省选模拟33]A,B,C相关推荐

  1. [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)

    [2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率,但是枚举斜率之后就会产生多条直线,并且这些直线的长度不一,难以快速求解,所以我们考虑换一种方法枚举. 枚举最远点对的横纵坐标之 ...

  2. [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)

    [2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要 ...

  3. [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)

    [2021.1.31多校省选模拟12]随机变换的子串 对于这三种操作,我们惊奇地发现有这样的性质,所有长度大于4的字符串都可以通过变换变为长度小于等于4的字符串,那么查询本质不同的字符串我们只需要处理 ...

  4. A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)

    A. [2021.1.29多校省选模拟11]最大公约数 这是一个杜教筛的经典题目,最后我们只需要筛一下1∗xμ(x)1*x\mu(x)1∗xμ(x)这个函数的前缀和即可,然后看到有111这个函数,我们 ...

  5. [2021.1.27多校省选模拟10]跑步(线段树合并)

    [2021.1.27多校省选模拟10]跑步 经典的树上启发式合并题目,维护对应子树的从当前点到子树内一个节点这个链待定,其他部分已经确定的方案数,这个东西按照对应点到根节点的路径点权和为下标存在一个权 ...

  6. [2021.1.27多校省选模拟10]染色(min-max容斥/二项式反演)

    [2021.1.27多校省选模拟10]染色 突然发现我对概率期望的理解不是很好... 部分分1:可以直接进行状压dp,然后按照题意模拟即可. 部分分2:首先可以发现这个问题是min_max容斥形式,然 ...

  7. [2021.4.5多校省选模拟30]最小表示——map建边+广义SAM

    前言:虽然这题前面加了个括号是"省选模拟30",但是在accoders上是比赛"省选模拟31"里面的. 题目描述 题解 先贴出官方正解,是用的和后缀数组: 根据 ...

  8. 2021-4-1 多校省选模拟赛

    文章目录 考试复盘 nmd 考试复盘 T1T1T1 我可太喜欢这种不要脑子的莽试题了!! 考场上猜的结论d>3d>3d>3无解 d=1,d=2d=1,d=2d=1,d=2的填法也试出 ...

  9. 2021年茶艺师(初级)模拟考试及茶艺师(初级)模拟考试题

    题库来源:安全生产模拟考试一点通公众号小程序 茶艺师(初级)模拟考试是安全生产模拟考试一点通总题库中生成的一套茶艺师(初级)模拟考试题,安全生产模拟考试一点通上茶艺师(初级)作业手机同步练习.2021 ...

最新文章

  1. 父与子的编程python_父母在人生尚有来处,父母去人生只剩归途!(看一次,哭一次)...
  2. 霸气!曝阿里于AI方面取得卓越成绩
  3. linux mrtg 进程名称,Linux上的MRTG流量监控中心
  4. 用开源代码如何建立网站_在开源上建立自举业务
  5. c4503文件服务器,理光C3503/C4503/C5503检查状态下各项目说明解释
  6. MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
  7. scm中mysql作用_scm供应链管理的作用
  8. html怎么加圆圈,圆圈1怎么打 word怎么打一个圈里面加数字1
  9. 各地区工业化学需氧量排放量(1992-2017年)
  10. ArcGIS中ObjectID,FID和OID字段区别
  11. 解析MTK获取系统时间函数大全
  12. 雷达图使用攻略(上)
  13. python四位数字加密_python实现字符串加密成纯数字
  14. 一次控制文件control file sequential read 等待性能案例分析
  15. Python人脸识别项目-人脸检测
  16. 曹国伟:微博客将改变媒体发展形态
  17. [VIM].vimrc設置詳解---配置你的vim
  18. 【已解决】Tortoise Git在Windows文件资源管理器中图标显示异常问题
  19. 【已发导读】CEEEA2.0 模型用于能源-环境-经济分析的动态CGE 模型
  20. 感人 机器人擂台_十大机器人电影,《环太平洋》仅排第7,第1名感动了很多人...

热门文章

  1. 10个舍不得删的高质量公号
  2. android ifw 启动广告,使用 IFW 完全控制 Android 应用行为 | 实用技巧
  3. python的缩进机制是其缺点之一_Python 的缩进是不是反人类的设计?
  4. sql年月日24小时制_Power Query 抓取气象台24小时降水量数据
  5. 【解决bug之路】JAVA 之 static
  6. 获取父线程 java_java子线程中获取父线程的threadLocal中的值
  7. c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)
  8. linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
  9. python函数用于创建对象_Python-创建类并使用函数更改其对象值
  10. 内网通mac能用吗_纯干货!小容量Mac装外置硬盘Windows系统最完美的方案!(多图)...