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
考试总结:这次考试,我非常真实地感觉到了自己能力的提高,具体来说,在之前的考试中,读完题之后我只会想到暴力的思路,甚至有的题连暴力都打不出来,但是这次在考场上我已经有了自己的一些想法,有了一个深入思考 ...
随机推荐
- 数据结构之Set | 让我们一块来学习数据结构
数组(列表).栈.队列和链表这些顺序数据结构对你来说应该不陌生了.现在我们要学习集合,这是一种不允许值重复的顺序数据结构.我们将要学到如何创建集合这种数据结构,如何添加和移除值,如何搜索值是否存在.你 ...
- SAP ABAP ALV 颜色设置(两个ALV函数例子) 列 行 单元格
@[TOC](设置ALV颜色)# 前言淦! 要求花花绿绿的ALV ,那就淦他! 需要的参数和对应颜色放在最后.稍微改改就能用. 介绍两个常用的ALV函数实现1.REUSE_ALV_GRID_DISPL ...
- C#中的委托(Update)
什么是委托? 委托(delegate)是一种托管方法的数据结构,它是一种引用类型,是对方法的引用.如果说int,string等是对数据类型的定义,那么委托就类似于对"方法类型"的定 ...
- 【近取 Key】Alpha - 项目展示
项目与团队亮点 一.团队成员与分工简介 成员组成与分工 本团队由 6 名成员组成,其中有 3 名 PM,2 名后端开发人员与 4 名前端开发人员,由于组内成员数量有限,因此所有 PM 均需同时兼领开发 ...
- C#·JSON的处理和解析
阅文时长 | 0.34分钟 字数统计 | 309.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『C#·JSON的处理和解析』 编写人 | SCscHero 编写时间 | 2021 ...
- java基础——参数的应用
命令行传递参数(少用) 有时候,你希望运行一个程序时,在传递给它信息.这个时候,要靠 传递命令行 参数 给main()函数实现. package com.dong.method;public cla ...
- [bug] kibana:prevMsg":"Request Timeout after 3000ms
ES启动问题,内存不足 https://blog.csdn.net/qq_40907977/article/details/104499178 修改ES启动内存 https://blog.csdn.n ...
- CSS元素的盒类型
一.css简介 CSS是Cascading Style Sheet的缩写,中文称层叠样式表.HTML中的元素都有着自己的属性和默认样式,CSS控制HTML内标签显示不同布局样式.控制对应html标签颜 ...
- CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上
一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...
- Jira&Confluence服务器安装
1.Mysql安装 参考https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html 创建相应的数据库 CREAT ...