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 ...
随机推荐
- 最新Microsoft Edge!使用chromium内核
2018年11月,微软宣布其Edge浏览器将采用Chromium引擎,意味着微软的Edge浏览器以失败告终. 但令人振奋的是,新版Edge也许会“死而复生”.在使用了Chromium内核后,Edge各 ...
- tty命令详解
基础命令学习目录首页 原文链接:http://blog.chinaunix.net/uid-9525959-id-2001836.html [功能] 打印连接到标准输入的终端的文件名. [描述] ...
- Java-URLEncoder.encode 什么时候才是必须的
当你希望把一段 URL 当成另一个 URL 的参数时,比如:当用户点击交易的按钮时你发现未登录就跳转到 login 页面同时带上一个参数记录在登录之前用户是希望访问的那个交易页面,这样在登录完成之后再 ...
- ./configure的含义
在实践安装nginx的时候,不知道./configure是什么意思,这里特地记录一下. 在linux中./代表当前目录,属于相对路径../代表上一级目录,属于相对路径/代表根目录,/开头的文件都是绝对 ...
- 手机连接wifi 访问本地服务器网站
手机连本地wifi后访问 http://192.168.155.1:8001/loc 版权声明:本文为博主原创文章,未经博主允许不得转载.
- python learning Network Programming.py
Socket # 用一个 Socke t表示"打开了一个网络连接" # 打开一个 Socket 需要知道目标计算机的IP地址和端口号,再指定协议类型即可. # TCP # 主动发起 ...
- Mac下OpenCV开发环境配置(Terminal和Xcode)
亲证可用:http://www.jianshu.com/p/11959977589a Mac OS X 10.1 Xcode 7.2(7C68) OpenCV 2.4.13 Mac OS10.11 ...
- PMS—团队展示
点我查看作业原题 [队名] PMS(一群pm) [拟做的团队项目描述] 基于监控场景的视频摘要与人车检测跟踪系统 A system, under monitor scene, for video su ...
- KEIL C51程序中如何嵌入汇编
模块内接口:使用如下标志符:#pragma asm汇编语句#pragma endasm注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的“Generate ...
- Load generator连接失败的解决办法!(转)
环境:1.loadrunner control 一台物理机(win2008r2) 2.loadrunner agent 两台物理机(win2008r2) 问题:loadrunner control 连 ...