2022杭电多校第八场
文章目录
- 1001.Theramore
- 1007.Darnassus
- 1008.Orgrimmar
- 1011.Stormwind
1001.Theramore
易知,字符串的奇偶项之间不会互换,只需要奇偶分别排序即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){vector<int>odd,even;string s;cin>>s;for( int i=0;i<s.size();i++){if(i%2) odd.push_back(s[i]-'0');else even.push_back(s[i]-'0');}sort(odd.begin(),odd.end());sort(even.begin(),even.end());for( int i=0;i<s.size();i++){if(i%2){cout<<odd[i/2];}else cout<<even[i/2];}cout<<"\n";
}
signed main(){int t;cin>>t;while(t--){solve();}
}
1007.Darnassus
kruskal最小生成树算法
若使用暴力法,则共有n^2条边,时间复杂度过高。
可以考虑通过边的取值范围来限制问题的规模,由于每条边的长度至多为
n-1
,因此|i-j|
和|pi-pj|
至少有一个小于sqrt(n-1)
这样可以将问题的规模降至n*sqrt(n)
再使用桶排序对所有的边进行排序,最后使用kruskal算法得出答案。
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
struct dsu
{const int n;vector<int>a;dsu( int n):n(n+1),a(n+1){for( int i=0;i<n+1;i++) a[i]=i;}//y向x合并void unite(int x, int y) {a[find(y)] = find(x);}int find(int u) {return a[u] == u ? a[u] : a[u] = find(a[u]);}
};
ll solve(){int n;cin>>n;vector<int>v1(n+1),v2(n+1);vector<vector<pair<int,int>>>val(n);dsu d(n+1);int cnt=0;for( int i=1;i<=n;i++){cin>>v1[i];}for( int i=1;i<=n;i++){v2[v1[i]]=i;}for( int i=1;i<=n;i++){for( int j=i+1;j<=n;j++){if(1ll*abs(i-j)*abs(i-j)>=n) break;int x=abs(i-j)*abs(v1[i]-v1[j]);if(x<n)val[x].push_back({i,j});x=abs(i-j)*abs(v2[i]-v2[j]);if(x<n)val[x].push_back({v2[i],v2[j]});}} ll ans=0;for( int i=1;i<n;i++){for( auto it:val[i]){int x=it.first,y=it.second;if(d.find(x)!=d.find(y)){ans+=i;d.unite(x,y);}}}return ans;}
signed main(){std::ios::sync_with_stdio(false);//消除输入输出缓存std::cin.tie(0);//解除cin与cout的绑定,加快速率。int t;cin>>t;while(t--){cout<<solve()<<"\n";} // system("pause");
}
1008.Orgrimmar
求一棵树的最大分离集的大小,只需要分状态dp即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll solve(){int n;cin>>n;vector<vector<int>>g(n+1);for( int i=0;i<n-1;i++){int x,y;cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}vector<array<int,3>>dp(n+1);auto dfs=[&](auto self, int rt,int fa)->void{dp[rt][0]=dp[rt][1]=1;int x=1e9,y=0;int sum=0;for( auto it:g[rt]){if(it==fa) continue;else {self(self,it,rt);dp[rt][0]+=dp[it][2];x=min(x,dp[it][2]-dp[it][0]);sum+=dp[it][2];dp[rt][2]+=max({dp[it][0],dp[it][1],dp[it][2]});}} dp[rt][1]+=max({sum,sum-x}); };dfs(dfs,1,0);return max({dp[1][0],dp[1][1],dp[1][2]});}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int size(512<<20); // 512M__asm__ ( "movq %0, %%rsp\n"::"r"((char*)malloc(size)+size));// YOUR CODEint t;cin>>t;while(t--){cout<<solve()<<"\n";}exit(0);
}
1011.Stormwind
将一个矩形切割成若干个矩形,只需枚举长的方向上被切的数量,再计算宽上对应的被切割成的数量。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll solve(){ll n,m,k;cin>>n>>m>>k;ll ans=0;for( ll i=1;i<=n;i++){ll area=(n/i)*m;if(area<k) continue;ll j=min(m,area/k);while(j!=0&&(n/i)*(m/j)<k){j--;}if(j<=0) continue;ans=max(ans,i+j-2);}return ans;
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin>>t;while(t--){cout<<solve()<<"\n";}system("pause");}
2022杭电多校第八场相关推荐
- 2022杭电多校第八场题解
2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...
- 2021杭电多校第八场补题
比赛传送门:Contest Problem List (hdu.edu.cn) 1006)GCD Game 题目翻译:爱丽丝和鲍勃正在玩游戏. 他们轮流操作.有n个数字,a1,a2,...,an.每次 ...
- 2022 年杭电多校第八场补题记录
A Theramore 题意:给定一个长度为 nnn 的 010101 串,每次可以选取一个奇数长度的连续子串进行位置上的翻转,问经过若干次操作能得到的字典序最小的串.n≤5×105n \leq 5\ ...
- [枚举]Stormwind 2022杭电多校第8场 1011
Problem Description \space \space "So, people of Stormwind! Let us unite this day. Let us rene ...
- 2022杭电多校赛第八场
2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...
- 2022杭电多校(十)
2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...
- 2022杭电多校(二)
2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...
- 2022杭电多校(四)
2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...
- 2022杭电多校(一)
2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...
最新文章
- 华为用MySQL还是oracle_25.Oracle和Mysql的区别
- sql中如何统计各种零件的总数量_[Python]提取数据库中数据, 用人货场的分析方法, 对电商双十一促销活动结果数据进行复盘分析...
- EEG伪影详解和过滤工具的汇总(二)
- 【金三银四】java是世界上最好的语言
- just found out why the group by does not work for my app, but work for SCN exercise
- JavaScript 元编程
- Python中,.join()的用法
- TensorFlow精进之路(七):关于两层卷积神经网络对CIFAR-10图像的识别
- Java 接入微信小程序-登录+支付完整流程实战(环境搭建+源码),网友:看完后秒懂!...
- 【历史上的今天】9 月 16 日:乔布斯的归来;苹果崛起;易语言发布
- 汇总报表与合并报表之如何汇总报表
- 计算机cd立体太极图,太极图是三维立体的
- RFQ 、IFB、RFP 、RFI的区别是什么
- android手势识别国内外研究现状,基于Android平台的视觉手势识别研究
- [Android] 我的听书 谷歌版是一个帮助大家播放听书网站的播放器
- AD 删除原理图图纸外的器件
- 阿尔茨海默病与正常衰老中的脑萎缩研究进展
- CDN,P2P,PCDN的区别?
- ls、ls -a、ls -l、ls -al、ll、ll -a区别
- LVGL V8之border styles