【bzoj5085】最大(二分+乱搞)
生活随笔
收集整理的這篇文章主要介紹了
【bzoj5085】最大(二分+乱搞)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目傳送門:https://www.lydsy.com/JudgeOnline/problem.php?id=5085
這道題我們可以先二分答案,然后轉(zhuǎn)化為判定是否有四角權(quán)值>=mid的矩形。
我們可以發(fā)現(xiàn),若4個點可以構(gòu)成矩形,那么這四個點一定兩兩在同一行,同一列。
于是我們可以把每一行的合法點處理出來,在里面枚舉點對。若有一個點對出現(xiàn)了兩次,那么就說明在上面的某一行的相同列有兩個合法點,即能構(gòu)成矩形。
因為找到兩對相同的合法點對就可以反回結(jié)果,而合法點對的規(guī)模是$ O(m^2) $的,因此總時間復(fù)雜度$ O(m^2\log(n)) $。
· (然而我因為讀入寫錯tle了好幾發(fā)。。。qwq)
代碼:
#include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<map> #define ll long long #define ull unsigned long long #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) #define lowbit(x) (x& -x) #define mod 10000007 #define inf 0x3f3f3f3f #define eps 1e-10 #define maxn 1010 inline char nc(){static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } inline ll read(){ll tmp=0; char c=nc(),f=1; for(;c<'0'||'9'<c;c=nc())if(c=='-')f=-1; for(;'0'<=c&&c<='9';c=nc())tmp=(tmp<<3)+(tmp<<1)+c-'0'; return tmp*f;} inline ll power(ll a,ll b){ll ans=1; for(;b;b>>=1){if(b&1)ans=ans*a%mod; a=a*a%mod;} return ans;} inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;} using namespace std; int a[maxn][maxn],vis[maxn][maxn]; int x[maxn]; int n,m; int check(int mid) {memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){int tot=0;for(int j=1;j<=m;j++)if(a[i][j]>=mid)x[++tot]=j;for(int j=1;j<tot;j++)for(int k=j+1;k<=tot;k++)if(vis[x[j]][x[k]])return 1;else vis[x[j]][x[k]]=1;}return 0; } int main() {n=read(); m=read();int l=inf,r=-inf;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=read(),l=min(l,a[i][j]),r=max(r,a[i][j]);while(l<r){int mid=(l+r+1)>>1;if(check(mid))l=mid;else r=mid-1;}printf("%d\n",l); } bzoj5085Tips:聽說找到權(quán)值最大的前4n個點直接爆枚就行了?然而我不會證。
轉(zhuǎn)載于:https://www.cnblogs.com/quzhizhou/p/9598022.html
總結(jié)
以上是生活随笔為你收集整理的【bzoj5085】最大(二分+乱搞)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读Google是如何做测试的
- 下一篇: 【Leetcode】62. 不同路径