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
说一下这个怎么做
前置知识:
启发式合并
线段树
注意很多细节,我会在启发式合并中具体讲
NOIP模拟测试10「大佬·辣鸡·模板」的更多相关文章
- NOIP模拟测试21「折纸·不等式」
折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...
- 7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)
T1 辣鸡(ljh) 就是一道分类讨论的暴搜,外加一丢丢的减枝,然而我挂了,为啥呢,分类讨论变量名打错,大于小于号打反,能对才怪,写了sort为了调试就注释了,后来忘了解开,小减枝也没打.但是这道题做 ...
- 2019.7.29 NOIP模拟测试10 反思总结【T2补全】
这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
- 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模拟测试8「寿司」
考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...
- NOIP模拟测试38「金·斯诺·赤」
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...
随机推荐
- MySQL库表设计小技巧
前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...
- CRM系统全方位管理企业
您在选择一款CRM系统的时候,首先要考虑销售团队的感受和意见.让CRM系统在帮助销售团队优化工作流程的同时,更好地对销售团队进行管理.销售人员每卖出一件商品,要从寻找筛选商机开始,经过沟通客户需求.满 ...
- 技能Get·Windows10将任何格式文件固定到开始屏幕
阅文时长 | 0.6分钟 字数统计 | 960.8字符 主要内容 | 1.引言&背景 2.将文件加入到应用列表中 3.修改注册表法 4.声明与参考资料 『技能Get·Windows10将任何格 ...
- CentOS 7 调整home大小
把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home: tar cvf /tmp/home.tar /home #备份/home umount /ho ...
- JavaEE 学大数据是否掌握 JavaSE 和 Linux 就够了?
引言 如果你是学习大数据的童靴,可能经常在网上看到一些公众号或博客告诉你,学习大数据基础部分只需要掌握 JavaSE 和 Linux 就够了,至于 JavaWeb 和 JavaEE 简单了解一下就可以 ...
- Mybatis 逆向工程使用(Day_17)
有三个方法可以解决所有的问题:接受,改变,离开.不能接受那就改变,不能改变,那就离开. [何为逆向工程?] 众 所 周 知 ,正向工程就是通过JAVA类的设置来生成对应的数据库表. MyBatis逆向 ...
- 信息学C++教程<-3->输入输出格式控制
二进制输出整数 在计算机系统内的数据本身就是二进制 思考:在C++中,如何通过cout函数来输出二进制的数字呢? 所需库文件:1.iomanip //管理C++格式控制 2.bitset //二进 ...
- SQL 语句大全(简化版)
1. SELECT * FROM 表名 WHERE 1 AND [ORDER BY DESC LIMIT] 2. INSERT INTO 表名 (字段列表) VALUES (值列表) 3. UPDAT ...
- 十一、.net core(.NET 6)搭建ElasticSearch(ES)系列之ElasticSearch、head-master、Kibana环境搭建
搭建ElasticSearch+Kibana环境 前提条件:已经配置好JDK环境以及Nodejs环境.如果还未配置,请查看我的上一篇博客内容,有详细配置教程. 先下载ElasticSearch(以下文 ...
- Mysql索引数据结构为什么是B+树?
目录 Mysql索引数据结构 二叉树 红黑树 B-Tree B+Tree Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from ...