题意解释:将图标按列排布,保证每个图标的上方和左方都有图标(就像电脑图标一样),并在询问的过程中改变图标,要求出最小合法步数

模拟写法:在读入和处理中维护四个变量:cnt,cou,a,b,分别表示*的总量,不需要移动图案数,

需要放满的前a-1列,第a列需要放满前b行,最终的答案就是cnt-cou。

**注意**:对于每一次查询都需要保留改动后的图标。

#include<iostream>
#include<cstring>
#include<algorithm>#define endl '\n'using namespace std;const int N = 1005;
char g[N][N];
int cnt, cou;
int a, b, x, y;
int n, m, q;int main()
{cin >> n >> m >> q;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {cin >> g[i][j];if (g[i][j] == '*')cnt++;}int a = cnt / n, b = cnt % n;if (b == 0 && a != 0)a--, b = n;a++;for (int i = 1; i <= n; i++)for (int j = 1; j < a; j++)if (g[i][j] == '*')cou++;for (int i = 1; i <= b; i++)if (g[i][a] == '*')cou++;while (q--){cin >> x >> y;if (g[x][y] == '*'){cnt--;if (g[b][a] == '*')cou--;g[x][y] = '.';b--;if (b == 0)a--, b = n;if (y < a || (y == a && x <= b))cou--;}else {cnt++;b++;if (b > n)a++, b = 1;if (g[b][a] == '*')cou++;g[x][y] = '*';if (y < a || (y == a && x <= b))cou++;}cout << cnt - cou << endl;}return 0;
}

将二维坐标映射到按题意映射到一维(id=(y-1)*n+x),维护一个以*数量为元素的树状数组,题目即变成了求解cnt范围内的*数量,答案即是cnt-sum(cnt)

#include<iostream>
#include<cstring>
#include<algorithm>#define endl '\n'using namespace std;const int N = 1010, M = N * N;int tr[M];
int n, m, q;
char g[N][N];
int x, y;
int cnt;int lowbit(int x)
{return x & -x;
}void add(int u, int v)
{for (int i = u; i <= n * m; i += lowbit(i))tr[i] += v;
}int sum(int x)
{int res = 0;for(int i=x;i;i-=lowbit(i))res+=tr[i];return res;
}int get(int x, int y)
{return (y - 1) * n + x;
}int main()
{cin >> n >> m >> q;for (int i = 1; i <= n; i++)scanf("%s", g[i] + 1);for(int i=1;i<=n;i++)for (int j = 1; j <= m; j++){if (g[i][j] == '*') {add(get(i, j), 1);cnt++;}}while (q--){cin >> x >> y;if (g[x][y] == '*'){cnt--;add(get(x, y), -1);g[x][y] = '.';}else {cnt++;add(get(x, y), 1);g[x][y] = '*';}cout << cnt - sum(cnt) << endl;}return 0;
}

参考大佬的多解 (orz)

Codeforces Round #786 (Div. 3)(D~G) - 知乎D. A-B-C Sort题意: 给定三个数组, a,b,c , 初始 b,c 数组为空, 每次取出 a 数组中最右边的元素放在 b 数组的中间, a 数组全部取完后, 每次取出 b 数组最中间的元素放在 c 数组的右边, 判断最后 c 数组是否有序通…https://zhuanlan.zhihu.com/p/508679643#:~:text=F.%20Desktop%20Rearrangement%20%E6%9C%89%E4%B8%80%E4%B8%AA%20%E8%A1%8C%20%E5%88%97%E7%9A%84%E7%9F%A9%E9%98%B5%2C%20%E9%87%8C%E9%9D%A2%E6%9C%89%20%27%2A%27%2C,%E5%B0%86%20%27.%27%20%E5%8F%98%E6%88%90%20%27%2A%27%2C%20%E9%97%AE%E4%BD%A0%E6%AF%8F%E6%AC%A1%E6%93%8D%E4%BD%9C%E5%AE%8C%E5%90%8E%2C%20%E8%87%B3%E5%B0%91%E8%A6%81%E7%A7%BB%E5%8A%A8%E5%87%A0%E6%AC%A1%E4%BD%BF%E5%BE%97%E7%9F%A9%E9%98%B5%E4%B8%8A%E7%9A%84%20%27%2A%27%E5%AD%97%E7%AC%A6%2C%20%E5%85%A8%E9%83%A8%E6%8E%92%E5%88%97%E5%A5%BD

cf 1674 F. Desktop Rearrangement相关推荐

  1. CF1674 F.Desktop Rearrangement(模拟)

    传送门 这种小模拟题怎么能被评为 1800 的啊 题意 给定一个含有 0 0 0 和 1 1 1 的矩阵,需要将其中的 1 1 1 按电脑桌面进行排列(即每个 1 1 1 的左侧和上侧都为 1 1 1 ...

  2. CF1674 F. Desktop Rearrangement(二维转一维, 模拟)

    大致题意 : 给定二维字符数组, '*'代表图标, '.'代表空白, 按照电脑桌面默认的图标排序方式进行排序(即先排第一列, 再排第二列, 以此类推) , 每次操作可以任意互换两个数组元素位置, 给定 ...

  3. CF 1642 F. Two Arrays 随机 + sosdp

    文章目录 题意 思路 传送门 题意 给你nnn个长度为mmm的数组,每个数组都有一个价值wiw_iwi​,让你选出两个数组他们没有交集且价值和最大,如果没有输出−1-1−1. 2≤n≤1e5,1≤m≤ ...

  4. CF 1475 F . Unusual Matrix 思维

    传送门 大体题意:给定两个矩阵a和b,给定一个操作,这个操作可以将a矩阵任意一行或者任意一列取反,问能否将a变成b. 乍一看不是一个很难的题,但是想我这样思维不好的还是看不出来什么东西.让后看到了题解 ...

  5. cf 1504 F. Flip the Cards

    F. Flip the Cards 题意: 这个题你也可以看看,就是一个卡片正反两个数,n个卡片在桌子上摆好,你可以任意移动卡片的位置,也可以翻转卡片(翻转一次消耗1点),最终使得卡片的正面为升序,反 ...

  6. 2017.10.17 CF#441 F题 思考记录

    .果然没有题解做题感觉是不一样的. 这个F题可能是最像往常B题的题了(往常B题就是dp,还一般都不难) 首先这个是|,所以|的数越多,它一定是不降的 那么合法的一定是一个数到一个数往后的数所构成的所有 ...

  7. cf 1450 F The Struggling Contestant

    link 题意:给一长度为n的数组A,求以排列p满足A[pi],A[pi-1]不同,定义每一个排列的权值为abs(pi-pi-1) >1 的i的个数.输出满足条件排列的最小权值.无解输出-1 思 ...

  8. CF 783 F. Vlad and Unfinished Business

    原题链接: https://codeforces.com/contest/1675/problem/F 题目和18946 小美的送花线路 有相似之处.小美送花,只有把最远的结点最后送达才能用时最短. ...

  9. Dominant Indices(CF 1009 F)

    前言 记录一下长链剖分的小技巧 题目相关 链接 题目大意 一棵nnn个节点的树,定义fi,jf_{i,j}fi,j​为与iii号点距离为jjj的节点数量,对于每个iii求出一个最小的jjj满足fi,j ...

最新文章

  1. uni-app在iOS移动端页面上下滑动关闭(页面回弹问题,非刷新)
  2. java程序设计第一次作业
  3. Thinkphp5.0 多图上传名称重复BUG
  4. linux查看网卡硬件 lsw,linux系统配置管理小测试试卷答案
  5. Spring Boot项目实战:BBT版西蒙购物网
  6. python是一种什么类型的高级语言_python介绍 编程语言分类及对比 python解释器安装(多版本共存) 变量 数据类型(三种)...
  7. Android 资源和国际化
  8. IDEA搭建SpringMVC+Spring+Mybatis项目
  9. 无法安装驱动此计算机,安装Windows系统时,提示“无法在此驱动器上安装Windows”...
  10. java实现正态分布累积分布,标准正态分布变量的累积概率分布函数
  11. Unity 2D动画控制器详解
  12. WSL2 Ubuntu18.04 apt-get update失败
  13. CNN基础网络(一)
  14. Web在jsp页面中生成柱状图,折线图,饼状图
  15. 【Python】基础习题100例(51-75例)_努力做最通俗易懂版本
  16. 微信支付智联时代 微信支付场景介绍
  17. 十大蓝筹NFT近半年数据横向对比
  18. 计算机组装声卡,计算机组装与维护教程之声卡.pdf
  19. Android 多媒体框架 OpenCore(PacketVideo)介绍
  20. 拐弯抹角FALSE-实验吧

热门文章

  1. 当下适合男人用的智能手机集合-转_我是亲民_新浪博客
  2. 3D Touch (github下载源码)
  3. 【Github教程】史上最全github使用方法:github入门到精通之三
  4. docker升级至指定版本
  5. 人物专属道具--吴国
  6. mysql服务名无效怎么办_mysql服务器无效怎么办
  7. 使用NAGA分析雀魂牌谱
  8. 轨迹绘制(Matlab)
  9. 高防服务器为什么那么贵
  10. jquery validate submitHandler 提交导致死循环