2019CCPC-江西省赛(重现赛)- 感谢南昌大学
A题:
题意: 给你两棵树,然后用一条边将这两棵树连接起来,然后计算 每两点之间的距离,然后求和,问这个和的最小值。
思路:根据重心的性质,树上的所有点到重心的距离最短,因此我们找到两棵树的重心,然后将其连起来。两点之间距离与其边的条数有关,因此我们只需要计算每一条边用过的次数就行了,即该上方的点乘以该边下方的点就是这条边被用过的次数。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1E5+;
const int INF=1E9+;
vector <ll>ve[N];
bool mark[N];
ll n;
ll sz[N];
ll aaans=;
ll sumt1=;
ll pos=;
void dfs1(ll x){//第一遍DFS,用来求第一棵树点的个数
mark[x]=;
for(ll i=;i<ve[x].size();i++){
if(mark[ve[x][i]]) continue ;
sumt1++;
dfs1(ve[x][i]);
}
}
ll dfs2(ll x,ll n1,ll &ans,ll &pos){//第二个DFS用来找树的重心
mark[x]=;
ll sum=;
ll s=;
for(ll i=;i<ve[x].size();i++){
if(mark[ve[x][i]]) continue;
ll x1=dfs2(ve[x][i],n1,ans,pos);
s=max(s,x1);
sum+=x1;
}
s=max(s,n1-sum-);
if(s<ans){
ans=s;
pos=x;
}
return sum+;
} ll dfs3(ll x){// 用来计算边用过的次数
mark[x]=;
ll sum=;
for(int i=;i<ve[x].size();i++){
if(mark[ve[x][i]]) continue ;
int x1=dfs3(ve[x][i]);
sum+=x1;
}
aaans+=sum*(n-sum);//sum 是当前点以下所有的点的个数,n-sum是当前点以上所有点的个数
return sum;
}
int main(){
cin>>n;
ll x,y;
for(ll i=;i<=n-;i++){
cin>>x>>y;
ve[x].push_back(y);
ve[y].push_back(x);
}
dfs1();
ll sumt2=n-sumt1;
ll ans1=INF,pos1;
memset(mark,,sizeof mark);
dfs2(,sumt1,ans1,pos1);
ll ans2=INF,pos2;
for(ll i=;i<=n;i++) {
if(!mark[i]){
dfs2(i,sumt2,ans2,pos2);
break;
}
}
ve[pos1].push_back(pos2);
ve[pos2].push_back(pos1);
memset(mark,,sizeof mark);
dfs3();
cout<<aaans<<endl;
return ;
}
D题:
题目大意:在一组数列中选择两个数,使其可以构成"wave"的最大长度,比如说对于数列1 2 1 3 2
选择12的话,不要看3,这两个数字可以构成的“”wave“”最大长度为4,对于数列1 2 1 1 2 可以构成的最大长度也是4 ,对于选择好的数,我们可以选择性的保留,也就是说我们可以舍弃一个1..(没读懂题意,wa了好几发)
思路:记录每个数字出现的位置,然后暴力枚举每一种情况,然后取最大。(听说正解是dp)
ACcode
#include<bits/stdc++.h>
using namespace std;
const int N=1E2+;
vector<int >ve[N]; int check(int a,int b){
int i=,ja=,jb=,j=-;
int aa=ve[a].size();
int bb=ve[b].size();
int ans=;
while(){
if(i&){
while(ja<aa&&ve[a][ja]<j){
ja++;
}
if(ja==aa) break;
j=ve[a][ja];
ans++;
}
else {
while(jb<bb&&ve[b][jb]<j){
jb++;
}
if(jb==bb) break;
j=ve[b][jb];
ans++;
}
i++;
}
return ans;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int a;
for(int i=;i<=n;i++){
scanf("%d",&a);
ve[a].push_back(i);
}
int ans=; for(int i=;i<=m;i++){
if(ve[i].size()==) continue ;
for(int j=;j<=m;j++){
if(ve[j].size()==||i==j) continue ;
ans=max(ans,check(i,j));
}
}
printf("%d\n",ans);
return ;
}
https://blog.csdn.net/qq_41646772/article/details/96831855
dp解法,用一个二维数组,记录i到j的长度,从i到j的长度等以从j到i的长度+1,即dp[i][j]=d[j][i]+1
dpcode
#include<bits/stdc++.h>
using namespace std;
const int N=1E2+;
int dp[N][N];
int main(){
int n,m;
cin>>n>>m;
int ans=;
int x;
for(int i=;i<=n;i++){
cin>>x;
for(int j=;j<=m;j++){
dp[j][x]=dp[x][j]+;
if(j==x) continue ;
ans=max(ans,dp[j][x]);
}
}
cout<<ans<<endl;
return ;
}
F题 记录每个字符出现的次数计即可
#include<bits/stdc++.h>
using namespace std;
const int N=;
char arr[N];
int a,v,i,n; int main(){
int m;
while(scanf("%d",&m)!=EOF){
a=,v=,i=,n=;
scanf("%s",arr+);
int l=strlen(arr+); for(int j=;j<=l;j++){
if(arr[j]=='a') a++;
if(arr[j]=='v') v++;
if(arr[j]=='i') i++;
if(arr[j]=='n') n++;
} int x=a*v*i*n;
int s=pow(m,);
if(x==){
cout<<<<"/"<<<<endl;
}
else {
cout<<x/__gcd(x,s)<<"/"<<s/__gcd(x,s)<<endl;
}
}
return ;
}
G题
一开始诶读懂题意,以为是能过就过,不能过的话在南北方向的车等待。然而不是,题意是一起等待。。。(无聊至极)
二分水过
#include<bits/stdc++.h>
using namespace std;
const int N=1E3+;
int arr[N];
int brr[N];
int n,m;
bool check(int s){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(arr[i]==brr[j]+s) return false;
if(arr[i]<brr[j]+s) break;
}
}
return true;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=;i<=n;i++) scanf("%d",&arr[i]);
for(int i=;i<=m;i++) scanf("%d",&brr[i]);
sort(arr+,arr++n);
sort(brr+,brr++m);
int l=,r=;
int ans=;
while(l<=r){
int mid=(l+r)/;
if(check(mid)){
ans=min(mid,ans);
r=mid-;
}
else {
l=mid+;
}
}
printf("%d\n",ans);
}
return ;
}
H-RNG
打表找规律吧,,一定能找到的。。。。。
2/2 ,,3/4,,,4/6,,,5/8
//2/2 3/4 4/6 5/8
// 1 2 3 4
#include<bits/stdc++.h>
using namespace std;
typedef long long l
const ll mod=1e9+;
ll ksm(ll n,ll m){
ll res=;
while(m){
if(m&) res=res*n%mod;
m>>=;
n=n*n%mod;
}
return res%mod;
} int main(){
ll n;
while(~scanf("%dll",&n)){
ll a=n+(ll) ;
cout<<a*ksm((ll)*n,mod-)%mod<<endl;
}
return ;
}
I--
被这个题目卡了好久,用long double输入不对,最后用字符串输入的。。。直接保留小数点后三位就可以了,其余的不用管。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=;
char arr[N];
int main(){
int t;
while(scanf("%d",&t)!=EOF){
int c=;
for(int i=;i<=t;i++){
scanf("%s",arr);
int s=strlen(arr);
int ans=; for(int j=s-;;j--){
if(arr[j]=='.'){
for(int k=j+;k<s;k++){
ans*=;
ans+=arr[k]-'';
}
break;
}
}
int sum=;
int x=ans%;
if(x>=&&x<=){
sum=ans-x;
}
else {
sum=ans-x+;
}
c+=sum-ans;
}
float q=;
printf("%.3f\n",c/q);
}
return ;
}
J-worker
每个仓库完成的额度相同,所以想到的lcm,,,然后二分就可以了,注意l和r的取值,l最小为lcm*1,,r最大为m/lcm
注意输出格式,PE了一发
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+;
ll arr[N];
ll mark[N];
ll n,m; ll check(ll s){
ll sum=;
for(ll i=;i<=n;i++){
sum+=s/arr[i];
mark[i]=s/arr[i];
}
if(sum==m) return ;
if(sum>m) return ;
else return ;
} int main(){
while(~scanf("%lld%lld",&n,&m)){
for(ll i=;i<=n;i++) scanf("%lld",&arr[i]);
ll base=arr[]; for(ll i=;i<=n;i++){
base=base*arr[i]/__gcd(base,arr[i]);
} ll l=,r=m/base;
bool flag=false ; while(l<=r){
ll mid=(l+r)/;
ll x=check(mid*base);
if(x==){
puts("Yes");
flag=true;
for(ll i=;i<=n;i++){
if(i==) printf("%lld",mark[i]);
else printf(" %lld",mark[i]);
}
puts("");
break;
}
else{
if(x==){//人数不够
r=mid-;
}
else if(x==) {//人数太多
l=mid+;
}
} }
if(!flag) puts("No");
}
return ;
}
2019CCPC-江西省赛(重现赛)- 感谢南昌大学的更多相关文章
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...
- 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线) 链接:https://ac.nowcoder.com/acm/contest/163/F来源:牛客网 时间 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 2018 ICPC上海大都会赛重现赛 D Thinking-Bear magic (几何)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 D Thinking-Bear magic (几何) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)
题目链接:https://ac.nowcoder.com/acm/contest/163/J 题目大意:给定一个数N,求区间[1,N]中满足可以整除它各个数位之和的数的个数.(1 ≤ N ≤ 1012 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 A,D
A链接:https://www.nowcoder.com/acm/contest/163/A Fruit Ninja is a juicy action game enjoyed by million ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-B-Perfect Numbers(完数)
题目描述 We consider a positive integer perfect, if and only if it is equal to the sum of its positive d ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)
题目描述 In mathematics, matrix multiplication or matrix product is a binary operation that produces a m ...
- 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛
Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...
随机推荐
- [ICRA 2019]Multi-Task Template Matching for Object Detection, Segmentation and Pose Estimation Using Depth Images
简介 本文作者提出新的框架(MTTM),使用模板匹配来完成多个任务,从深度图的模板上找到目标物体,通过比较模板特征图与场景特征图来预测分割mask和模板与检测物体之间的位姿变换.作者提 ...
- Matplotlib 精简实例入门
Matplotlob 简明实例入门 通过几个实例,快速了解matplotlib.pyplot 中最为常见的折线图,散点图,柱状图,直方图,饼图的用法 如果您需要更为详细的内容,请参考官方文档: htt ...
- webapck学习笔记
该笔记是博主学习webpack课程时做的笔记,里面加了一些自己的一些理解,也踩了一些坑,在笔记中基本上都更正过来了,分享给大家,如果发现什么问题,望告知,非常感谢. 1. 为什么要学webapck 为 ...
- Oracle数据库的创建表全
CREATE TABLE "库名"."表名" ( "FEE_ID" VARCHAR2(10 BYTE) constraint ABS_FEE ...
- 仅用200个样本就能得到当前最佳结果:手写字符识别新模型TextCaps
由于深度学习近期取得的进展,手写字符识别任务对一些主流语言来说已然不是什么难题了.但是对于一些训练样本较少的非主流语言来说,这仍是一个挑战性问题.为此,本文提出新模型TextCaps,它每类仅用200 ...
- TensorFlow系列专题(十三): CNN最全原理剖析(续)
目录: 前言 卷积层(余下部分) 卷积的基本结构 卷积层 什么是卷积 滑动步长和零填充 池化层 卷积神经网络的基本结构 总结 参考文献 一.前言 上一篇我们一直说到了CNN[1]卷积层的特性,今天 ...
- PHP7内核(三):源码目录结构
上篇文章我们已经介绍了源码分析工具的安装.配置以及调试方法,本文我们来讲述一下PHP源码的目录结构. 一.目录概览 以php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目 ...
- 初学jQuery使用方法
jQuery引用 <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></scri ...
- 商品spu 和 sku的关系
总结一下在目前的电商系统中的商品涉及的属性spu,sku.搞清楚两者之间的关系对表的设计非常重要 spu Standard Product Unit (标准产品单位) ,一组具有共同属性的商品集 SK ...
- 性能优化之三:将Dottrace过程加入持续集成
之前分享过一篇如何做接口性能分析的文章,但是整个分析过程有点繁琐,需要写一个控制台程序调用被测接口,再预热.启动dottrace追踪,最后才能得到我们想要的性能分析报告.如果有办法一键生成性能分析报告 ...