NOIP模拟测试20「周·任·飞」
liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$
任
题解
题目中为什么反复强调简单路径,没有环
没有环的图中点数-边数=联通块数
前缀和维护边的前缀和,和点的前缀和,
在维护边的前缀和不好维护转化为横着边前缀和,竖着边前缀和
注意边的边界问题
看边如何维护
就拿我的举例
你在当前为边且当前左面为边时置为1
那么当你统计答案时
ll bia=bianheng[x2][y2]-bianheng[x1-1][y2]-bianheng[x2][y1]+bianheng[x1-1][y1];
思考我们统计答案时要把x2相连的边切断
类似的,我们维护竖着的边时也要类似操作
代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define A 2101
char s[A][A];
ll vis[A][A],stax[4200000],stay[4200000],dian[A][A],bianheng[A][A],bianshu[A][A];
ll cnt=0,n,m,q;
const ll nowx[5]={0,0,0,1,-1};
const ll nowy[5]={0,1,-1,0,0};
void dfs(ll x,ll y,ll x1,ll y1,ll x2,ll y2){
vis[x][y]=cnt;
// printf("x=%lld y=%lld vis=%lld\n",x,y,vis[x][y]);
for(ll i=1;i<=4;i++){
ll xnow=x+nowx[i],ynow=y+nowy[i];
if(xnow>x2||xnow<x1) continue;
if(ynow>y2||ynow<y1) continue;
if(s[xnow][ynow]-'0'==0) continue;
if(vis[xnow][ynow]) continue;
dfs(xnow,ynow,x1,y1,x2,y2);
}
}
void bfs(ll x1,ll y1,ll x2,ll y2){
cnt=0;
for(ll i=x1;i<=x2;i++)
for(ll j=y1;j<=y2;j++){
if(s[i][j]=='1'&&!vis[i][j]){
++cnt;
dfs(i,j,x1,y1,x2,y2);
}
}
for(ll i=x1;i<=x2;i++)
for(ll j=y1;j<=y2;j++){
vis[i][j]=0;
}
printf("%d\n",cnt);
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for(ll i=1;i<=n;i++){
scanf("%s",s[i]+1);
}
// memset()
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++){
if(s[i][j]=='1'&&s[i][j-1]=='1'){
bianheng[i][j]++;
}
if(s[i][j]=='1'&&s[i-1][j]=='1'){
bianshu[i][j]++;
}
if(s[i][j]=='1'){
dian[i][j]++;
}
}
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++){
bianheng[i][j]=bianheng[i][j]+bianheng[i-1][j]+bianheng[i][j-1]-bianheng[i-1][j-1];
bianshu[i][j]=bianshu[i][j]+bianshu[i-1][j]+bianshu[i][j-1]-bianshu[i-1][j-1];
dian[i][j]=dian[i][j]+dian[i-1][j]+dian[i][j-1]-dian[i-1][j-1];
}
// for(ll i=1;i<=n;i++,puts(""))
// for(ll j=1;j<=m;j++){
// printf("bian=%d ",bianheng[i][j]);
// }
for(ll i=1,x1,x2,y1,y2;i<=q;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
ll bia=bianheng[x2][y2]-bianheng[x1-1][y2]-bianheng[x2][y1]+bianheng[x1-1][y1];
// printf("%d %d %d %d bia=%d\n",bianheng[x2][y2],bianheng[x1-1][y2],bianheng[x2][y1],bianheng[x1-1][y1-1],bia);
bia+=bianshu[x2][y2]-bianshu[x1][y2]-bianshu[x2][y1-1]+bianshu[x1][y1-1];
// printf("%d %d %d %d bia=%d\n",bianshu[x2][y2],bianshu[x1][y2],bianshu[x2][y1-1],bianshu[x1-1][y1-1],bia);
ll dia=dian[x2][y2]-dian[x1-1][y2]-dian[x2][y1-1]+dian[x1-1][y1-1];
printf("%d\n",dia-bia);
}
}
飞
题解
其实就是求逆序对,然而逆序对是$n*log$的并不能过,思考优化
我们发现其实它给了多段等差数列,
先看所有等差数列都是完整的情况
我们在同一段等差数列上可以由$x[i-1]$推到$x[i]$思考我们找的是比当前大的个数,$x[i]=x[i-1]+a$所有之前等差数列贡献都要减一
那么设之前贡献$tmp$得到当前贡献$tmp-cnt(等差数列个数)$
那么我们思考$<a$(即等差数列首项)怎么维护,我们拿一个树状数组维护$<a$的所有值
假设当前值为$x$那么逆序对数就是$i-sum(x)-1$
然后我们考虑第一段不是完整的
假设当前$x$转移到$x2$中$x,x2$都比$begin$小那么等差数列上所有小于$begin$贡献都要减一(头一段上没有处于$x$--$x2$数不能转移)
若当前已经比$begin$大了把它当成一个正常等差数列
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 111111
ll c[A];
ll tus,n,a,mod,now,cnt=0,ans=0,last,tmp;
void add(ll x,ll u){
for(ll i=x;i<=a;i+=i&-i)
c[i]+=u;
}
ll sum(ll x){
ll ans=0;
for(ll i=x;i>=1;i-=i&-i)
ans+=c[i];
return ans;
}
int main(){
scanf("%lld%lld%lld%lld",&n,&tus,&a,&mod);
ll now=tus;
if(tus<=a){
add(tus+1,1);
}
for(ll i=2;i<=n;i++){
now=(a+now)%mod;
if(now<a){
tmp=i-sum(now+1)-1;
cnt++;
add(now+1,1);
}
else{
tmp-=cnt;
if(now<tus) tmp++;
}
ans+=tmp;
}
printf("%lld\n",ans);
}
NOIP模拟测试20「周·任·飞」的更多相关文章
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- NOIP模拟测试30「return·one·magic」
magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...
- NOIP模拟测试16「Drink·blue·weed」
话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2. ...
- NOIP模拟测试4「礼物·通讯·奇袭」
礼物. 首先见到期望一定要想dp,看到n的范围无脑想状压, 然后我就只想到这了. dp方程式还是比较好想的,但是我依然想不出来 略经思考 颓题解 依然不会,随便写了个式子 i状态中不含j $f[i ...
- NOIP模拟测试38「金·斯诺·赤」
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...
- NOIP模拟测试28「阴阳·虎·山洞」
写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...
- NOIP模拟测试23「mine·water·gcd」
mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...
- NOIP模拟测试9「随·单·题」
liu_runda出的题,先$\%\%\%\%\%\%\%\%\%\%\%$为敬 随 考试时没有Qj 然后甚至没做,甚至没交 我不知道我怎么想的 这个题挺难改 你需要用到 循环矩阵快速幂,矩阵快速幂优 ...
- noip模拟测试20
考试总结:这次考试,我非常真实地感觉到了自己能力的提高,具体来说,在之前的考试中,读完题之后我只会想到暴力的思路,甚至有的题连暴力都打不出来,但是这次在考场上我已经有了自己的一些想法,有了一个深入思考 ...
随机推荐
- netcore3.1 webapi使用signalR
前言 今天尝试了一下signalR,感觉还不错,因为暂时用不到,就写一篇博文来记录搭建过程,以免以后给忘了,基于官方文档写的,不过官方没有webapi调用例子,就自己写了一下,大神勿喷 使用 1.创建 ...
- 事后分析$\beta$
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 事后分析 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 组织组员 ...
- 新代(Syntec)机床的IP设置
一.前言 通过以太网来做机床联网数据采集时,第一步通常是设置机床的IP和找网口 二.机床IP如何设置? 步骤一.找到设置IP的界面 [维护]>[网络设定] 步骤二.设置IP 设定[IP地址取得方 ...
- mac 安装jmeter
1.打开jemeter网址 http://jmeter.apache.org/download_jmeter.cgi 2.下载Binaries中的 apache-jmeter-5.0.tgz 3.解压 ...
- Springboot项目之阿里云OSS快速入门
阿里云oss 阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全.低成本.高可靠的云存储服务.您可以通过本文档提供的简单的REST接口,在任何 ...
- 分析Red Hat sosreport输出的方法
分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...
- 马哥Linux SysAdmin学习笔记(四)
sed:编辑器 sed:Stream EDitor,行编辑器 用法: sed [option]... 'script' inputfile... script: '地址命令' 常用选项: -n:不输出 ...
- 保存 yum 下载的软件包并制作成本地 yum 源
保存 yum 下载的软件包并制作成本地 yum 源 实验对象 CentOS 7 yum 安装 nginx (nginx必须使用第三源才能安装:redhat8版本的则不需要,官网源自带nginx软件包) ...
- Linux占用swap分区过高,物理内存还有剩余
Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...
- 攻防世界(三)Web_php_unserialize
攻防世界系列:Web_php_unserialize 0x01.代码审计 1.类Demo中struct().destruct()函数分别在代码执行开始和结束时调用.而wakeup函数会在代码执行过程中 ...