AtCoder Beginner Contest 160(D、E、F
D - Line++
题意:
给n,x,y
表示存在一个n个顶点的无向图图,对于每一对(i,i+1)都存在边,那么整个图就是一条链
现在顶点x和顶点y之间添加了一条边,
所有边的长度都是1
现在问:
有多少点对(a,b),满足a到b的最短距离为1,输出点对数量,
有多少点对(a,b),满足a到b的最短距离为2,输出点对数量,
有多少点对(a,b),满足a到b的最短距离为3,输出点对数量,
…
有多少点对(a,b),满足a到b的最短距离为n-1,输出点对数量,
数据范围:n<=1e3,1<=x<y<=n
解法:
观察到n只有1e3,因此O(n2)枚举点对,记录最短距离出现的次数即可
求i到j最短距离的时候,计算不走x-y的距离,和走x-y的距离,取min就是最短距离了
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=2e5+5;
int mark[maxm];
signed main(){int n,x,y;cin>>n>>x>>y;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){int a=abs(i-j);//按原来的路走int b=abs(x-i)+abs(y-j)+1;//走x-yint d=min(a,b);mark[d]++;}}for(int i=1;i<=n-1;i++)cout<<mark[i]<<endl;return 0;
}
E - Red and Green Apples
题意:
给定x,y,A,B,C
分别表示你现在要吃x个红苹果,y个绿苹果,
你现在有A个红苹果,B个苹果,C个无色苹果
然后给长度为A的数组a,a(i)表示第i个红苹果的权值
然后给长度为B的数组b,b(i)表示第i个绿苹果的权值
然后给长度为C的数组c,c(i)表示第i个无色苹果的权值
吃无色苹果之前可以把他先染色为红色或者绿色,
现在问你吃x个红苹果,y个绿苹果之后的最大权值和
数据范围:x,y,A,B,C<=1e5,a(i),b(i),c(i)<=1e9
解法:
容易想到排序之后优先取最大。
容易进入的误区是吃无色苹果之前要把它先染成某一种颜色,然后就不知道怎么处理了。
其实不用管染成哪种色,多开一个变量记录选择的无色苹果的个数
假设选择xx个红色,yy个绿色,zz个无色,当xx+yy+zz==x+y的时候退出即可。
不需要确定每个选择的无色苹果染成哪种颜色。
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=3e5+5;
struct Node{int v;int id;
}e[maxm];
signed main(){int x,y,A,B,C;cin>>x>>y>>A>>B>>C;int n=0;for(int i=1;i<=A;i++)cin>>e[++n].v,e[n].id=1;for(int i=1;i<=B;i++)cin>>e[++n].v,e[n].id=2;for(int i=1;i<=C;i++)cin>>e[++n].v,e[n].id=3;sort(e+1,e+1+n,[](Node a,Node b){return a.v>b.v;});int xx=0,yy=0,zz=0;int ans=0;for(int i=1;i<=n;i++){if(e[i].id==1){if(xx<x)xx++,ans+=e[i].v;}else if(e[i].id==2){if(yy<y)yy++,ans+=e[i].v;}else{if(xx+yy+zz<x+y)zz++,ans+=e[i].v;}if(xx+yy+zz==x+y)break;}cout<<ans<<endl;return 0;
}
F - Distributing Integers
题意:
给一颗n个顶点的树
先选择一个点作为起始顶点,填上数字1,
然后任选一个与有数字点相邻的无数字点,填上2,
然后任选一个与有数字点相邻的无数字点,填上3,
重复操作知道填完。
现在问你1到n的每个顶点轮流作为起始点,分别有多少种填数字的可能,答案对1e9+7取模。
解法:
这道题其实就是计算以每个顶点作为根的拓扑序列数。
对于有根树,拓扑序列数为:
那么这题就是对于每个顶点,计算所有子树大小的乘积。
树形dp换根即可。
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=2e5+5;
const int mod=1e9+7;
vector<int>g[maxm];
int mul[maxm];
int sz[maxm];
int n;
int ppow(int a,int b,int mod){int ans=1%mod;a%=mod;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
void dfs1(int x,int fa){sz[x]=1;for(int v:g[x]){if(v==fa)continue;dfs1(v,x);sz[x]+=sz[v];mul[x]=mul[x]*mul[v]%mod;}mul[x]=mul[x]*sz[x]%mod;
}
void dfs2(int x,int fa){for(int v:g[x]){if(v==fa)continue;//mul[x]是正确的int pre=mul[x]*ppow(n,mod-2,mod)%mod*ppow(mul[v],mod-2,mod)%mod*(n-sz[v])%mod;mul[v]=mul[v]*ppow(sz[v],mod-2,mod)%mod*pre%mod*n%mod;dfs2(v,x);}
}
signed main(){cin>>n;for(int i=1;i<n;i++){int a,b;cin>>a>>b;g[a].push_back(b);g[b].push_back(a);}for(int i=1;i<=n;i++)mul[i]=1;dfs1(1,-1);dfs2(1,-1);int nn=1;for(int i=1;i<=n;i++){//阶乘nn=nn*i%mod;}for(int i=1;i<=n;i++){cout<<nn*ppow(mul[i],mod-2,mod)%mod<<endl;}return 0;
}
AtCoder Beginner Contest 160(D、E、F相关推荐
- AtCoder Beginner Contest 198 (A ~ F)题解
目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...
- AtCoder Beginner Contest 084(AB)
A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit ...
- AtCoder Beginner Contest 266(C- G)「判凸包」「dp」「期望」「基环树」「组合数」
abc好好好. C - Convex Quadrilateral (atcoder.jp) 思路: 判凸包,向量叉积×=|a|*|b|*sin.叉积<0即角>180°. (可以勉勉强强算我 ...
- AtCoder Beginner Contest 295(DEG)
D - Three Days Ago (atcoder.jp) (1)题目大意 (2)解题思路 考虑使用前缀和的思路,把每一个位置0-9的数量的奇偶表示出来,用一个map或者hash维护一下即可,每一 ...
- AtCoder Beginner Contest 203(Sponsored by Panasonic)题解
文章目录 A - Chinchirorin B - AtCoder Condominium C - Friends and Travel costs D - Pond E - White Pawn F ...
- AtCoder Beginner Contest 203(Sponsored by Panasonic)D.Pond
题目链接 Problem Statement The land of a park AtCoder is an N×NN×NN×N grid with east-west rows and north ...
- AtCoder Beginner Contest 262(ABC262)A-Ex 题解
A - World Cup 我懒得分类讨论,直接枚举. #include<bits/stdc++.h> #define Max(a,b) ((a<b)&&(a=b)) ...
- 数学--数论-- AtCoder Beginner Contest 151(组合数+数学推导)好题(๑•̀ㅂ•́)و✧
思路统计最大值出现的次数,和最小值出现的次数.虽然是每次都是MAX-MIN,我们先求MAX的和,然后再求MIN的和,做差. 这次代码写的真的很漂亮 题目地址: #include <bits/st ...
- AtCoder Beginner Contest 214(补题)
C - Distribution 题意: 每个人都会在ttt这个时间得到一个宝石,每个人都会处理宝石sss时间,所以第iii个人会在tit_iti时间得到宝石,并在ti+siti+siti+si时间 ...
最新文章
- XunSearch中常用方法整合
- alert 回调_JavaScript中到底什么时候回调函数Callback
- Function(函数)
- python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...
- spring cloud微服务分布式云架构-整合企业架构的技术点
- 如何基于链表实现 LRU 缓存淘汰算法?
- 解决在嵌入式平台上无法进行字符编码的问题
- Pytorch:目标检测网络-FPN
- 手动实现一维离散数据小波分解与重构
- windows系统日志服务器搭建,windows 配置日志服务器
- RTI DDS 记录
- php 模态框效果,评论:超酷的模态框效果 - Nifty
- 已写完的二十本最经典原创小说巨作!你都看过吗?
- dplyr-高效的数据变换与整理工具--转载
- 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
- 怎样删除微信朋友圈的内容?超简单的方法免费分享!
- Apple现行公开的framework简介
- undefined control sequence_control两个超级实用的短语解析
- 文件夹加密超级大师 v13.10 是什么
- git分支管理和git提交规范