來自達哥的問候……
究級難題,完全不可做qaq
#include#includeview code#include
using
namespace
std;
typedef
long
long
ll;int
n;ll a[
25],b[25],c[25],d[25
],ans;
void dfs(int
step,ll mdx,ll lhb)
//cout0?mdx+a[step]:0,lhb-b[step]>0?lhb-b[step]:0
); dfs(step+1,mdx-d[step]>0?mdx-d[step]:0,lhb+c[step]>0?lhb+c[step]:0
);
return;}
intmain()
題目中特意強調了簡單路徑,往無環圖的性質上想。顯然無環圖聯通塊個數=點數-邊數,那麼直接二維字首和維護黑塊個數、橫向邊數、縱向邊數即可。
#include#includeview code#include
using
namespace
std;
const
int n=2019
;int
n,m,q;
inta[n][n];
inthl[n][n],sl[n][n],sum[n][n];
intread()
while(isdigit(ch))x=x*10+ch-'
0',ch=getchar();
return x*f;}/*
int getsum(int tmp[n],int i,int j)
*/int
main()
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int i=1;i<=q;i++)
return0;
}
鬼畜值的計算公式其實就是$c_n^2$,所以每一對相交線貢獻就是1,不用考慮多條線交於一點的情況。
其實手玩一下的話很容易發現題目要求的就是逆序對個數(只要你別像我一樣以為這是一道美妙的數學題考場推2頁a4紙公式就行)
但是達哥為了不讓自己出的題被ak(雖說我們那場還是有ak的),把記憶體卡到了32m
肯定要在$x$的生成方式上尋求突破,可以發現$x$構成的序列由多個等差數列構成。如果$x[i]$和$x[i-1]$在同一段等差數列內,且$x[i-1]$和前面的數列構成了m個逆序對,那麼$x[i]$一定可以和前面的數構成m-k個逆序對。因為每段中必然有乙個數能和$x[i-1]$構成逆序對而不能和$x[i]$構成,所以每段貢獻都要少1。
如果到了新一段等差數列的開始,就直接用樹狀陣列計算逆序對數。另外,對於剛開始不完整的一段等差數列需要加特判。
#include#includeview code#include
using
namespace
std;
#define int long long
intn,ini,a,mod,maxx,ans;
int c[100005
];int lb(int x)
int add(int x,int
val)
int sum(int
x)signed main()
cout
return0;
}
NOIP 模擬17 題解
部分分很肥,正解寫得常數稍大就會和暴力乙個分,考試的時候寫什麼自己考慮。滑稽 部分分的迴圈邊界手抖寫錯了 25 原本暴力分中的10分都沒了啊啊啊 沒寫掛的話應該有75,其實就是二維字首和 暴力列舉點對統計 a i j 都相等時只枚舉子矩形大小再乘上這種大小出現的次數。正解 sum r sum l 1...
NOIP模擬16 題解
出題人大概已經去為國家處理積壓子彈了?貪心,讓每乙隻青蛙 我慫行吧 都盡量往遠跳,能到達的最遠的被踩了就跳次遠的,以此類推。可以維護乙個單調佇列,表示每只青蛙的位置 開始都是0 然後按順序掃一遍每個石頭,如果隊首的青蛙不能跳過去就放棄它直接pop掉,如果能跳就把石頭位置從隊尾push進去並pop掉隊...
NOIP模擬測試20
liu runda聚聚的饋贈 problem a 周 防自閉題?這道題讓我整個考試都很愉悅 搜就完事了 1 include 2 3intn 4 int a 20 b 20 c 20 d 20 5 long long ans 67 void dfs int day,long long oi,long ...