codeforces contest 1111
- A. Superhero Transformation
- 题意:
- 元音和元音,辅音和辅音字母之间可以互相转换,问两个字符串是否想同;
- 题解:直接判断即可;
#include<bits/stdc++.h>
using namespace std;
const int N=;
char s[N];
int n,m,vis1[N],vis2[N];
int judge(char x){return x=='a'||x=='e'||x=='i'||x=='o'||x=='u';}
int main(){
// freopen("A.in","r",stdin);
// freopen("A.out","w",stdout);
scanf("%s",s+);
n=strlen(s+);
for(int i=;i<=n;++i)vis1[i]=judge(s[i]);
scanf("%s",s+);
m=strlen(s+);
for(int i=;i<=m;++i)vis2[i]=judge(s[i]);
int fg=;
if(n!=m){
puts("No");
return ;
}
for(int i=;i<=n;++i){
if(vis1[i]^vis2[i]){fg=;break;}
}
puts(fg?"No":"Yes");
return ;
}- B. Average Superhero Gang Power
- 题意:
- 长度为$n$的数组$a$,最多执行$m$次操作,每次1.将一个数+1;2.删除一个数。其中操作2对每个数最多做$k$次
- 题解:
- 枚举2做了多少次,贪心删除最小的值,尽量将剩下的次数全部用到1;
#include<bits/stdc++.h>
#define ll long long
#define ld double
#define Run(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
const int N=;
int n,m,k;
ll sum[N],a[N];
int main(){
// freopen("B.in","r",stdin);
// freopen("B.out","w",stdout);
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=n;++i)scanf("%d",&a[i]);
sort(a+,a+n+);
for(int i=;i<=n;++i)sum[i]=sum[i-]+a[i];
ld ans=;
for(int i=;i<=min(n-,m);++i){
ans=max(ans , (ld) ( sum[n]-sum[i]+min(1ll*k*(n-i) , (ll)m-i) ) / (n-i) );
}
printf("%.20lf\n",ans);
return ;
}- C. Creative Snap
- 题意:
- [1,2^n]的区间,每次直接删除一个区间,如果区间没有数存在代价是$A$,否则代价是$l*B*n_{a}$,$l$为区间长度,$n_{a}$为数的个数
- 题解:
- 直接做$dp$,复杂度相当于所有点的查询线段并:$O(n logn)$
#include<bits/stdc++.h>
#define ll long long
#define ls (k<<1)
#define rs (k<<1|1)
using namespace std;
const int N=;
int n,k,A,B,a[N];
inline int find(int l,int r){
return lower_bound(a+,a+k+,r+)-lower_bound(a+,a+k+,l);
}
ll dfs(int l,int r){
int t=find(l,r);
if(!t)return A;
if(l==r)return !t?A:(ll)t*B;
int mid=(l+r)>>;
return min(1ll*t*B*(r-l+),dfs(l,mid)+dfs(mid+,r));
}
int main(){
// #ifndef ONLINE_JUDGE
// freopen("C.in","r",stdin);
// freopen("C.out","w",stdout);
// #endif
scanf("%d%d%d%d",&n,&k,&A,&B);
for(int i=;i<=k;++i)scanf("%d",&a[i]);
sort(a+,a+k+);
printf("%I64d\n",dfs(,<<n));
return ;
}- D. Destroy the Colony
- 题意:
- 给定一个由大小写字符组成的长度为偶数的字符串,好的串定义为想同字符都出现在想同的半边,询问给出两个位置$x,y$约定$x$和$y$的字符也必须在同一边问方案数;
- 题解:
- 统计每个字符的个数做背包,乘以一个可重元素的排列数就是答案,每次询问的话删除物品再加入即可;
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define rg register
#define il inline
using namespace std;
const int N=;
char s[N];
int n,q,vis[],fac[N],tot,v[N],f[N],g[N],ans[][],iv;
char gc(){
static char*p1,*p2,s[];
if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
return(p1==p2)?EOF:*p1++;
}
int rd(){
char c=gc();int x=;
while(!isdigit(c))c=gc();
while(isdigit(c))x=x*+c-'',c=gc();
return x;
}
char gt(){
char c=gc();
while(!isalpha(c))c=gc();
return c;
}
int inv(int x){
int re=;
for(int y=mod-;y;y>>=,x=(ll)x*x%mod){
if(y&)re=(ll)re*x%mod;
}
return re;
}
int solve(int x,int y){
if(!vis[x]||!vis[y])return ;
for(rg int i=;i<=n>>;++i)g[i]=f[i];
if(x!=y){
int v1=vis[x];
for(rg int i=;i+v1<=n>>;++i)f[i+v1]=(f[i+v1]-f[i]+mod)%mod;
v1=vis[y];
for(rg int i=;i+v1<=n>>;++i)f[i+v1]=(f[i+v1]-f[i]+mod)%mod;
v1=vis[x]+vis[y];
for(rg int i=(n>>)-v1;i>=;--i)f[i+v1]=(f[i+v1]+f[i])%mod;
}
int re = 1ll * iv * f[n>>] %mod;
for(int i=;i<=n>>;++i)f[i]=g[i];
return re;
}
int main(){
// freopen("D.in","r",stdin);
// freopen("D.out","w",stdout);
scanf("%s",s+);n=strlen(s+);
for(rg int i=;i<=n;++i)vis[s[i]]++;
for(rg int i=fac[]=;i<=n;++i)fac[i]=(ll)fac[i-]*i%mod;
iv = 1ll * fac[n>>] * fac[n>>] %mod;
for(rg int i='A';i<='z';++i)if(vis[i])v[++tot]=vis[i],iv=1ll*iv*inv(fac[v[tot]])%mod;
f[]=;
for(rg int i=;i<=tot;++i)
for(rg int j=(n>>)-v[i];j>=;--j){
f[j+v[i]] = (f[j+v[i]]+f[j])%mod;
}
for(rg int x='A';x<='z';++x)
for(rg int y=x;y<='z';++y)
ans[x][y] = solve(x,y);
scanf("%d",&q);
for(rg int i=,x,y;i<=q;++i){
scanf("%d%d",&x,&y);
if(s[x]>s[y])swap(x,y);
printf("%d\n",ans[s[x]][s[y]]);
}
/*
{
for(rg int i=0;i<=n>>1;++i)printf("%d\n",f[i]);
}*/
return ;
}- E. Tree
- 题意:
- 给定一棵树,$q$次询问,每次$k$个询问点$a_{i}$,分成至多$m$组,同组之间以$r$为根不存在祖先关系,问方案数;$n \le 1e5 \ , \ \sum k \le 1e5$
- 题解:
- 按深度排序之后假设$h[i]$为i的祖先个数,f[i][j]表示前$i$个点分成$j$组的方案;
- $$f[i][j] = f[i-1][j] * (j-h[i]) + f[i-1][j-1] $$
- 其实不一定要深度,只需要按照$h[]$排序即可;
- $h$可以在$dfs$序上维护一下;
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=,mod=;
int n,q,k,m,r,a[N],fa[N][],dep[N],hd[N],o=,bin[],h[N],f[N][],st[N],ed[N],c[N],vis[N],idx;
struct Edge{int v,nt;}E[N<<];
char gc(){
static char*p1,*p2,s[];
if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
return(p1==p2)?EOF:*p1++;
}
int rd(){
int x=;char c=gc();
while(c<''||c>'')c=gc();
while(c>=''&&c<='')x=(x<<)+(x<<)+c-'',c=gc();
return x;
}
void adde(int u,int v){
E[o]=(Edge){v,hd[u]};hd[u]=o++;
E[o]=(Edge){u,hd[v]};hd[v]=o++;
}
void dfs(int u,int F){
st[u]=++idx;
fa[u][]=F;
dep[u]=dep[F]+;
for(int i=;bin[i]<dep[u];++i)fa[u][i]=fa[fa[u][i-]][i-];
for(int i=hd[u];i;i=E[i].nt){
int v=E[i].v;
if(v==F)continue;
dfs(v,u);
}
ed[u]=idx;
}
int lca(int u,int v){
if(dep[u]<dep[v])swap(u,v);
for(int i=;i<;++i)if(bin[i]&(dep[u]-dep[v]))u=fa[u][i];
if(u==v)return u;
for(int i=;~i;--i)if(fa[u][i]!=fa[v][i])u=fa[u][i],v=fa[v][i];
return fa[u][];
}
void add(int x,int y){for(;x<=n;x+=x&-x)c[x]+=y;}
int ask(int x){int re=;for(;x;x-=x&-x)re+=c[x];return re;}
void update(int u,int x){
vis[u]+=x;
add(st[u],x);
add(ed[u]+,-x);
}
int query(int u){
int t=lca(u,r);
return ask(st[u])+ask(st[r])-ask(st[t])*+vis[t];
}
int main(){
#ifndef ONLINE_JUDGE
freopen("E.in","r",stdin);
freopen("E.out","w",stdout);
#endif
n=rd();q=rd();
for(int i=bin[]=;i<=;++i)bin[i]=bin[i-]<<;
for(int i=;i<n;++i)adde(rd(),rd());
dfs(,);
f[][]=;
for(int i=;i<=q;++i){
k=rd();m=rd();r=rd();
for(int j=;j<=k;++j)a[j]=rd(),update(a[j],);
for(int j=;j<=k;++j)h[j]=query(a[j])-;
sort(h+,h+k+);
for(int j=;j<=k;++j)
for(int l=;l<=m;++l){
f[j][l] = ((ll)f[j-][l]*max(,l-h[j])%mod+f[j-][l-])%mod;
}
int ans=;
for(int l=;l<=m;++l)ans=(ans+f[k][l])%mod;
printf("%d\n",ans);
for(int j=;j<=k;++j)update(a[j],-);
}
return ;
}
codeforces contest 1111的更多相关文章
- [codeforces contest 1119 F] Niyaz and Small Degrees 解题报告 (树形DP+堆)
interlinkage: http://codeforces.com/contest/1119/problem/F description: 有一颗$n$个节点的树,每条边有一个边权 对于一个$x$ ...
- CodeForces contest/776 A+B+C题解
ICM Technex 2017 and Codeforces Round #400 (Div. 1 +Div.2,combined) A. A Serial Killer 谜一样的题意:每天从两个人 ...
- codeforces/contest/803/problem C
题目:C. Maximal GCD 题意:输入n,k.将n拆成k个数的序列,使得这k个数的gcd最大.(且序列严格递增).1 ≤ n, k ≤ 1010 . 分析:假设k个数的gcd为d,则一定有d| ...
- 【codeforces contest 1119 F】Niyaz and Small Degrees
题目 描述 \(n\) 个点的树,每条边有一个边权: 对于一个 \(X\) ,求删去一些边后使得每个点的度数 \(d_i\) 均不超过 \(X\) 的最小代价: 你需要依次输出 \(X=0 \to n ...
- CodeForces Contest #1137: Round #545 (Div. 1)
比赛传送门:CF #1137. 比赛记录:点我. 每次都自闭的 div1 啊,什么时候才能上 IM 呢. [A]Skyscrapers 题意简述: 有一个 \(n\times m\) 的矩阵 \(a_ ...
- Codeforces round 1111
CF Div 2 537 比赛链接 感觉题目难度OK,五个题都能做,后俩题考察人的翻译水平... 另外,$Claris$太强了... A 直接按照题意模拟,不知道为啥有人会被× 代码: #includ ...
- CodeForces Contest #1114: Round #538 (Div. 2)
比赛传送门:CF #1114. 比赛记录:点我. 又 FST 了. [A]Got Any Grapes? 题意简述: 有三个人,第一个人需要吃绿色葡萄至少 \(a\) 个,第二个人需要吃绿色和紫色葡萄 ...
- CodeForces Contest #1110: Global Round 1
比赛传送门:CF #1110. 比赛记录:点我. 涨了挺多分,希望下次还能涨. [A]Parity 题意简述: 问 \(k\) 位 \(b\) 进制数 \(\overline{a_1a_2\cdots ...
- Codeforces Contest 870 前三题KEY
A. Search for Pretty Integers: 题目传送门 题目大意:给定N和M个数,从前一个数列和后一个数列中各取一个数,求最小值,相同算一位数. 一道水题,读入A.B数组后枚举i.j ...
随机推荐
- 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- [转载]java面试中经常会被问到的一些算法的问题
Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享 ...
- Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法
#1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...
- Xiuno BBS 4.0 修改时间显示
修罗开源轻论坛程序 - Xiuno BBS 4.0Xiuno BBS 4.0 是一款轻论坛产品,前端基于 BootStrap 4.0.JQuery 3,后端基于 PHP/7 MySQL XCache/ ...
- python基础知识-11-函数装饰器
python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 ) def func(): pass v1 = v2 = func #将函数名赋予一个变量,就和变量赋值是同 ...
- 安卓端通过http对Mysql进行增删改查
各类it学习视频,大家都可以看看哦!我自己本人都是通过这些来学习it只知识的! 下面是视频链接转自:http://www.cnblogs.com/yzxk/p/4749440.html Android ...
- C#窗体——四则运算
用户需求:程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量.补充说明:0——10的整数是随机生成的用户可以选择四则运算中的一种用户可以结束程序的运行,并显示统计结果.在此 ...
- p4factory下 targets/basic_rout
p4factory/targets/basic_routing/p4src代码解读 headers.p4 header_type ethernet_t { fields { dstAddr : 48; ...
- 【第十周】四则运算GUI
下载地址:http://pan.baidu.com/s/1hsc9HRm 这次比上次多了一个记录的功能,是用QT里面的qplaintextedit记录显示出做过的题目. 我是直接看的文档,发现窗体,搜 ...
- Hadoop初探
本文转自:https://blog.csdn.net/column/details/14334.html 前言 Hadoop是什么? 用百科上的话说:“Hadoop是一个由Apache基金会所开发的分 ...