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 ...
随机推荐
- 绝对干货!初学者也能看懂的DPDK解析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Willko发表于云+社区专栏 一.网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10 ...
- Scrum Meeting 10 -2014.11.16
开始进入大项目的整合阶段,平时和其他两个小组交流较少,整合难度还是存在的. 在具体整合前,让开发人员添加了些必要的注释,优化代码结构,方便阅读. Member Today’s task Next ta ...
- 奔跑吧DKY——团队Scrum冲刺阶段博客汇总
第一周:团队展示 团队选题 需求规格说明书 第二周:完善需求规格说明书.制定团队编码规范.通过团队项目数据库设计 奔跑吧DKY--团队Scrum冲刺阶段-Day 1-领航 奔跑吧DKY--团队Scru ...
- PAT 1001 A+B Fotmat
源码 1001. A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Calcula ...
- Leetcode题库——31.下一个排列
@author: ZZQ @software: PyCharm @file: nextPermutation.py @time: 2018/11/12 15:32 要求: 实现获取下一个排列的函数,算 ...
- ubuntu16.04+pycharm+默认文件头注释
安装 1.sudo gedit /etc/hosts 2.最后一行添加 0.0.0.0 account.jetbrains.com 3.从 http://idea.lanyus.com/ 中获取激活码 ...
- Codeforces Round #196 (Div. 2) D. Book of Evil 树形dp
题目链接: http://codeforces.com/problemset/problem/337/D D. Book of Evil time limit per test2 secondsmem ...
- 第三次作业---excel导入数据库及显示(2)
发现第一次做的功能有点复杂,不能理解.而且第一次的想法是在页面上上传文件,连接并导入到数据库,并在页面上显示.后来才看到要求是直接在本地将数据导入数据库就行了,然后显示.所以才出现了一堆看不懂也解决不 ...
- angularJS1笔记-(8)-内置指令
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Enterprise Library 2.0 参考源码索引
http://www.projky.com/entlib/2.0/Microsoft/Practices/EnterpriseLibrary/Caching/BackgroundScheduler.c ...