JLOI2016 方

bzoj4558

真是一道非常excited的題目啊…JLOI有毒

題目大意:給一個(N+1)*(M+1)的網格圖,格點坐標為(0~N,0~M),現在挖去了K個點,求剩下多少個正方形(需要注意的是正方形可以是斜著的,多斜都可以)

N,M<=10^6,K<=2*10^3。

首先我們發現有一個非常感人的K=0部分分…

我們考慮K=0怎么做。

對于一個形如這樣的正方形,我們叫它(a,b)正方形好了。

image

我們可以很容易地發現一個(a,b)正方形實際上要占下(a+b)*(a+b)這么大一塊網格。

然后我們考慮a+b的大小,這樣a就是[0,a+b]這么大,這樣就可以得到一個答案。

代碼如下:

image

現在我們發現,有了這些障礙物,我們只要能求出總共的正方形個數、經過一個障礙點的正方形個數、經過兩個障礙點的正方形個數、經過三個點的、經過四個點的即可。

經過三個和經過四個直接二分查找一下顯然是trivial的,經過兩個點的要考慮是作為邊往兩側延伸和作為對角線的情況,也比較trivial。

總共的正方形個數我們已經求出來了,現在我們就要考慮經過某一個障礙點的正方形個數。

對于一個點和它相關的只有四個屬性,u,d,l,r對吧。

image

首先我們考慮直的正方形,即(0,x)或(x,0)正方形,因為這類正方形容易被重復統計。

image

容易發現這類正方形個數為min(u,l)+min(u,r)+min(l,d)+min(d,r)。

其它的正方形顯然都是在四個象限中某兩個相鄰象限的。

image

為了簡化起見,我們先考慮l,r,d這一象限的。

還是一樣,設正方形為(a,b)正方形,我們枚舉a+b,假設a+b=c。

因為正方形不是直的,所以a,b≠0。

現在我們考慮求出a的取值范圍。

容易發現a<=r,a<=c-1,a>=1,a>=c-l(由于b<=l)。

那么我們可以列出一個形如這樣的式子來計算:

image

這樣顯然不夠優秀,我們可以人工分類討論一下…

額其實注意到當r=c-1時c=r+1,當c-l=1時c=l+1,那么min和max的兩個“分界點”是l+1和r+1,在分界點中間顯然都是一些一次函數,那么就都是等差數列,于是我們就可以避免人工分類討論了。

image

有了這個函數calc(l,r,d),那么calc(u,d,l,r)顯然就等于

image

一些奇怪的細節詳見代碼…

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll;
#define MOD 100000007
ll calc(ll l,ll r,ll d)
{if(!l||!r||!d) return 0;ll ans=0;ll upp=min(l+r,d);ll ps[3]={l+1,r+1,upp};sort(ps,ps+3);ll cl=1;for(int i=0;i<3;i++){ll cr=ps[i];if(cr>upp) break;if(cr<2||cl==cr) continue;++cl;ll vl=min(r,cl-1)-max(cl-l,1LL)+1;ll vr=min(r,cr-1)-max(cr-l,1LL)+1;ans+=(vl+vr)*(cr-cl+1)/2;ans%=MOD;cl=cr;}return ans;
}
ll calc(ll u,ll d,ll l,ll r)
{return calc(u,d,l)+calc(u,d,r)+calc(l,r,u)+calc(l,r,d)+min(u,r)+min(u,l)+min(d,l)+min(d,r);
}
typedef pair<ll,ll> pll;
pll ps[233333];
#define X first
#define Y second
ll n,m,k,ans=0;
bool ok(pll a)
{return a.X>=0&&a.X<n&&a.Y>=0&&a.Y<m;
}
ll tointt(double x)
{if(fabs(x-ll(x+0.5))<1e-5) return x+0.5;return -1;
}
double chk(double x,double y)
{ll xx=tointt(x),yy=tointt(y);if(xx>=0&&xx<n&&yy>=0&&yy<m) return 1;return 0;
}
int main()
{cin>>n>>m>>k; ++n; ++m;ll cnt3=0,cnt4=0;for(ll g=1;g<=n&&g<=m;g++) ans+=(n-g)%MOD*(m-g)%MOD*g%MOD, ans%=MOD;for(int i=1;i<=k;i++){ll x,y;scanf("%lld%lld",&x,&y);ans-=calc(x,n-1-x,y,m-1-y);ans%=MOD;ps[i]=pll(x,y);}sort(ps+1,ps+1+k);for(int i=1;i<=k;i++){for(int j=i+1;j<=k;j++){do{double mx=(ps[i].X+ps[j].X)/2.0,my=(ps[i].Y+ps[j].Y)/2.0;double dx=ps[i].X-mx,dy=ps[i].Y-my;if(chk(mx-dy,my+dx)&&chk(mx+dy,my-dx)) ans++;}while(0);for(int p=-1;p<=1;p+=2){ll dx=ps[j].X-ps[i].X,dy=ps[j].Y-ps[i].Y;pll n1=pll(ps[j].X-dy*p,ps[j].Y+dx*p);pll n2=pll(ps[i].X-dy*p,ps[i].Y+dx*p);if(ok(n1)&&ok(n2));else continue;ans++;int cp=0;if(binary_search(ps+1,ps+1+k,n1)) ++cp;if(binary_search(ps+1,ps+1+k,n2)) ++cp;if(cp==1) cnt3++;else if(cp==2) cnt3++, cnt4++;}}}ans-=cnt3/2; ans-=cnt4/4;printf("%d\n",int(((ans%MOD)+MOD)%MOD));
}

轉載于:https://www.cnblogs.com/zzqsblog/p/5493655.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257187.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opencv 直方圖反向投影

轉載至&#xff1a;http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html 直方圖反向投影式通過給定的直方圖信息&#xff0c;在圖像找到相應的像素分布區域&#xff0c;opencv提供兩種算法&#xff0c;一個是基于像素的&#xff0c;一個是基于塊的。 使用方法不寫了…

request請求在Struts2中的處理步驟

2019獨角獸企業重金招聘Python工程師標準>>> 一個請求在Struts2框架中的處理大概分為以下幾個步驟 1 客戶端初始化一個指向Servlet容器&#xff08;例如Tomcat&#xff09;的請求 2 這個請求經過一系列的過濾器&#xff08;Filter&#xff09;&#xff08;這些過濾…

vs聯合torch,ZED相機api,opencv建立C++項目

ZED相機api下載及cmake教程 generate產生工程文件后打開&#xff0c;配置如下&#xff1a; 將ZED項目作為啟動項 然后在main.cpp中寫入自己的工程代碼即可&#xff0c;運行也在release X64下進行 注&#xff1a;cmake之前源文件下main.cpp&#xff0c;也就是tutorial 1 - h…

POJ 2186

//在一張有向無環圖G&#xff0c;圖G會包含很多環&#xff08;環里面的點是等價的&#xff09;&#xff0c; //當然可以把環縮成一個點&#xff08;利用tarjan縮點&#xff09;&#xff0c; //形成一棵樹&#xff0c;題目要求是求除他以外的點都指向他&#xff0c;也就是只有一…

使用DataGridView數據窗口控件,構建用戶快速輸入體驗

使用DataGridView數據窗口控件&#xff0c;構建用戶快速輸入體驗 在“隨風飄散” 博客里面&#xff0c;介紹了一個不錯的DataGridView數據窗口控件《DataGridView數據窗口控件開發方法及其源碼提供下載》&#xff0c;這種控件在有些場合下&#xff0c;還是非常直觀的。因為&…

pip安裝

下載pip安裝包&#xff0c;解壓。復制到C:\Users\administrator\下&#xff0c;用cmd打開當前文件夾&#xff0c;用Python安裝&#xff0c; Python setup.py install 安裝完之后記得把Python根目錄下的scripts也放在環境變量里。 以上是我pip安裝的成功例子&#xff0c;可能不…

深入剖析授權在WCF中的實現[共14篇]

I、身份&#xff08;Identity&#xff09;與安全主體&#xff08;Security Principal&#xff09; 從兩個重要的概念談起&#xff1a;Identity與Principal[上篇] 從兩個重要的概念談起&#xff1a;Identity與Principal[下篇] WCF的三種授權模式 II、Windows用戶組授權 基于Wind…

sqlserver 查看鎖表,解鎖

查看被鎖表&#xff1a; 代碼如下 復制代碼 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_typeOBJECT spid 鎖表進程 tableName 被鎖表名 [more] 解鎖&#xff1a; 創建一個臨時Table 代碼如下…

json2.js參考

json2.js使用參考 json2.js提供了json的序列化和反序列化方法&#xff0c;能夠將一個json對象轉換成json字符串&#xff0c;也能夠將一個json字符串轉換成一個json對象。<html><head><script type"text/javascript" src"jquery.js"><…

手把手教你用1行代碼實現人臉識別 -- Python Face_recognition

2019獨角獸企業重金招聘Python工程師標準>>> 環境要求&#xff1a; Ubuntu17.10Python 2.7.14環境搭建&#xff1a; 1. 安裝 Ubuntu17.10 > 安裝步驟在這里 2. 安裝 Python2.7.14 (Ubuntu17.10 默認Python版本為2.7.14) 3. 安裝 git 、cmake 、 python-pip # 安裝…

pip安裝的庫導入pycharm中

用pip安裝了一些庫&#xff0c;但pycharm中卻沒有&#xff0c;解決方法是

javascript數組淺談1

最近心血來潮要開始玩博客了&#xff0c;剛好也在看數組這塊內容&#xff0c;第一篇就只好拿數組開刀了&#xff0c;自己總結的&#xff0c;有什么不對的地方還請批評指正&#xff0c;還有什么沒寫到的方面也可以提出來我進行完善&#xff0c;謝謝~~ 首先&#xff0c;大概說說數…

一個關于解決序列化問題的編程技巧

在前一篇文章中我曾經說過&#xff0c;現在正在做一個小小的框架以實現采用統一的API實現對上下文&#xff08;Context&#xff09;信息的統一管理。這個框架同時支持Web和GUI應用&#xff0c;并支持跨線程傳遞和跨域傳遞&#xff08;這里指在WCF服務調用中實現客戶端到服務端隱…

踩坑之路anaconda創建虛擬環境

渾渾噩噩的過了三年渣碩生涯&#xff0c;雖然說自己是搞圖像的&#xff0c;但基本是一些機器視覺的東西&#xff0c;最近突然想好好搞搞深度學習這方面&#xff0c;想著那就先搭搭環境跑個demo吧&#xff0c;經歷了好多莫名其妙的踩坑操作&#xff0c;demo跑的終于沒bug了&…

IP多播技術及其應用

隨著全球互聯網&#xff08;Internet&#xff09;的迅猛發展&#xff0c;上網人數正以幾何級數快速增長&#xff0c;以因特網技術為主導的數據通信在通信業務總量中的比列迅速上升&#xff0c;因特網業務已成為多媒體通信業中發展最為迅速、競爭最為激烈的領域。Internet網絡傳…

【轉載】惱人的函數指針(一)

本文轉載自: http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html#undefined> 這篇是為了加深記憶所寫。發現&#xff0c;很多知識若不經過反復的琢磨和動手實踐&#xff0c;是很難記得住的。 1&#xff09; 函數指針的初始化。 函數如下&#xff1a; int Com…

dns服務器未響應

昨天還好好的&#xff0c;今天打開電腦顯示DNS服務器為響應。 解決辦法&#xff1a;右擊電腦下方圖標欄——打開Windows任務管理器——服務——服務&#xff08;s&#xff09;——找到DNS client和DHCP client——右擊重啟

php分頁原理

<?php 1.分頁原理所需數據&#xff1a; 總記錄數&#xff1a; $records mysql_num_rows() 每頁顯示&#xff1a; $pagesize 人為定義10 總頁數&#xff1a; $pages $records/$pagesize 當前頁&#xff1a; $page 自己選擇2.分頁的sql語句&#xff1a; SELECT * F…

從客戶端(CourseIssueContent=P財務審計師崗位認證招生簡章BR...)中檢測到有潛在危險的 Request.Form 值。...

說明: 請求驗證過程檢測到有潛在危險的客戶端輸入值&#xff0c;對請求的處理已經中止。該值可能指示危及應用程序安全的嘗試&#xff0c;如跨站點的腳本攻擊。通過在 Page 指令或 配置節中設置 validateRequestfalse 可以禁用請求驗證。但是&#xff0c;在這種情況下&#xff…

ubuntu安裝pytorch鏡像修改及下載

ubuntu安裝pytorch鏡像修改及下載 下載pytorch下載太慢&#xff0c;搞了很長時間&#xff0c;終于改好鏡像能快速下載了&#xff0c;記錄以下。 1.在/home/用戶名/ 下找到/.condarc 文件&#xff0c;可能需要你右擊鼠標顯示隱藏文件才能顯示&#xff0c; 2.把內容修改為清華等鏡…