第一题略

第二题组合数学

s1 = min(cnt['a'],cnt['b']),

s2 = min(cnt['c'],cnt['d']),

b1 = max(cnt['a'],cnt['b']),

b2 = max(cnt['c'],cnt['d']);

简单分开枚举'a','b'一组和'c','d'一组然后乘起来就好了

ans = sigma(C(s1,i) * C(b1,i))(0<=i<=s1) * sigma(C(s2,i) * C(b2,i))(0<=i<=s2) - 1;

#include<bits/stdc++.h>
#define MP make_pair
using namespace std;
typedef long long LL;
const int N = 5e5 + ;
const LL mod = 1e9 + ;
int Tm[];
char s[N];
LL fac[N];
LL inv[N];
LL qpow(LL x,LL b){
LL res = ;
while(b){
if(b&)res = res * x % mod;
x = x * x % mod;
b >>= ;
}
return res;
}
void init(){
fac[] = ;
for(int i = ; i < N; i++)fac[i] = fac[i-] * i % mod;
inv[N - ] = qpow(fac[N - ],mod - );
for(int i = N - ; i >= ; i--){
inv[i] = inv[i + ] * (i + ) % mod;
}
}
inline LL C(int a,int b){
return fac[a] * inv[b] % mod * inv[a - b] % mod;
}
int s1,b1,s2,b2;
LL solve(){
LL res1 = ,res2 = ;
for(int i = ; i <= s1; i++){
res1 = (res1 + C(s1,i) * C(b1,i) % mod) % mod;
}
for(int i = ; i <= s2; i++){
res2 = (res2 + C(s2,i) * C(b2,i) % mod) % mod;
}
// cout<<s1<<" "<<s2<<endl;
// cout<<res1<<" "<<res2<<endl;
return (res1 * res2 % mod - + mod)%mod;
}
int main() {
// freopen("input", "r", stdin);
// freopen("input", "w", stdout);
ios::sync_with_stdio(false);
cin.tie();
init();
int q;
cin>>q;
while(q--){
memset(Tm,,sizeof Tm);
cin>>s;
int len = strlen(s);
for(int i = ; i < len; i++)Tm[(int)s[i]]++;
s1 = min(Tm['a'],Tm['b']);
b1 = max(Tm['a'],Tm['b']);
s2 = min(Tm['c'],Tm['d']);
b2 = max(Tm['c'],Tm['d']);
cout<<solve()<<endl;
}
return ; }

第三题对于每个询问建一颗虚树,根节点要放在虚树里,如果u , fa,fa是u的祖先,并且u到fa这条路径上只有这两个点,那这条路径的点子树黑点都等于u上的子树黑点。

#include<bits/stdc++.h>
#define MP make_pair
#define PB push_back
using namespace std;
typedef long long LL;
const int N = 6e5 + ;
const LL mod = 1e9 + ;
int L[N];
int n;
int R[N];
int ans[N];
int Fa[N][];
int deep[N];
int tin = ;
vector<int>Tree[N];
vector<int>Mtree[N];
int rev[N];
bool cmp(int a, int b) {
return L[a] < L[b];
}
int lca(int a, int b) {
if(deep[a] < deep[b])swap(a, b);
int d = deep[a] - deep[b];
for(int i = ; i < ; i++) {
if(d & ( << i))a = Fa[a][i];
}
if(a == b)return a;
for(int i = ; i >= ; i--) {
if(Fa[a][i] != Fa[b][i])a = Fa[a][i], b = Fa[b][i];
}
return Fa[a][];
}
int v[N];
int St[N];
int top = ;
inline bool isFa(int fa,int u){
return L[fa] <= L[u] && R[fa] >= R[u];
}
inline void dfs(int u,int fa){
for(int to : Mtree[u]){
dfs(to,u);
v[u] += v[to];
}
ans[v[u]] += deep[u] - deep[fa];
}
inline void solve() {
int k, x;
cin >> k;
int tol = ;
for(int i = ; i < k; i++) {
cin >> x;
rev[tol++] = x;
v[x] = ;
}
sort(rev, rev + tol, cmp);
for(int i = ; i < k; i++) {
rev[tol++] = lca(rev[i - ], rev[i]);
}
rev[tol++] = ;
sort(rev, rev + tol, cmp);
tol = unique(rev , rev + tol) - rev;
top = ;
St[++top] = ;
for(int i = ; i < tol; i++){
int to = rev[i];
while(top > && !isFa(St[top],to))top--;
int nt = St[top];
Mtree[nt].PB(to);
St[++top] = to;
}
dfs(,);
ans[] = n;
for(int i = ; i <= k; i++)ans[] -= ans[i];
for(int i = ; i <= k; i++)cout<<ans[i]<<" ",ans[i] = ;
for(int i = ; i < tol; i++){
Mtree[rev[i]].clear();v[rev[i]] = ;
}
cout<<endl;
}
void pre(int u, int fa) {
deep[u] = deep[fa] + ;
L[u] = ++tin;
Fa[u][] = fa;
for(int to : Tree[u]) {
if(to == fa)continue;
pre(to, u);
}
R[u] = tin;
}
void init() {
cin>>n;
for(int i = ; i < n; i++) {
int u, to;
cin >> u >> to;
Tree[u].PB(to), Tree[to].PB(u);
}
pre(, );
for(int i = ; ( << i) < n; i++) {
for(int j = ; j <= n; j++) {
Fa[j][i] = Fa[Fa[j][i - ]][i - ];
}
}
int q;
cin >> q;
while(q--) {
solve();
}
}
int main() {
// freopen("input", "r", stdin);
// freopen("input", "w", stdout);
ios::sync_with_stdio(false);
cin.tie();
init();
return ;
}

HourRank 20的更多相关文章

  1. CSharpGL(20)用unProject和Project实现鼠标拖拽图元

    CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...

  2. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...

  3. 帮我做个APP,给你20万,做不做?

    一.为什么要写这篇文章 前段时间,有个辞职 创业的同事(做法务的)  问我 开发一个 新闻类的APP要多少钱,产品.UI.接口.后台管理页  他们啥都没有,想全部外包. 我 并没有在外包公司做过,也没 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单

    系列目录 不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多的时间来更新,多谢大家的一路支持.如果你觉得好,记得帮我点击推荐^-^ 我们在之前已经插入一些真实数据,其中包含了一个用户和 ...

  5. LINQ to SQL语句(20)之存储过程

    在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...

  6. C#开发微信门户及应用(20)-微信企业号的菜单管理

    前面几篇陆续介绍了很多微信企业号的相关操作,企业号和公众号一样都可以自定义菜单,因此他们也可以通过API进行菜单的创建.获取列表.删除的操作,因此本篇继续探讨这个主体,介绍企业号的菜单管理操作. 菜单 ...

  7. 20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  8. 20个不可思议的 WebGL 示例和演示

    WebGL 是一项在网页浏览器呈现3D画面的技术,有别于过去需要安装浏览器插件,通过 WebGL 的技术,只需要编写网页代码即可实现3D图像的展示.WebGL 可以为 Canvas 提供硬件3D加速渲 ...

  9. 20款 JavaScript 开发框架推荐给前端开发者

    下面,我们给大家提供了一个用于 HTML5 开发的各种用途的 JavaScript 库列表.这些框架能够给前端开发人员提供更好的功能实现的解决方案.如果你有收藏优秀的框架,也可以在后面的评论中分享给我 ...

随机推荐

  1. Maven项目搭建(三):Maven直接部署项目

    上一章给大家讲解了如何使用Maven搭建SSM框架项目.   这次给大家介绍一下怎么使用Maven直接部署项目.   Maven直接部署项目  1.新建系统变量CATALINA_HOME,值为:Tom ...

  2. C# 快速高效率复制对象另一种方式 表达式树

    1.需求 在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍. 比如: public class Student { public int Id { get; set; } publi ...

  3. jsp的开发模式

    JSP 存在两种 开发模式1.Model1 : JSP + JavaBean * 不适合开发业务逻辑特别复杂web应用 ----- 业务逻辑复杂,控制代码多,而在jsp中编写控制代码,十分不便 *JS ...

  4. layout_weight相关知识

    之前使用layout_weight都是在layout_width或layout_height为0dp的时候,都没出现什么问题,但是无意间看到了如果设为match_parent会出现不同效果记录一下. ...

  5. var的一些理解

    var 是 variable(变量,可变物)的简写.在多种编程语言中,var 被用作定义变量的关键字,在一些操作系统中也能见到它的身影.类似object,但是效率比object高一点. var是一个局 ...

  6. 关于下拉框列表不可选择相同值的设置一:当前DOM不可选

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  7. 【CSS】如何用css做一个爱心

    摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...

  8. Android开发事件总线之EventBus运用和框架原理深入理解

    [Android]事件总线之EventBus的使用背景 在我们的android项目开发过程中,经常会有各个组件如activity,fragment和service之间,各个线程之间的通信需求:项目中用 ...

  9. spring学习总结一----控制反转与依赖注入

    spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转 ...

  10. centos7安装redis3.0和phpredis扩展详细教程(图文)

    整理一下centos7安装redis3.0和phpredis扩展的过程,有需要的朋友可以拿去使用. 一.安装redis3.0 1.安装必要的包 yum install gcc 2.centos7安装r ...