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相关推荐

  1. AtCoder Beginner Contest 198 (A ~ F)题解

    目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...

  2. AtCoder Beginner Contest 084(AB)

    A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit  ...

  3. AtCoder Beginner Contest 266(C- G)「判凸包」「dp」「期望」「基环树」「组合数」

    abc好好好. C - Convex Quadrilateral (atcoder.jp) 思路: 判凸包,向量叉积×=|a|*|b|*sin.叉积<0即角>180°. (可以勉勉强强算我 ...

  4. AtCoder Beginner Contest 295(DEG)

    D - Three Days Ago (atcoder.jp) (1)题目大意 (2)解题思路 考虑使用前缀和的思路,把每一个位置0-9的数量的奇偶表示出来,用一个map或者hash维护一下即可,每一 ...

  5. AtCoder Beginner Contest 203(Sponsored by Panasonic)题解

    文章目录 A - Chinchirorin B - AtCoder Condominium C - Friends and Travel costs D - Pond E - White Pawn F ...

  6. 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 ...

  7. AtCoder Beginner Contest 262(ABC262)A-Ex 题解

    A - World Cup 我懒得分类讨论,直接枚举. #include<bits/stdc++.h> #define Max(a,b) ((a<b)&&(a=b)) ...

  8. 数学--数论-- AtCoder Beginner Contest 151(组合数+数学推导)好题(๑•̀ㅂ•́)و✧

    思路统计最大值出现的次数,和最小值出现的次数.虽然是每次都是MAX-MIN,我们先求MAX的和,然后再求MIN的和,做差. 这次代码写的真的很漂亮 题目地址: #include <bits/st ...

  9. AtCoder Beginner Contest 214(补题)

    C - Distribution 题意: 每个人都会在ttt这个时间得到一个宝石,每个人都会处理宝石sss时间,所以第iii个人会在tit_iti​时间得到宝石,并在ti+siti+siti+si时间 ...

最新文章

  1. XunSearch中常用方法整合
  2. alert 回调_JavaScript中到底什么时候回调函数Callback
  3. Function(函数)
  4. python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...
  5. spring cloud微服务分布式云架构-整合企业架构的技术点
  6. 如何基于链表实现 LRU 缓存淘汰算法?
  7. 解决在嵌入式平台上无法进行字符编码的问题
  8. Pytorch:目标检测网络-FPN
  9. 手动实现一维离散数据小波分解与重构
  10. windows系统日志服务器搭建,windows 配置日志服务器
  11. RTI DDS 记录
  12. php 模态框效果,评论:超酷的模态框效果 - Nifty
  13. 已写完的二十本最经典原创小说巨作!你都看过吗?
  14. dplyr-高效的数据变换与整理工具--转载
  15. 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
  16. 怎样删除微信朋友圈的内容?超简单的方法免费分享!
  17. Apple现行公开的framework简介
  18. undefined control sequence_control两个超级实用的短语解析
  19. 文件夹加密超级大师 v13.10 是什么
  20. git分支管理和git提交规范

热门文章

  1. Bitvise Tunnelier秘钥链接阿里云Linux服务器
  2. Ubuntu系统中如何进行屏幕截图
  3. Java实现字典树处理海量数据查重
  4. Qt5实现飞机大战1.0(上)
  5. 9.来电显示归属地--自定义Toast
  6. react 可拖拽进度条
  7. 深度linux安装spotify,在Ubuntu/Mint中安装 Spotify
  8. 安徽师范大学计算机与信息学院院长,罗永龙
  9. 一阶系统的时域和频域分析
  10. 华硕主板使用nt6 oem loader激活之后重启卡在ASUS LOGO位置无法进入BIOS界面