hdu6052 To my boyfriend 2017多校2
http://acm.hdu.edu.cn/showproblem.php?pid=6052
我太菜了.jpg,比賽的時候沒做出來
這種統計肯定是按數字來統計的,但我沒想清楚怎麼去重
其實只要考慮每個數字是多少個矩陣最上面一行最左邊就行了
由於我們先優先最上面一行,所以下面肯定就隨便算了,那麼向下擴充的down始終為n-i+1
然後我們再從下向上列舉每一行有多少向左l和向右r,乘起來再乘以down就行了
首先在當前行他肯定是最左的一個,那麼r=m-i+1,l就是到上一個+1的地方
然後列舉他上面的行,此時l,r都要更新了,因為我們考慮的是這個數字作為最上面一行的最左邊的矩陣,不能讓一個和他一樣的數字出現在更上面的行。lower_bound搞搞就行了,複雜度是O(n*n*m*logn)的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> p;
const int maxl=110;
int n,m;ll fz,fm;
int g[maxl][maxl];
struct node
{
int x,y,num;
}b[maxl*maxl];
vector <int> a[maxl];
inline bool cmp(const node &a,const node &b)
{
if(a.num==b.num)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
return a.num<b.num;
}
inline void prework()
{
scanf("%d%d",&n,&m);
int tot=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&g[i][j]);
b[++tot]=node{i,j,g[i][j]};
}
sort(b+1,b+1+n*m,cmp);
}
inline void mainwork()
{
int len,l,r,down,id,idx,len2,fir=1,now;fz=0;
while(fir<=n*m)
{
for(int i=1;i<=n;i++) a[i].clear();
now=fir;
while(b[now].num==b[fir].num && now<=n*m)
a[b[now].x].push_back(b[now].y),++now;
fir=now;
for(int i=1;i<=n;i++)
{
len=a[i].size();
for(int j=0;j<len;j++)
{
id=a[i][j];
l= (j==0) ? id:id-a[i][j-1];
r= m-id+1;
down=n-i+1;
fz+=1ll*l*r*down;
for(int di=i-1;di>=1;di--)
{
if((int)a[di].size()==0)
{
fz+=1ll*l*r*down;
continue;
}
idx=lower_bound(a[di].begin(),a[di].end(),id)-a[di].begin();
len2=a[di].size();
if(idx<len2 && a[di][idx]==id)
break;
if(idx>0)
l=min(l,id-a[di][idx-1]);
if(idx<len2)
r=min(r,a[di][idx]-id);
fz+=1ll*l*r*down;
}
}
}
}
fm=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fm+=(n-i+1)*(m-j+1);
}
inline void print()
{
double ans=1.0*fz/fm;
printf("%.9f\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
prework();
mainwork();
print();
}
return 0;
}
相關文章
- 2024 牛客多校 2
- 2024牛客暑期多校訓練營2
- iTerm2 & Oh My Zsh
- 2024牛客暑期多校訓練營2 HI
- my2sql資料閃回SQL
- 2024牛客暑期多校訓練營2 解題報告
- Mac 配置 iTerm2 + oh-my-zshMac
- 2024 牛客多校 6
- 2024 牛客多校 7
- 2024 牛客多校 8
- 2024 牛客多校 1
- 2023 牛客多校 5
- 2024牛客多校6
- 杭電多校補題
- 2024牛客多校1
- 2020hdu多校8
- MySQL [MY-011608] [MY-010207]MySql
- Mac終端美化(iterm2+oh-my-zsh+vim)Mac
- 技術分享 | my2sql 接入 DBeaver 案例分享SQL
- mac os安裝iTerm2和oh my zshMac
- springMVC:校驗框架:多規則校驗,巢狀校驗,分組校驗;ssm整合技術SpringMVC框架巢狀SSM
- noip多校聯考總結
- NOIP模擬92(多校25)
- NOIP模擬86(多校19)
- NOIP模擬88(多校21)
- NOIP模擬96(多校29)
- NOIP模擬83(多校16)
- My PromisePromise
- 2024牛客多校第七場
- 2024杭電多校第9場
- 2024牛客多校第10場
- 2024杭電多校第九場
- 2024牛客多校7&8
- 2024杭電多校第8場
- 2024牛客多校第四場
- 2024牛客多校第三場
- 牛客多校H題題解
- 24牛客多校第一場