題面:
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 longusing 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 registerusing 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,發現不可做之後並沒有及時轉化思路,但其實自己預處理的陣列就是正解。切記 不僅矩陣快速冪是...