博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.22考试 crf的视察 题解
阅读量:5827 次
发布时间:2019-06-18

本文共 1164 字,大约阅读时间需要 3 分钟。

  这道题当时第一反应就是一道典型的NOIP第一题的难度,绝对要A掉,不然分数一定会被拉开。

  然后就开始分析,暴力是一开始想的是用二维树状数组打加上暴力枚举长度,然而这道题满足二分性质,所以时间复杂度就是log n^3*n^2,还是会T然后就发现完全可以不用树状数组,直接n^2预处理统计起来然后log n* n^2二分答案并验证就可以了。大概从考试开始到打完不到17分钟吧,个人感觉还是可以的。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #define N 200511 using namespace std;12 int n,m,a[N][N],sum[N][N];13 bool check(int L)14 {15 int t=L*L;16 for(int i=L;i<=n;i++)17 {18 for(int j=L;j<=m;j++)19 {20 if(sum[i][j]-sum[i-L][j]-sum[i][j-L]+sum[i-L][j-L]==t)21 return 1;22 }23 }24 return 0;25 }26 int main()27 {28 scanf("%d%d",&n,&m);29 for(int i=1;i<=n;i++)30 {31 for(int j=1;j<=m;j++)32 {33 scanf("%d",&a[i][j]);34 }35 }36 for(int i=1;i<=n;i++)37 {38 for(int j=1;j<=m;j++)39 {40 sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j];41 }42 }43 int li=0,ri=min(n,m);44 while(li<=ri)45 {46 int mid=(li+ri)>>1;47 if(check(mid)) li=mid+1;48 else ri=mid-1;49 }50 printf("%d\n",li-1);51 return 0;52 }
View Code

转载于:https://www.cnblogs.com/liutianrui/p/7581745.html

你可能感兴趣的文章
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
第四章 mybatis批量insert
查看>>
Java并发框架——什么是AQS框架
查看>>
【数据库】
查看>>
Win配置Apache+mod_wsgi+django环境+域名
查看>>
linux清除文件内容
查看>>
WindowManager.LayoutParams 详解
查看>>
find的命令的使用和文件名的后缀
查看>>
Android的Aidl安装方法
查看>>
Linux中rc的含义
查看>>
曾鸣:区块链的春天还没有到来| 阿里内部干货
查看>>
如何通过Dataworks禁止MaxCompute 子账号跨Project访问
查看>>
js之无缝滚动
查看>>
Django 多表联合查询
查看>>
logging模块学习:basicConfig配置文件
查看>>
Golang 使用 Beego 与 Mgo 开发的示例程序
查看>>
+++++++子域授权与编译安装(一)
查看>>