首页 > 其他分享 >P12 ABC086D Checker

P12 ABC086D Checker

时间:2025-01-17 10:33:45浏览次数:1  
标签:node 取模 int ABC086D sum Checker P12

​ “执此剑,踏破混沌黑白。”

​ 隔岸相望,已然是一年半载。如今总算踏过此城。


​ 这题真是搞心态,刚开始看感觉好有意思,结果做了半天没抓住重点,一直没淦出来。

​ 首先,倒是很容易就能发现,对于坐标是可以对 \(2k\) 取模的,毕竟是个周期。然后更进一步,其实可以再化为对 \(k\) 取模,因为如果一个点 \((x,y)\) 为黑,那么 \((x-k,y)\) 一定为白。所以可以用等价条件替换。所有要求全部都处在 \(k \times k\) 的方格中了。

​ 接下来还需要想到二维前缀和,因为最容易想到的就是 \(for\) 循环直接爆力把方格给跑一边,然后看哪一种能满足最多的要求。对于每一种情况,我们需要的就是某一个矩形块中黑色或者白色要求的数目,刚好可以用二维前缀和解决。

const int N=100010,K=1005;

char c[N];
int n,k;
struct Node{
  bool c;
  int x,y;
}node[N];

int sum[K][K][2];

inline void solve(){
  for(int i=1;i<=n;++i){
    node[i].x%=(k<<1),node[i].y%=(k<<1);
    if(node[i].x>=k) node[i].x-=k,node[i].c^=1;
    if(node[i].y>=k) node[i].y-=k,node[i].c^=1;
    sum[node[i].x][node[i].y][1]+=node[i].c,
    sum[node[i].x][node[i].y][0]+=(!node[i].c);
  }
  for(int i=1;i<k;++i)
    sum[0][i][1]+=sum[0][i-1][1],sum[i][0][1]+=sum[i-1][0][1],
    sum[0][i][0]+=sum[0][i-1][0],sum[i][0][0]+=sum[i-1][0][0];
  for(int i=1;i<k;++i)
    for(int j=1;j<k;++j)
      sum[i][j][0]+=sum[i-1][j][0]+sum[i][j-1][0]-sum[i-1][j-1][0],
      sum[i][j][1]+=sum[i-1][j][1]+sum[i][j-1][1]-sum[i-1][j-1][1];
  
  int ans=0;
  for(int i=0;i<k;++i)
    for(int j=0;j<k;++j){
      int b=sum[i][j][1]+sum[k-1][k-1][1]-sum[i][k-1][1]-sum[k-1][j][1]+sum[i][j][1];
      int w=sum[i][k-1][0]-sum[i][j][0]+sum[k-1][j][0]-sum[i][j][0];
      sMax(ans,Max(w+b,n-w-b));
    }
  cout<<ans<<'\n';
}

signed main(){
  cin>>n>>k;
  for(int i=1;i<=n;++i){
    char ch;
    cin>>node[i].x>>node[i].y>>ch;
    node[i].c=(ch=='B');
  } solve();

  return 0;
}

· EOF

标签:node,取模,int,ABC086D,sum,Checker,P12
From: https://www.cnblogs.com/mfc007/p/18676423

相关文章

  • p1253
    题目描述给定一个长度为 nn 的序列 aa,要求支持如下三个操作:给定区间 [l,r][l,r],将区间内每个数都修改为 xx。给定区间 [l,r][l,r],将区间内每个数都加上 xx。给定区间 [l,r][l,r],求区间内的最大值。输入格式第一行是两个整数,依次表示序列的长度 nn 和操作的个数 ......
  • Java 8系列之重新认识HashMap12
    摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(JavaDevelopmetKit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java......
  • Java 8系列之重新认识HashMap12
    摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(JavaDevelopmetKit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java......
  • 《计算机组成及汇编语言原理》阅读笔记:p128-p132
    《计算机组成及汇编语言原理》学习第10天,p128-p132总结,总计5页。一、技术总结1.8088organizationandarchitecture8088处理器是16位电脑,寄存器是16位,数据总线(databus)是8位,地址总线是20位。(1)general-purposeregister8088处理器(processor)包含的通用寄存器有......
  • SOTA简繁中文拼写检查工具:FASPell Chinese Spell Checker 论文
    拼写纠正系列NLP中文拼写检测实现思路NLP中文拼写检测纠正算法整理NLP英文拼写算法,如果提升100W倍的性能?NLP中文拼写检测纠正Paperjava实现中英文拼写检查和错误纠正?可我只会写CRUD啊!一个提升英文单词拼写检测性能1000倍的算法?单词拼写纠正-03-leetcode......
  • 《计算机组成及汇编语言原理》阅读笔记:p121-p122
    《计算机组成及汇编语言原理》学习第8天,p121-p122总结,总计2页。一、技术总结1.memory优化(1)cachememoryremoveblankfrom"Mostcomputerssupporttwodifferentkinds(levels)ofcache:levelone(L1)cacheisbuiltintotheCPUchipitselfandrunsatCPU......
  • 《计算机组成及汇编语言原理》阅读笔记:p116-p120
    《计算机组成及汇编语言原理》学习第7天,p116-p120总结,总计5页。一、技术总结1.CPU优化(1)increaseoverallperformancenumber例如:16位电脑提升到32位电脑。(2)multiprocessingOnewaytomakecomputersmoreusefulistoallowthemtorunmorethanoneprogram......
  • SOTA简繁中文拼写检查工具:FASPell Chinese Spell Checker 论文
    拼写纠正系列NLP中文拼写检测实现思路NLP中文拼写检测纠正算法整理NLP英文拼写算法,如果提升100W倍的性能?NLP中文拼写检测纠正Paperjava实现中英文拼写检查和错误纠正?可我只会写CRUD啊!一个提升英文单词拼写检测性能1000倍的算法?单词拼写纠正-03-leetcodeedit-d......
  • P1268 树的重量
    链接:https://www.luogu.com.cn/problem/P1268原题:思路:原本的思路是通过最长边构建一棵树,然后通过记录每个横坐标的值来模拟每个边的分支。但是这样做太繁琐而且容易分类讨论失误。看了题解的一个非常巧妙的办法:类似于求LCA的思路。事实上感觉就像状态转移?类似于DP里面的......
  • USACO备考冲刺必刷题 | P1218 Superprime Rib
    学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。附上汇总贴:USACO备考冲刺必刷题|汇总-CSDN博客【题目描述】农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方......