csp s模擬測試53u,v,w題解

2022-04-14 06:30:54 字數 1504 閱讀 1258

題面:

u:用差分優化修改

二維差分:給(x1,y1),(x2,y2)加上s:

$d[x1][y1]+=s,d[x1][y2+1]-=s,d[x2+1][y1]-=s,d[x2+1][y2+1]+=s$

定義2個差分陣列d1,d2,分別記錄豎列和斜邊的差分

$d1[r][c]+=s,d1[r+l-1][c]-=s,d2[r][c+1]-=s,d2[r+l-1][c+l-1]+=s$

統計是求2個字首和

#include#include#include#include#define int long long

using namespace std;

const int maxn=1e3+5;

int n,q,a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],d[maxn][maxn],ans=0;

int d1[maxn][maxn],d2[maxn][maxn];

signed main()

for(int i=1;i<=n;++i)

} for(int i=1;i<=n;++i)

printf("%lld\n",ans);

return 0;

}

v:搜尋每乙個情況,對於重複的用map記憶化一下

注意判斷長度為奇數的情況,map超時可以用hash表

#include#include#include#include#define re register

using namespace std;

int n,k,sta=0;

char ch[35];

struct hash_mape[6000000];

double &operator(int sta)

}mp;

inline double dfs(re int x,re int st)

return mp[st]=sum;

}signed main()

struct node;

} friend bool operator < (node a,node b)

}dp[maxn][2];

node min(node a,node b)

void dfs(int x,int fa,int fl),q=;

for(int i=pre[x];i;i=nxt[i])

if(fl==2));

dp[x][1]=min(p+(node),q+(node));

} if(fl==1);

dp[x][1]=min(p+(node),q+(node));

} if(fl==0));

dp[x][1]=(node); }}

signed main()else

} dfs(1,0,0);

printf("%d %d\n",dp[1][0].tim/2,dp[1][0].len);

return 0;

}

csp s模擬測試53

有時間就多寫兩篇。t1 對於乙個矩陣,每次給乙個下三角 半個正方形 的矩陣加上s,求最終元素。這個題是差分方面的,最終一次詢問,那麼我們就可以搞,一開始沒思路。後來想了想序列上差分是什麼?就是代表乙個點比前乙個多多少,所以修改l,r就是l s,r 1 s,這樣最終一求字首和就知道了原序列。在想一想如...

CSP S模擬測試94 題解

高精硬上似乎跑不過,其實可以都取個 log 那麼只需要比較 y times log x 和 sum limits y log i 就好了。includeusing namespace std int t double x,y void work int main 顯然目標區間合法的充要條件是 把位置...

CSP S模擬測試69 題解

一如既往的垃圾,又回到了那個場場墊底的自己,明明考場上都想到正解了,但是就是拿不到分,可能是互奶把rp用光了吧以後一定加強訓練 能力。t1 考場上一直yy矩陣快速冪,雖然自己矩陣快速冪一點都不會還是硬著頭皮yy,發現不可做之後並沒有及時轉化思路,但其實自己預處理的陣列就是正解。切記 不僅矩陣快速冪是...