寒假每日一题(提高组)【Week 1 完结】
生活随笔
收集整理的這篇文章主要介紹了
寒假每日一题(提高组)【Week 1 完结】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 1402. 星空之夜【dfs + 哈希】
- 479. 加分二叉樹【DP】
- 1414. 牛異或【trie】
1402. 星空之夜【dfs + 哈希】
https://www.acwing.com/problem/content/description/1404/
本題最難的一個點在于如何判斷,兩圖形是同一個。即如何記錄圖形,這里可以用哈希值來對應(yīng)相應(yīng)的圖形,
為了盡可能的避免碰撞,故將圖形內(nèi)任意兩點的距離和作為哈希值。
479. 加分二叉樹【DP】
#include<bits/stdc++.h> using namespace std; const int N=110; int root[N][N],w[N],f[N][N],n; void dfs(int l,int r) {if(l>r) return;int k=root[l][r];cout<<k<<" ";dfs(l,k-1);dfs(k+1,r); } int main(void) {cin>>n;for(int i=1;i<=n;i++) cin>>w[i];for(int len=1;len<=n;len++){for(int i=1;i+len-1<=n;i++){int l=i,r=i+len-1;for(int k=l;k<=r;k++){int left=(k==l)?1:f[l][k-1];int right=(k==r)?1:f[k+1][r];int score=left*right+w[k];if(l==r) score=w[k];if(f[l][r]<score){f[l][r]=score;root[l][r]=k;}}}}cout<<f[1][n]<<endl;dfs(1,n);return 0; }1414. 牛異或【trie】
#include<bits/stdc++.h> using namespace std; const int N=1e5*21; int son[N][2],s[N],id[N],idx,n; void insert(int u,int k) {int p=0;for(int i=20;i>=0;i--){int t=u>>i&1;if(!son[p][t]) son[p][t]=++idx;p=son[p][t];}id[p]=k; } int query(int u) {int p=0;for(int i=20;i>=0;i--){int t=u>>i&1;if(son[p][!t]) p=son[p][!t];else p=son[p][t];}return id[p]; } int main(void) {cin>>n;for(int i=1;i<=n;i++) cin>>s[i],s[i]^=s[i-1];int ans=-1,l,r;insert(s[0],0);for(int i=1;i<=n;i++){int k=query(s[i]);int temp=s[i]^s[k];if(temp>ans) ans=temp,l=k+1,r=i;insert(s[i],i);}cout<<ans<<" "<<l<<" "<<r<<endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的寒假每日一题(提高组)【Week 1 完结】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寒假每日一题(入门组)【week7 完结
- 下一篇: 寒假每日一题(提高组)【Week 2 完