一套题

养花

题解

分块\主席树

这里我用的是主席树

查询分段$1-(k-1)$找最大的,能向右找就向右找

        for(ll nowl=1,nowr=k-1;nowl<=maxx;nowl+=k,nowr+=k,nowr=min(nowr,maxx)){if(ans==mod-1) break;chose(rt[r],rt[l-1],nowl,nowr,1,maxx);}

复杂度分析,调和级数$√n*log(n)$

代码

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rs(x) tr[x].son[1]
#define ls(x) tr[x].son[0]
#define A 10000000
struct tree{ll son[2],sz;
}tr[A];
ll tot,n,m,ans,maxx,mod;
ll a[500000],rt[500000];
void insert(ll &p,ll v,ll num,ll l,ll r){if(!p) p=++tot;if(l==r) {tr[p].sz=tr[v].sz+1;return ;}ll mid=(l+r)>>1;ll opt=num>mid,L,R;if(opt) L=mid+1,R=r;else L=l,R=mid;tr[p].son[opt^1]=tr[v].son[opt^1];insert(tr[p].son[opt],tr[v].son[opt],num,L,R);tr[p].sz=tr[ls(p)].sz+tr[rs(p)].sz;
}
void find(ll p,ll v,ll l,ll r){if(r%mod<ans) return ;
//    printf("l=%d r=%d\n",l,r);if(l==r){ans=max(ans,l%mod);return ;}ll mid=(l+r)>>1;if(tr[rs(p)].sz-tr[rs(v)].sz) find(rs(p),rs(v),mid+1,r);else if(tr[ls(p)].sz-tr[ls(v)].sz)find(ls(p),ls(v),l,mid);
}
void chose(ll p,ll v,ll ql,ll qr,ll l,ll r){if(tr[p].sz-tr[v].sz==0)return ;if(l>=ql&&r<=qr){find(p,v,l,r);return ;}ll mid=(l+r)>>1;if(mid>=ql) chose(ls(p),ls(v),ql,qr,l,mid);if(mid<qr) chose(rs(p),rs(v),ql,qr,mid+1,r);
}
int main(){scanf("%d%d",&n,&m);for(ll i=1;i<=n;i++){scanf("%d",&a[i]);maxx=max(a[i],maxx);}for(ll i=1;i<=n;i++){insert(rt[i],rt[i-1],a[i],1,maxx);}for(ll i=1,l,r,k;i<=m;i++){scanf("%d%d%d",&l,&r,&k);ans=0;mod=k;for(ll nowl=1,nowr=k-1;nowl<=maxx;nowl+=k,nowr+=k,nowr=min(nowr,maxx)){if(ans==mod-1) break;chose(rt[r],rt[l-1],nowl,nowr,1,maxx);}printf("%d\n",ans);}
}

View Code

折射

题解

$n^2,dp$

$f[i][0/1]$表示向左延伸的光线,向右延伸的光线

按照$x$排序,然后考虑转移

枚举比当前点小的点$j$

若$j.y>i.y$

$f[j][1]+=f[i][0]$

$j.y<i.y$

$f[i][0]+=f[j][1]$

你会发现这样转移会有不和法的

不要容斥,更改枚举顺序从大到小枚举

设最上点$x$,中间点为$y$,下面点为$z$

假设这次$y$贡献要加$1$,$x$加上$f[y]$如果是逆序就没加上当前贡献

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 6100
const ll mod=1e9+7;
ll f[A][2];
ll n,ans;
struct node{ll x,y;friend bool operator < (const node &a,const node &b){return a.x<b.x;}
}poi[A];
int main(){scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld",&poi[i].x,&poi[i].y);}sort(poi+1,poi+n+1);for(ll i=1;i<=n;i++){f[i][0]=f[i][1]=1;for(ll j=i-1;j>=1;j--){if(poi[j].y>poi[i].y)(f[j][1]+=f[i][0])%=mod;else (f[i][0]+=f[j][1])%=mod;}}for(ll i=1;i<=n;i++){(ans+=f[i][0]+f[i][1])%=mod;}ans-=n;printf("%lld\n",ans);
}

View Code

画作(同bzoj2638)

题解

轮流染色

将同色方块缩点建图
枚举每个点为根求bfs树
按深度从深至浅顺序染色
树的深度-(最深叶节点为白色?1:0)为以这个点为中心染色的最少操作次数

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 55
char c[A][A];
ll dis[A*10000],head[A*10000],nxt[A*10000],ver[A*10000],col[A*10000],id[A][A];
ll n,m,tot,ide,mx=0,ans=0x7fffffffff;
deque<ll >q;
void add(ll x,ll y){
//    printf("x=%lld y=%lld\n",x,y);nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;
}
ll ok(ll x,ll y){if(x>=1&&x<=n&&y>=1&&y<=m) return 1;return 0;
}
const ll nowx[5]={0,1,0,0,-1};
const ll nowy[5]={0,0,1,-1,0};
void dfs(ll x,ll y,ll now){
//    printf("x=%lld y=%lld now=%lld c[x][y]-'0'=%lld ide=%lld\n",x,y,now,1ll*(c[x][y]-'0'),ide);if(id[x][y]||c[x][y]-'0'!=now)    return ;id[x][y]=ide;
//    printf("n=%lld m=%lld\n",n,m);for(ll i=1;i<=4;i++){ll xnow=nowx[i]+x,ynow=nowy[i]+y;
//        printf("x=%lld y=%lld xnow=%lld ynow=%lld\n",x,y,xnow,ynow);if(ok(xnow,ynow))dfs(xnow,ynow,now);}
}
int main(){scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++){scanf("%s",c[i]+1);}for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){if(!id[i][j]){col[++ide]=c[i][j]-'0';dfs(i,j,c[i][j]-'0');}}}
/*    for(ll i=1;i<=n;i++,puts("")){for(ll j=1;j<=m;j++){printf("%lld",id[i][j]);}}
*/    for(ll i=1;i<=n;i++)for(ll j=1;j<m;j++)if(id[i][j]!=id[i][j+1]) add(id[i][j],id[i][j+1]),add(id[i][j+1],id[i][j]);for(ll i=1;i<n;i++)for(ll j=1;j<=m;j++)if(id[i][j]!=id[i+1][j])add(id[i][j],id[i+1][j]),add(id[i+1][j],id[i][j]);for(ll i=1;i<=ide;i++){for(ll j=1;j<=ide;j++) dis[j]=0x7ffffffff;q.clear();mx=0;q.push_back(i);dis[i]=0;while(!q.empty()){ll x=q.front();q.pop_front();
//            printf("x=%lld col=%lld\n",x,col[i]);if(dis[x]>mx) mx=dis[x];for(ll k=head[x];k;k=nxt[k]){ll y=ver[k];
//                printf("x=%lld y=%lld col=%lld dis[x]=%lld dis[y]=%lld mx=%lld\n",x,y,col[i],dis[x],dis[y],mx);if(dis[y]>dis[x]+1){dis[y]=dis[x]+1;        q.push_back(y);}}}if(col[i]==1&&!(mx&1)) mx++;if(col[i]==0&&(mx&1)) mx++;if(mx<ans) ans=mx;}printf("%lld\n",ans);
}

View Code

蔬菜

裸二维莫队

施工

题解

模拟\dp

这个dp真是神仙

联盟

题解

首先题目要求得就是

转载于:https://www.cnblogs.com/znsbc-13/p/11579647.html

NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」相关推荐

  1. csp-s模拟测试49(9.22)养花(分块/主席树)·折射(神仙DP)·画作

    最近有点头晕........... T1 养花 考场我没想到正解,后来打的主席树,对于每个摸数查找1-(k-1),k-(2k-1)...的最大值,事实上还是很容易被卡的但是没有数据好像还比较友善, 对 ...

  2. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  3. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

  4. NOIP模拟测试21「折纸·不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  5. NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

    待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005]; ...

  6. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  7. NOIP模拟测试14「旋转子段·走格子·柱状图」

    旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...

  8. NOIP模拟测试13「矩阵游戏·跳房子·优美序列」

    矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点* ...

  9. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

最新文章

  1. springmvc常用注解标签详解
  2. Python基础之 Django视图和 URL 配置
  3. HTML——ASP的 Response.write 方法输出中文乱码解决方案
  4. SQL查询除了某一列的其他列
  5. HCTF 2018:WarmUp(源代码详解)
  6. TypeScript里对数组元素的自定义属性排序的实现原理
  7. 人工智能迎来寒冬,自动驾驶汽车发展受阻
  8. python解决一些错误换行问题
  9. Python编程的例子----股票数据接口
  10. AD工程文件与原理图、PCB文件的储存关系
  11. python中国大学慕课平台_乐学Python,中国大学MOOC(慕课)答案公众号搜题
  12. 阴阳师服务器维护3月14,3月14日阴阳师体验服更新:三个限定新式神
  13. SpringBoot 微信点餐系统学习记录六-订单表和订单详情表的后端开发
  14. 百行代码发射红心,程序员何愁命不中女朋友!
  15. 发送邮件服务器连接错误什么意思,SMTP 错误(-1) :连接服务器失败
  16. 喜羊羊与灰太狼——深度优先搜索
  17. codevs2181 田忌赛马
  18. Acme Corporation UVA11613 网络流
  19. 网络探测和诊断工具 - mtr
  20. 腾讯QQ空间技术总监,T13专家被裁,原因令人唏嘘

热门文章

  1. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...
  2. 混合模式商城的可经销商品池
  3. python排序sorted_sorted排序的两个方法 - Python
  4. python卸载module_Python学习笔记
  5. php文件上传漏洞waf,文件上传绕过WAF
  6. vue 传递多行数据_vue父组件向子组件传递多个数据的实例
  7. 新手学习C语言编程的8个致命错误,你中招了吗?
  8. android+动画+锯齿,Android当中的防锯齿(Bitmap Canvas )
  9. java怎么兼容switch_java – Switch语句给出了不兼容类型错误
  10. [渝粤教育] 中国地质大学 结构力学 复习题