题面:https://www.cnblogs.com/Juve/articles/11428730.html

chinese:

考虑$\sum\limits_{i=0}^{n*m}i*f_i$的意义:所有方案中炼字的个数之和。

统计答案时可以考虑[1,k]每个字对答案的贡献,即每个字在多少种方案中成为炼字。

在方格的一个确定位置(x,y),字符i对答案的贡献((x,y)位置的数是i且i是炼字的方案数)是

$(i-1)^{n-1}*(i-1)^{m-1}*k^{n*m-n-m+1}$。

由于诗作中的所有位置都是等价的,那么最后的答案就是

$n*m*\sum\limits_{i=0}^{k}(i-1)^{n-1}*(i-1)^{m-1}*k^{n*m-n-m+1}$。

时间复杂度O(k)。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m,k,ans=0;
int q_pow(int a,int b,int p){
int res=1;
while(b){
if(b&1) (res*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return res%mod;
}
signed main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=k;i++)
(ans+=(q_pow(i-1,n-1,mod)*q_pow(i-1,m-1,mod)%mod*q_pow(k,n*m-n-m+1,mod)%mod))%=mod;
(ans*=(n*m%mod))%=mod;
printf("%lld\n",ans);
return 0;
}

physics:

数据过水导致$O(qn^2log_2n)$过了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 1005
#define re register
using namespace std;
int n,m,q,ans,l,r,mid,sum[MAXN][MAXN],ansi,ansj,x,y;
char ch[MAXN];
inline int read(){
int a=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9'){
a=(a<<3)+(a<<1)+ch-'0';
ch=getchar();
}
return a;
}
inline bool judge(re int k){
for(re int i=1;i<=n-k+1;i++){
for(re int j=1;j<=m-k+1;j++){
re int res=sum[i+k-1][j+k-1]+sum[i-1][j-1]-sum[i+k-1][j-1]-sum[i-1][j+k-1];
if(res==k*k){
ansi=i,ansj=j;
return 1;
}
}
}
return 0;
}
signed main(){
//freopen("physics4.in","r",stdin);
n=read(),m=read(),q=read();
for(re int i=1;i<=n;i++){
scanf("%s",ch+1);
for(re int j=1;j<=m;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
if(ch[j]=='-') continue;
sum[i][j]++;
}
}
ans=min(n,m),ansi=0,ansj=0;
while(q--){
x=read(),y=read();
for(re int i=x;i<=n;i++){
for(re int j=y;j<=m;j++)
sum[i][j]--;
}
if(ans!=min(n,m)&&(x<ansi||x>ansi+ans-1||y<ansj||y>ansj+ans-1)){
printf("%d\n",ans);
continue;
}
l=0,r=ans,ans=0;
while(l<=r){
mid=(l+r)>>1;
if(judge(mid)){
ans=mid;
l=mid+1;
}
else r=mid-1;
}
printf("%d\n",ans);
}
return 0;
}

正解:

典型的时光倒流,先将所有待修改的正电荷都修改为负电荷,然后倒序考虑所有修改操作。
考虑如何在较优复杂度内计算最后一次修改后的答案(经典问题):
upi,j 表示 (i, j) 向上延伸的正电荷的最长长度。
downi,j 表示 (i, j) 向下延伸的正电荷的最长长度。
可以通过单调栈求出 lefti,j 表示 (i, j) 左面第一个小于 upi,j 的位
置, righti,j 表示 (i, j) 右面第一个小于 upi,j 的位置。
那么问题的答案就是max{min(upi,j,righti,j−lefti,j+1)} 。
时间复杂度 O(n2)

对于多次修改操作:
倒序考虑所有操作,如果答案增加,那么一定是由于当前(x, y) 位置负电荷变正电荷造成的。每次修改操作只会影响一列的 up, down ,可以暴力修改。考虑当前负电荷变正电荷后是否存在边长为 k 的正方形,那么问题就转化为是否存在min{upx,[i,i+k−1]}+min{downx,[i,i+k−1]}≥k 。求长度固定的区间的最小值,这就转化成单调队列的经典问题(滑动的窗口)。每次负电荷变正电荷后,可以二分求出由于此次修改造成的更优答案。

时间复杂度$O(n^2+qnlogn)$。

chemistry:

留坑

HZOI20190828模拟32题解的更多相关文章

  1. noip模拟32[好数学啊]

    noip模拟32 solutions 真是无语子,又没上100,无奈死了 虽然我每次都觉得题很难,但是还是有好多上100的 战神都200多了,好生气啊啊啊 从题开始变难之后,我的时间分配越来越不均匀, ...

  2. [CQOI2012]模拟工厂 题解(搜索+贪心)

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  3. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  6. 10.8 wtx模拟题题解

    填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...

  7. [NOIP模拟13]题解

    A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...

  8. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  9. Noip模拟32(再度翻车) 2021.8.7

    T1 Smooth 很水的一道题...可是最傻    的是考场上居然没有想到用优先队列优化... 上来开题看到这个,最一开始想,这题能用模拟短除法,再一想太慢了,就想着优化 偏偏想到线性筛然后试别的素 ...

随机推荐

  1. 廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池

    1. JDBC连接池 1.1 JDBC连接池简介 线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销. 同样JDBC可以复用一个JDBC连接 JDBC的连接 ...

  2. 阿里云启动视频云V5计划,全面赋能生态合作伙伴

    9月25 - 27日,主题为数·智的2019云栖大会在杭州举行.在第三天的智能视频云专场中,阿里云研究员金戈首次对外发布视频云V5计划,释放视频IT基础设施红利,赋能生态合作伙伴,共促大视频产业发展. ...

  3. vue框架介绍

    vue框架介绍 一.vue 概念 vue 是一种开发用户界面的渐进式开发框架.渐进式指的是:你可以将vue作为一部分嵌入到web应用中,带来丰富的交互体验 二.vue特点及常见开发中的高级功能 1.解 ...

  4. 修改web项目的启动页

    修改web项目的启动页

  5. MongoDB后台运行

    文章目录 命令方式(推荐) 命令行和配置文件方式 命令行: 配置文件: 命令方式(推荐) 如果想在后台运行,启动时只需添加 --fork函数即可. fork: 以守护进程的方式运行MongoDB. 指 ...

  6. npm使用入门

    NPM使用入门 npm 就是node package manager node的包管理工具 我们通过npm install 模块 来安装模块,缩写:npm i 模块,注意,低版本的node可能需要np ...

  7. 网络安全系列 之 SQL注入学习总结

    目录 1. sql注入概述 2. sql注入测试工具 3. sql注入防御方法 3.1 问题来源 3.2 防御方法 4. SQL注入防御举例 4.1 使用JDBC时,SQL语句进行了拼接 4.2 使用 ...

  8. FTP、FTPS、SFTP概览

    1. 基本概念 FTP:File Transfer Protocol FTPS:FTP over SSL.构建在SSL/TLS(Secure Socket Layer/Transport Layer ...

  9. Mysql优化系列之查询性能优化前篇2

    接前一篇,这一篇主要总结下几个经常要用的命令 命令一:explain+sql mysql> explain select * from servers; +----+-------------+ ...

  10. 深夜Python - 第2夜 - 爬行

    深夜Python - 第2夜 - 爬行 我曾经幻想自己是一只蜗牛,有自己的一只小壳,不怕风,不怕雨,浪荡江湖,游历四方……夜猫兄一如既往地打断了我不切实际的幻想:“浪荡?游历?等你退休了都爬不出家门口 ...