8.18模拟:构造

文章目录

  • 前言
  • 收获
  • 考场
  • 复盘
    • T1
    • T2
    • T3
    • T4
  • 总结

前言

190分
100+0+60+30

明明是dfs专题
不太理想qwq
写了三个dfs就离谱
最不满意的是T2的爆零
其实分类讨论一下是很可做的
而且暴力还因为没开ll挂掉了…
不过毕竟构造题之前几乎没有做过
所以慢慢来吧

收获

一些构造题的trick

  1. 调整法
  2. 数学归纳法
  3. 分类讨论法
  4. 从边界极值等处缩小问题规模法
  5. 乱七八糟法

考场

先看题
数学的石头门困境重新江湖…
似乎就没有啥可做的题

在zld写在前面的难度指引+先写T1的习惯下
先看T1
(到现在似乎说是先看题结果几乎还是顺序做…)
zld果然没有骗我!
想到了把一个2*2的正方形作为基本单位单独处理
每块的最差处理次数也可以证明不超过4次
这样就ok了
但当时就想到这题代码实现可能会有些困难
应该又是道打表搬砖题
但奇怪的道路那题的阴间打表我都写过去了我还怕这个?
所以piapia就开始敲
这题我利用递归转移
自己感觉写的还是非常优美的
只需要一个操作对应的两个表和常规的4宫格tx数组即可
但我因为怕写挂自己造数据和手算输出用了好一段…
9:00

转T2
这什么玩意…
我也有些被zld的难度提示吓到了
觉得这题很可能需要按位考虑贪心的乱七八糟的
然后就越想越迷糊
最后直接开始开心的dfs
试图拿30分走人(伏笔)
9:30

开T3
又是让人没什么想法的题目
有一点直觉本题似乎很可能不会无解
(因为没有多测)
但推来推去也证明不出来
但是第二个30不超过2个讨厌的约束条件倒是推出来必定可行的策略了
然后就写了两个部分分拿60走人
10:10

看T4
又是不知从何推起的神仙题目
搞了半天除了浪费了一堆验算纸一无所获
最后又是dfs了…

复盘

T1

啊这个灯泡我觉得我点的是针不戳
很简洁
所以贴一下码awa

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=105;
const int mod=1e9+7;
int n,m;
int a[N][N];
int tot;
typedef pair<int,int>pr;
pr q[N*N<<2][4];
#define mkp make_pair
int dx[5][5]={{},{0,0,1,1},{0,0,1,1},{0,-1,-1,0},{0,-1,-1,0}};
int dy[5][5]={{},{0,1,0,1},{0,-1,-1,0},{0,0,1,1},{0,-1,0,-1}};
void work(int x,int y,int o){
//	printf("work:x=%d y=%d o=%d\n",x,y,o);tot++;for(int i=1;i<=3;i++){
//		printf("  xx=%d yy=%d\n",x+dx[o][i],y+dy[o][i]);q[tot][i]=mkp(x+dx[o][i],y+dy[o][i]);a[x+dx[o][i]][y+dy[o][i]]^=1;}
}
int tx[5]={0,0,0,1,1},ty[5]={0,0,1,0,1};
void solve(int x,int y){int cnt=a[x][y]+a[x+1][y]+a[x][y+1]+a[x+1][y+1];
//	printf("x=%d y=%d cnt=%d\n",x,y,cnt);if(cnt==0) return;else if(cnt==1){for(int i=1;i<=4;i++){int nx=x+tx[i],ny=y+ty[i];if(!a[nx][ny]){work(x+tx[i],y+ty[i],i);solve(x,y);return;}}}else if(cnt==2){for(int i=1;i<=4;i++){int nx=x+tx[i],ny=y+ty[i];if(a[nx][ny]){
//				printf("nx=%d ny=%d\n",nx,ny);work(nx,ny,i);solve(x,y);return;}}}else if(cnt==3){for(int i=1;i<=4;i++){int nx=x+tx[i],ny=y+ty[i];if(!a[nx][ny]){work(nx,ny,i);solve(x,y);return;}}}else{work(x,y,1);solve(x,y);return;}
}
int main(){freopen("bulb.in","r",stdin);freopen("bulb.out","w",stdout);int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);tot=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) scanf("%1d",&a[i][j]);}if(n%2&&m%2){if(a[n][m]) work(n-1,m-1,1);}if(m%2){for(int i=1;i<n;i+=2){if(a[i][m]&&a[i+1][m]) work(i,m-1,1);else if(a[i][m]) work(i+1,m,4);else if(a[i+1][m]) work(i,m,2);}}if(n%2){for(int j=1;j<m;j+=2){if(a[n][j]&&a[n][j+1]) work(n-1,j,1);else if(a[n][j]) work(n,j+1,4);else if(a[n][j+1]) work(n,j,3);}}for(int i=1;i<=n;i+=2){for(int j=1;j<=m;j+=2) solve(i,j);}	printf("%d\n",tot);for(int i=1;i<=tot;i++){for(int j=1;j<=3;j++) printf("%d %d ",q[i][j].first,q[i][j].second);printf("\n");}}return 0;
}
/*
5
2 2
10
11
3 3
011
101
110
4 4
1111
0110
0110
1111
5 5
01011
11001
00010
11011
10000
2 3
011
1011
4 5
11011
11100
00000
01111
*/

T2

本题的关键性质是
只要从一个偶数往上连续取4个它的异或和就是0了
从一个偶数往上连续数2个就是1
所以分类讨论即可
但k=3和r=l+1且l为奇数的细节有点恶心
感觉可能考场上就是把这个性质想到了想切也没那么容易qwq

T3

调整法
可以证明随着不断调整组内的讨厌关系组数会越来越少
这样就能够证明一直处理下去一定能找到合法解了

T4

数学归纳法
这个东西就是看出来就看出来了…
当时感觉可能会用数学归纳法
但是归纳了半天归纳不出来…
把奇数消掉后变成2n-1的想法是关键

总结

构造毕竟是新题
做的比较少
关键是对关键性质的把握
明天放假了
好耶!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P5371-[SNOI2019]纸牌【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P5371 题目大意 有nnn种牌&#xff0c;每种牌最多CCC张&#xff0c;XXX个限制形如kik_iki​种牌至少aia_iai​张。 求所有牌的序号能分成(i,i,i)(i,i,i)(i,i,i)或者(i,i1,i2)(i,i1,i2)(i,i1,i2)的若干组的方案数。 1≤n≤10…

dotnet core开源博客系统XBlog介绍

XBlog是dotnet core平台下的个人博客开源系统&#xff0c;它只需要通过Copy的方式即可以部署到Linux和windows系统中&#xff1b;如果你有安全证书那只需要简单配置一下即可提供安全的Https服务。接下来主要介绍XBlog功能、部署和基础设置。技术要点基于dotnet core平台&#x…

【做题记录】max-min+1=len 区间计数

(来源&#xff1a;XJ高质量原创题) 原题地址 弱化版&#xff1a;CF526F Pudding Monsters 弱化版 题意&#xff1a;\(n\times n\) 的棋盘上有 \(n\) 颗棋子&#xff0c;每行每列都有且仅有一颗棋子&#xff0c;求出有多少个 \(k\times k\) 的子棋盘也满足每行每列只有一颗棋子。…

【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

文章目录问题引入介绍莫队算法及其实现过程时间复杂度莫队算法适用范围莫队奇偶优化普通莫队&#xff1a;小B的询问树上莫队&#xff1a;SP10707 COT2 - Count on a tree II回滚莫队&#xff1a;[PA2011]Kangaroosupd&#xff1a;2021-08-11&#xff1a;重新对博客进行了外观美…

P2146 [NOI2015] 软件包管理器

P2146 [NOI2015] 软件包管理器 题意&#xff1a; 如果软件包 a 依赖软件包 b&#xff0c;那么安装软件包 a 以前&#xff0c;必须先安装软件包 b。同时&#xff0c;如果想要卸载软件包 b&#xff0c;则必须卸载软件包 a。 软件包之间存在依赖关系&#xff0c;除了0号软件包以…

微软 2018 开源大事记

从微软公开宣布 "Microsoft love linux" 那一刻起&#xff0c;过去的几年里&#xff0c;微软积极拥抱开源的举动我们有目共睹&#xff0c;即便有过"Linux is a cancer"这种真香警告的 flag&#xff0c;但不得不承认的是&#xff0c;微软一系列“拥抱开源”…

模板:二叉搜索树平衡树

文章目录前言二叉搜索树代码treap代码splay开点旋转splay插入查找第k大元素查找给定元素的排名前驱&后继删除完整代码练习总结前言 终于开始学这个东西了 看了好几篇博客才找到一篇可读的qwq 我曾经还以为线段树码量大…我真傻&#xff0c;真的 所谓平衡树&#xff0c;就是…

51nod2626-未来常数【树上启发式合并,线段树】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId2626 题目大意 给出nnn个点的一棵树&#xff0c;每个区间[l,r][l,r][l,r]的代价是选出这个区间中的一个点xxx使得它走到所有点然后又回到xxx的路程最短长度&#xff0c;求一个随机区间的期望代价。 1≤n…

A*,IDA*—高档次的暴搜

A*通过评价函数来判断当前状态是否可以到达最终状态(即可行性剪枝)&#xff0c;来减少不必要的搜索。 例题——P2324 [SCOI2005]骑士精神 我们通过当前不在指定位置上的棋子个数为评价函数&#xff0c;\(used\) 【评价函数值】超过了预期的值&#xff0c;便不用再线下深入搜索了…

P2486 [SDOI2011]染色

P2486 [SDOI2011]染色 题意&#xff1a; 题解&#xff1a; 与一般的树链剖分相比&#xff0c;不同点在于查询的不是路径上颜色的数量而是颜色段的数量 对于两个颜色段&#xff0c;112和221&#xff0c;两个颜色段数量都是2 如果合在一起颜色段的数量就是3&#xff0c;因为左边…

牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

文章目录T1&#xff1a;仓鼠的石子游戏题目题解代码实现T2&#xff1a;乃爱与城市拥挤程度题目题解代码实现T3&#xff1a;小w的魔术扑克题目题解代码实现T1&#xff1a;仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑&#xff0c;无聊的他们跑到一块空地上&#xff0c;空地上有…

使用PerfView监测.NET程序性能(二):Perfview的使用

在上一篇博客使用PerfView监测.NET程序性能&#xff08;一&#xff09;&#xff1a;Event Trace for Windows 中&#xff0c;我们了解了对Windows及应用程序进行性能分析的基础&#xff1a;Event Trace for Windows (ETW)。现在来看看基于ETW的性能分析工具——Perfview.exePer…

连通性相关

强联通分量 强连通&#xff1a;有向图 \(G\) 强连通表示&#xff0c;\(G\) 中任意两个结点连通。 强连通分量( Strongly Connected Components &#xff0c;简称 \(\operatorname{SCC}\) )&#xff1a;极大的 强连通子图。 Tarjan 维护了以下两个变量&#xff1a; \(dfn\) &…

CF505E-Mr. Kitayuta vs. Bamboos【贪心,二分】

正题 题目链接:https://www.luogu.com.cn/problem/CF505E 题目大意 开始一个长度为nnn的序列hhh&#xff0c;mmm天每天你可以kkk次选择一个hih_ihi​让它等于himax{hi−p,0}h_imax\{h_i-p,0\}hi​max{hi​−p,0}&#xff0c;然后结束时让每个hihiaih_ih_ia_ihi​hi​ai​&…

阶段总结:8.09-8.18 十日模拟

一图流了解一下 文章目录十日谈总结十日谈 再总结一下 8.09 搜索模拟&#xff1a;25分。…毕竟是第一天不太适应吧 &#xff08;拼命找借口&#xff09;。没有看到标题就很淦&#xff0c;就是全写挂了而已&#xff0c;已经无从谈起…hzwer的粉丝那题提醒我们不要被吓人的数据…

学习有向图和无向图的强连通分量(基本概念+割点+点双联通分量+桥+边双连通分量+全套模板【Tarjan】)

最近总是考到Tarjan&#xff0c;让我措手不及基本概念割点以及点双连通分量Tarjan法求割点推导过程代码实现Tarjan法求点双连通分量推导过程代码实现有向图的Tarjan缩点桥与边双连通分量Tarjan法求桥理论推导代码实现Tarjan法求边双连通分量理论推导代码实现前言&#xff1a;有…

.NET Core下的Spring Cloud——前言和概述

前言前几年一直在写类似dubbo&#xff0c;Spring Cloud的微服务框架辗辗转转重复了多次&#xff0c;也重构推翻了很多次&#xff0c;其中诞生了“Rabbit.Rpc”,”Go”,”RabbitCloud”等开源项目。其中不乏他人对这些项目的完善。很高兴自己的开源项目能够给他人提供思路和复用…

期望 概率DP

期望 \(x\) 的期望 \(E(x)\) 表示平均情况下 \(x\) 的值。 令 \(C\) 表示常数&#xff0c; \(X\) 和 \(Y\) 表示两个随机变量。 \(E(C)C\) \(E(C \times X)C \times E(X)\) \(E(XY)E(X)E(Y)\) 期望的线性性 \(E(XY)\) 不一定等于 \(E(X) \times E(Y)\) 期望练习&#xff1a…

CF785E Anton and Permutation

CF785E Anton and Permutation 题意&#xff1a; 对于一个长度为 n 的序列进行 k 次操作&#xff0c;每次操作都是交换序列中的某两个数。对于每一个操作&#xff0c;回答当前序列中有多少个逆序对。 1<n<200000 1<q<50000 题解&#xff1a; 动态逆序对&#x…

P5311-[Ynoi2011]成都七中【点分树,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P5311 题目大意 给出nnn个点的一棵树&#xff0c;每个节点有一个颜色&#xff0c;mmm次询问提出区间[l,r][l,r][l,r]的点构成的生成子图中xxx所在连通块的颜色数。 1≤n,m,ai≤1051\leq n,m,a_i\leq 10^51≤n,m,ai​≤105 解…