NOIP模拟测试10「大佬·辣鸡·模板」
大佬
显然假期望
我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$
然后一想不对得容斥
于是我得到$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{j\times(k-1)}^{k-1} \times w[j]$
但还是不对
现在思考第一个式子为什么不对
我们枚举矩阵选数
1 2 3
1 2 3
1 2 3
这样我们C的话概率会很鬼$\frac {4}{12}$$\times$$\frac {3}{11}$$\times$$\frac {2}{10}$
显然应该是$\frac 1 3$$\times $$\frac 1 3$$\times$$\frac 1 3$
我算小了
真的是小了吗?
思考第二个式子为什么不对,显然我们如果这样做应该再乘$C_{k}^{1}$但这么乘起来会重复
1111111会被多贡献很多回
还是要容斥
然后考试时我思维就停止了
我们或许可以换种思路考虑
同样是一个区间,我们这样算区间贡献
$\sum\limits_{j=1}^{j<=m} j^k-(j-1)^k$
理解一下
$j^k$表示$<=j$随便选,然后再容斥掉$(j-1)^k$(所有都比j小,选不到j)
得到贡献
然后再用f转移即可
#include<bits/stdc++.h> #define ll long long #define A 700000 using namespace std; const ll mod=1e9+7; ll n,m,k,sumday,w[A],ni,ans=0; inline ll meng(ll x,ll k){ll ans=1;for(;k;k>>=1,x=x*x%mod)if(k&1)ans=ans*x%mod;return ans; } int main(){scanf("%lld%lld%lld",&n,&m,&k);if(k>n) {puts("0");return 0;}ni=1;for(ll i=1;i<=m;i++)scanf("%lld",&w[i]);for(ll i=1;i<=m;i++)((ans=(ans%mod+(meng(i,k)%mod-meng(i-1,k)%mod+mod)*w[i]%mod)%mod))%=mod;ans=ans*(n-k+1)%mod;ni=meng(meng(m,k),mod-2)%mod;cout<<ans%mod*ni%mod<<endl; }
辣鸡
考试历程:
想到$n^2$过不了应该是$n^log$的,或许是$n^{log^2}$
反正$n^2$能过我吃掉键盘
然后我就思考,我tm应该用什么呢,CDQ?树状数组?线段树?权值线段树?还是像上次光那个题一样的傻逼大模拟?
偶对了,一定是像光那个题一样的傻逼题。
但我的光现在还没有过啊。。
这个题暴力分好少啊
然后我还是打了个普通$n^2$然后发现它炸了。
我发现难以调出来还是改成了xy相关
考完后
这个题还真$n^2$能过
完了我没有立flag
后来得知是优化过的$n^2$
打起来像插头dp
首先矩阵内的贡献我们可以用(x2-x1)*(y2-y1)*2算出来
然后矩阵之间分很多种情况
然而每一种都比较简单,比插头简单的多
方格表示过于,,,容易出现各种错误,格点表示
具体还是看代码
#include<bits/stdc++.h> using namespace std; #define ll long long #define A 1100000 struct node{ll x1,x2,y1,y2;friend bool operator <(const node a,const node b){return ((a.x1==b.x1)?a.y1<b.y1:a.x1<b.x1);} }nd[A]; ll ans=0,n; int main(){scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld%lld%lld",&nd[i].x1,&nd[i].y1,&nd[i].x2,&nd[i].y2);ans+=(nd[i].x2-nd[i].x1)*(nd[i].y2-nd[i].y1)*2;}sort(nd+1,nd+n+1);for(ll i=1;i<n;i++){for(ll j=i+1;j<=n;j++){if(nd[j].x1>nd[i].x2+1) break;if(nd[i].y2+1<nd[j].y1||nd[i].y1-1>nd[j].y2) continue; // printf("ix1=%lld iy1=%lld jx1=%lld jy1=%lld\n",nd[i].x1,nd[i].y1,nd[j].x1,nd[j].y1);if(nd[j].x1>nd[i].x2){if(nd[i].y2<nd[j].y1||nd[i].y1>nd[j].y2) ans++;else if(nd[i].y1==nd[j].y1){if(nd[i].y2==nd[j].y2)ans+=(nd[i].y2-nd[i].y1)*2;else if(nd[i].y2<nd[j].y2) ans+=(nd[i].y2-nd[i].y1)*2+1;else if(nd[i].y2>nd[j].y2)ans+=(nd[j].y2-nd[i].y1)*2+1;}else if(nd[i].y2==nd[j].y2){if(nd[i].y1==nd[j].y1)ans+=(nd[i].y2-nd[j].y1)*2;else if(nd[i].y1<nd[j].y1)ans+=(nd[i].y2-nd[j].y1)*2+1;else if(nd[i].y1>nd[j].y1)ans+=(nd[i].y2-nd[i].y1)*2+1;}else if(nd[i].y2>nd[j].y2&&nd[i].y1<nd[j].y1)ans+=(nd[j].y2-nd[j].y1)*2+2;else if(nd[i].y2<nd[j].y2&&nd[i].y1<nd[j].y1)ans+=(nd[i].y2-nd[j].y1)*2+2;else if(nd[i].y2>nd[j].y2&&nd[i].y1>nd[j].y1)ans+=(nd[j].y2-nd[i].y1)*2+2;else if(nd[i].y2<nd[j].y2&&nd[i].y1>nd[j].y1)ans+=(nd[i].y2-nd[i].y1)*2+2; // printf("second%lld\n",ans); }else{if(nd[i].x1==nd[j].x1){if(nd[i].x2==nd[j].x2)ans+=(nd[i].x2-nd[i].x1)*2;else if(nd[i].x2<nd[j].x2) ans+=(nd[i].x2-nd[i].x1)*2+1;else if(nd[i].x2>nd[j].x2)ans+=(nd[j].x2-nd[i].x1)*2+1;}else if(nd[i].x2==nd[j].x2){if(nd[i].x1==nd[j].x1)ans+=(nd[i].x2-nd[j].x1)*2;else if(nd[i].x1<nd[j].x1)ans+=(nd[i].x2-nd[j].x1)*2+1;else if(nd[i].x1>nd[j].x1)ans+=(nd[i].x2-nd[i].x1)*2+1;}else if(nd[i].x2>nd[j].x2)ans+=(nd[j].x2-nd[j].x1)*2+2;else if(nd[i].x1<nd[j].x1&&nd[i].x2<nd[j].x2)ans+=(nd[i].x2-nd[j].x1)*2+2; // printf("frist%lld\n",ans); } // printf("i=%lld j=%lld ans=%lld\n",i,j,ans); }}cout<<ans<<endl; }
模板
我一开始确实以为是模板
然后就开始打了,树差,线段树,权值线段树,合并往上仍
不就是和雨天的尾巴差不多的一道题目吗 AC预订
然后越想越不对,觉得难以维护桶
看数据范围不维护桶勉强可以70分
那就先得70分吧
然后我就打炸了,看着最后时间将至赶紧删了打暴力
暴力树上差分还有30分,树上差分打对就行
然后树上差分我觉得也不行,也是相当难维护,set,vector,map,multiset往上仍,但无济于事
最小的点是10 10 10,打个纯暴力还有10分呢
我成功奶死了自己
0分!
tqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltqltql
说一下这个怎么做
前置知识:
启发式合并
线段树
注意很多细节,我会在启发式合并中具体讲
转载于:https://www.cnblogs.com/znsbc-13/p/11264230.html
NOIP模拟测试10「大佬·辣鸡·模板」相关推荐
- NOIP模拟测试7「方程的解·visit」
visit 由于一些不可预知的错误导致我一直WA 错误最后说 思路 方案一 假设终点在出发点右上方(这样假设只是为了方便) 假设向左走了a步,向右下了b布,那么相应的我们要向右走m+a,向上n+b步 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- [NOIP模拟测试10]辣鸡(ljh) 题解
首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$. 然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可. 注意考虑边界情况是否能多两个,以及角对角的情况. 另外,排 ...
- NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」
待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005]; ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
- NOIP模拟测试38「金·斯诺·赤」
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...
- NOIP模拟测试34「次芝麻·呵呵呵·长寿花」
次芝麻 题解 大力打表,发现快速幂, 例如初始$5$ $6$,那么第一次就是$5*2\%11=10$,$6*2\%11=1$. 代码 #include<bits/stdc++.h> usi ...
- NOIP模拟测试28「阴阳·虎·山洞」
写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...
- NOIP模拟测试30「return·one·magic」
magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...
最新文章
- 逻辑回归 + GBDT模型融合实战!
- 一文快速入门分库分表中间件 Sharding-JDBC (必修课)
- extjs学习(关于grid)
- 什么是宇宙安全声明_《三体》三体人是否知道如何向宇宙发表安全声明?
- csdn颜色字体的改变
- python爬取百度贴吧中的所有邮箱_python写的百度贴吧邮箱采集(带界面)
- 使用threading模块实现多线程
- SAP License:兼顾发展与成本:解构大中型企业ERP产品需求
- 前端面试送命题(一)-JS三座大山
- 兑现北京冬奥赞助承诺 奇安信安全防护软件冬奥版发布
- TensorFlow相关的一些技巧
- 阿里java注释规范_阿里巴巴Java开发手册-注释规约
- 中国省级行政区划变动情况
- 计算机快捷键屏幕录制,如何录制电脑屏幕视频-电脑实用快捷键(9页)-原创力文档...
- 计算机专业英语的缩写词,计算机专业英语单词缩写表
- 校本课程 计算机组装与维护,让信息技术成为校本课程开发的对象
- win10系统安装jdk8简易教程
- worldpress小工具自定义html,教程 | 用 worldpress 搭建自己的博客 – 小白教程
- 基于Matlab的空中交通管制仿真(附源码)
- php按钮如何加显示不出来,javascript - 点击按钮 显示更多,自定义变量显示不出来?...
热门文章
- Windows下Maven的下载、安装及IntelliJ IDEA集成配置
- Linux 命令之 usermod -- 用于修改用户的基本信息
- Linux 如何关闭防火墙
- Linux 查看数据库MySQL安装文件和安装目录的命令
- winpe镜像文件iso下载_下载:微软正式发布Win10 2004版并即日起开始推送
- python内置类型_Python内置对象类型
- 嵌入式开发C语言中的uint8_t
- yolov3安卓实现_YOLOv3 的 TensorFlow 实现,GitHub 完整源码解析
- python 接收邮件服务器地址_Python 用IMAP接收邮件
- python人脸_Python 使用 face_recognition 人脸识别