luogu 1369
给出平面上的n个点,请找出一个边与坐标轴平行的矩形,使得它的边界上有尽量多的点
模拟退火题解
$n^2$ 处理每行的前缀和与每列的前缀和
退火50次即可
#include <bits/stdc++.h> const int N = ; int n, A[N][N];
int sum_h[N][N], sum_l[N][N];
int Max_n = , Max_m = ; #define gc getchar() inline int read() {
int x = ;
char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} #define DB double const DB Max_tmp = , Del = 0.98; int Get_ans(int l, int r, int u, int d) {
if(l == r && u != d) {
return sum_l[d][l] - sum_l[u - ][l];
} else if(l != r && u == d) {
return sum_h[u][r] - sum_h[u][l - ];
} else if(l == r && u == d) {
return A[l][u];
} else {
int ret = ;
ret += (sum_h[u][r] - sum_h[u][l - ])
+ (sum_h[d][r] - sum_h[d][l - ])
+ (sum_l[d][l] - sum_l[u - ][l])
+ (sum_l[d][r] - sum_l[u - ][r]);
if(A[u][l]) ret --;
if(A[u][r]) ret --;
if(A[d][l]) ret --;
if(A[d][r]) ret --;
return ret;
}
} inline int MNTH() {
DB Now_tmp = Max_tmp;
int l = rand() % Max_m + , r = rand() % Max_m + , u = rand() % Max_n + , d = rand() % Max_n + ;
int Now_ans = Get_ans(l, r, u, d);
while(Now_tmp > 0.01) {
int l_ = l, r_ = r, u_ = u, d_ = d;
int opt = rand() % + ;
if(opt == ) l_ = rand() % Max_m + ;
else if(opt == ) r_ = rand() % Max_m + ;
else if(opt == ) u_ = rand() % Max_n + ;
else d_ = rand() % Max_n + ;
int Ls_ans = Get_ans(l_, r_, u_, d_);
if(Ls_ans > Now_ans || (Ls_ans < Now_ans && exp((Ls_ans - Now_ans) / Now_tmp) * RAND_MAX) >= rand())
Now_ans = Ls_ans, l = l_, r = r_, u = u_, d = d_;
Now_tmp *= Del;
}
return Now_ans;
} int main() {
srand(time() + );
n = read();
for(int i = ; i <= n; i ++) {
int x = read(), y = read();
A[x][y] = ;
Max_n = std:: max(Max_n, x), Max_m = std:: max(Max_m, y);
}
for(int i = ; i <= Max_n; i ++)
for(int j = ; j <= Max_m; j ++)
sum_h[i][j] = sum_h[i][j - ] + A[i][j];
for(int i = ; i <= Max_m; i ++)
for(int j = ; j <= Max_n; j ++)
sum_l[j][i] = sum_l[j - ][i] + A[j][i];
int T = ;
int Answer = -;
for(; T; T --) Answer = std:: max(Answer, MNTH());
printf("%d", Answer);
return ;
}
luogu 1369的更多相关文章
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [luogu P2170] 选学霸(并查集+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- 1369 xth 砍树
1369 xth 砍树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个凉爽的夏夜,xth 和 ...
- Luogu 考前模拟Round. 1
A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...
- 1369 - Answering Queries(规律)
1369 - Answering Queries PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 M ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
- CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)
CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...
随机推荐
- T-SQL学习笔记
学习T-SQL时记录的笔记,记得并不全也不详细 if和while语句 declare @age int select @age = DATEDIFF(year,stuAge,getdate()) fr ...
- c++实现双端队列
在使用c++容器的时候其底层如何实现 例如 vector 容器 :是一个内存可以二倍扩容的向量容器,使用方便但是对内存要求严格,弊端明显 list 容器 : 双向循环链表 deq ...
- go 数据渲染到html页面 02
渲染到浏览器页面 //把数据渲染到浏览器 package main import ( "fmt" "text/template" "net/http& ...
- 偶数矩阵 Even Parity,UVa 11464
题目描述 Description 给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.如图所示的矩阵至少要把3个 ...
- docker第二章--数据管理
- JS实现倒计时效果,并退出系统
背景:由于单点登录后,一直在本系统操作,可是门户体统的会话失效时间有30分钟,所以30分钟后,需要重新登录系统才可以进行操作. 方法:想过在本系统中的每个操作都先跟门户系统进行交互,渠道refresh ...
- Qt定时器
PS: 本案例使用的是Qt 4.8.4版本,不同版本代码可能会有差异. 第一步: // 重写此虚函数(继承自QObject) virtual void timerEvent(QTimerEvent* ...
- BKP和RTC
Stm32内部有多个BKP寄存器,在主电源被切断或者系统产生复位的时候,BKP寄存器仍然可以利用备用电源的支持保持其重要内容. BKP在实际应用中可以存入重要数据,防止被恶意查看. BKP有入侵检测, ...
- [LeetCode] 342. 4的幂 ☆(是否4 的幂)
描述 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16输出: true示例 2: 输入: 5输出: false 进阶:你能不使用循环或者递归 ...
- RestFramework之频率组件
一.频率组件的使用 频率组件的存在对我们这web开发有着很大的影像,它的作用就是限制用户在一段时间内访问的次数. 下面让我们介绍一下频率组件怎样使用 1.首先需要导入 from rest_framew ...