B .Counting Inversion

题意:给定L,R,求这个区间的逆序对数之和。(L,R<1e15)

思路:一看这个范围就知道是数位DP。 只是维护的东西稍微多一点,需要记录后面的各种数字的个数cnt,以及逆序对和sum,以及出现了多少种后缀num。

那么枚举到当前位时,假设为i ,那么sum+=cnt[i+1]+cnt[i+2]+....cnt[9];  cnt[i]+=num; 可以参考CF1073E

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
struct in{
ll num,cnt[],sum;
in(){num=sum=; memset(cnt,,sizeof(cnt)); }
}dp[];
int q[],tot,vis[];
in dfs(int pos,int st,int lim)
{
if(!lim&&vis[pos]) return dp[pos];
if(pos==) {
in res; res.num=;
return res;
}
int up=; in res,tmp; if(lim) up=q[pos-];
rep(i,,up){
tmp=dfs(pos-,i,lim&&i==up);
res.sum+=tmp.sum;
rep(j,i+,) res.sum+=tmp.cnt[j];
rep(j,,) res.cnt[j]+=tmp.cnt[j];
res.cnt[i]+=tmp.num;
res.num+=tmp.num;
}
vis[pos]=;
return dp[pos]=res;
}
ll cal(ll x)
{
if(x<) return ;
tot=; ll ans=;
while(x) q[++tot]=x%,x/=;
memset(dp,,sizeof(dp));
memset(vis,,sizeof(vis));
rep(i,,tot){
ll up=; if(i==tot) up=q[tot];
rep(j,,up){
in tmp=dfs(i,j,(i==tot)&&(j==q[tot]));
ans+=tmp.sum;
rep(k,j+,) ans+=1LL*tmp.cnt[k];
}
}
return ans;
}
int main()
{
ll L,R; int T,Ca=; scanf("%d",&T);
while(T--){
scanf("%lld%lld",&L,&R);
printf("Case %d: %lld\n",++Ca,cal(R)-cal(L-));
}
return ;
}

C .Divisors of the Divisors of An Integer

题意:给出N,问N!的因子的因子个数和。

思路:唯一分解,对于一个素数p,假设它的幂次是x,那么因子的幂次有0,1,2,...x;那么因子的因子幂次就是(0); (0,1); ( 0,1,2);   ... ; (0,1,2,...x)

所以就是一个累乘,对于每个素数p,ans*=(x+1)*(x+2)/2;    而阶乘的唯一分解只需要一直除即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=1e7+;
int a[maxn],N,p[maxn],vis[maxn],cnt;ll ans=;
int solve(int p)
{
int tN=N,res=;
while(tN) {
res+=tN/p;
if(res>Mod) res-=Mod;
tN/=p;
} return res;
}
int get(int p)
{
if(p&) return 1LL*(p+)/*p%Mod;
return 1LL*p/*(p+)%Mod;
}
int main()
{
rep(i,,){
if(!vis[i]) p[++cnt]=i;
for(int j=;j<=cnt&&p[j]*i<=;j++){
vis[p[j]*i]=;
if(i%p[j]==) break;
}
}
while(~scanf("%d",&N)&N){
ans=;
rep(i,,N) {
if(!vis[i]) a[i]=solve(i);
}
rep(i,,N){
if(a[i])
ans=(ll)ans*get(a[i]+)%Mod;
}
printf("%lld\n",ans);
}
return ;
}

E.Helping the HR

题意:给定每个人的签到和离开时间,问每个人的..情况

思路:模拟; by许。

#include<bits/stdc++.h>
using namespace std;
char str[];
int main()
{
int n,s=*,D=*,E=*;
while(~scanf("%d",&n)&&n)
{
int cnt=;
for(int cas=;cas<n;cas++)
{
int S=,T=,tot=,pre=,p=;
scanf("%s",str);
int len=strlen(str);
for(int i=;i<len;i++)
{
if(str[i]!=':'&&i!=len-)pre=pre*+str[i]-'';
else
{
if(i==len-)pre=pre*+str[i]-'';
tot++;
if(tot<=)
{
S+=pre*p;
if(tot==)p=;
else p/=;
}
else T+=pre*p,p/=;
pre=;
}
}
int flag=;
if(str[]=='D'&&S>D)flag=;
if(str[]=='E'&&S>E)flag=;
int res=T-max(s,S);
if(str[]=='D'&&res<*)flag=;
if(str[]=='E'&&res<*)flag=;
cnt+=flag;
}
if(!cnt)puts("All OK");
else if(cnt<=)printf("%d Point(s) Deducted\n",cnt);
else puts("Issue Show Cause Letter");
}
}

F .Path Intersection

题意:给定一棵树, Q次询问,每次给定K条路经,求这K条路有多少个公共点.

思路:路剖,  即每条路经+1, 然后可以选一条路径看有多少个点被覆盖K次。

好久没写树剖了,开始写错的地方提醒下自己:  当top不同的时候,我们先操作dep[top[]]大的,然后把它变为fa[top[]];

而top相同的,正常的从小到大即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Laxt[maxn],Next[maxn],To[maxn],cnt,dep[maxn];
int sz[maxn],son[maxn],top[maxn],pos[maxn],N;
int Mx[maxn],num[maxn],Lazy[maxn],fa[maxn],tot;
void add(int u,int v){
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v;
}
void dfs1(int u,int f)
{
sz[u]=; fa[u]=f;
dep[u]=dep[f]+; son[u]=;
for(int i=Laxt[u];i;i=Next[i]){
if(To[i]!=f){
dfs1(To[i],u);
if(sz[To[i]]>sz[son[u]]) son[u]=To[i];
}
}
}
void dfs2(int u,int Top)
{
pos[u]=++tot; top[u]=Top;
if(son[u]) dfs2(son[u],Top);
for(int i=Laxt[u];i;i=Next[i]){
if(To[i]!=fa[u]&&To[i]!=son[u])
dfs2(To[i],To[i]);
}
}
void build(int Now,int L,int R)
{
Mx[Now]=Lazy[Now]=; num[Now]=R-L+;
if(L==R) return; int Mid=(L+R)>>;
build(Now<<,L,Mid); build(Now<<|,Mid+,R);
}
void pushdown(int Now)
{
if(Lazy[Now]) {
Mx[Now<<]+=Lazy[Now];Lazy[Now<<]+=Lazy[Now];
Mx[Now<<|]+=Lazy[Now];Lazy[Now<<|]+=Lazy[Now];
Lazy[Now]=;
}
}
void pushup(int Now)
{
Mx[Now]=Mx[Now<<]; num[Now]=num[Now<<];
if(Mx[Now<<|]>Mx[Now])
Mx[Now]=Mx[Now<<|],num[Now]=num[Now<<|];
else if(Mx[Now<<|]==Mx[Now])
num[Now]+=num[Now<<|];
}
void update(int Now,int L,int R,int l,int r,int val)
{
if(l<=L&&r>=R){
Mx[Now]+=val; Lazy[Now]+=val; return ;
}
pushdown(Now); int Mid=(L+R)>>;
if(l<=Mid) update(Now<<,L,Mid,l,r,val);
if(r>Mid) update(Now<<|,Mid+,R,l,r,val);
pushup(Now);
}
int query(int Now,int L,int R,int l,int r,int K)
{
if(Mx[Now]<K) return ;
if(l<=L&&r>=R) return Mx[Now]==K?num[Now]:;
pushdown(Now); int Mid=(L+R)>>,res=;
if(l<=Mid) res+=query(Now<<,L,Mid,l,r,K);
if(r>Mid) res+=query(Now<<|,Mid+,R,l,r,K);
pushup(Now); return res;
}
void pathup(int u,int v,int val)
{
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);
update(,,N,pos[top[u]],pos[u],val);
u=fa[top[u]];
}
if(dep[u]>dep[v]) swap(u,v);
update(,,N,pos[u],pos[v],val);
}
int pathquery(int u,int v,int K)
{
int res=;
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);
res+=query(,,N,pos[top[u]],pos[u],K);
u=fa[top[u]];
}
if(dep[u]>dep[v]) swap(u,v);
res+=query(,,N,pos[u],pos[v],K);
return res;
}
int a[maxn],b[maxn];
int main()
{
int T,Q,K,C=,u,v;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
rep(i,,N) Laxt[i]=; cnt=; tot=;
rep(i,,N-){
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
dfs1(,); dfs2(,);
build(,,N);
scanf("%d",&Q);
printf("Case %d:\n",++C);
while(Q--){
scanf("%d",&K);
rep(i,,K) scanf("%d%d",&a[i],&b[i]);
rep(i,,K) pathup(a[i],b[i],);
printf("%d\n",pathquery(a[],b[],K));
rep(i,,K) pathup(a[i],b[i],-);
}
}
return ;
}

I .Triangles

题意:给定两个三维空间里的三角形,求最近距离。

思路:好像是不错的题,想补。

J. VAT Man

签到。 by许。

#include<bits/stdc++.h>
#define db double
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
db x;
cin>>x;
printf("%.2lf\n",x*1.15);
}
}

Gym102040 .Asia Dhaka Regional Contest(寒假自训第9场)的更多相关文章

  1. Gym101986: Asia Tsukuba Regional Contest(寒假自训第12场)

    A .Secret of Chocolate Poles 题意:有黑白两种木块,黑色有1,K两种长度: 白色只有1一种长度,问满足黑白黑...白黑形式,长度为L的组合种类. 思路:直接DP即可. #i ...

  2. Gym.101955: Asia Shenyang Regional Contest(寒假自训第10场)

    C.Insertion Sort 题意:Q次询问,每次给出N,M,Mod,问你有多少种排列,满足前面M个数字排序之后整个序列的LIS>=N-1. 思路:我们把数字看成[1,M],[N-M+1,N ...

  3. 2018-2019 ACM-ICPC, Asia Dhaka Regional Contest

    目录 Contest Info Solutions B. Counting Inversion C. Divisors of the Divisors of An Integer E. Helping ...

  4. 2018-2019 ACM-ICPC, Asia Dhaka Regional Contest C.Divisors of the Divisors of An Integer (数论)

    题意:求\(n!\)的每个因子的因子数. 题解:我们可以对\(n!\)进行质因数分解,这里可以直接用推论快速求出:https://5ab-juruo.blog.luogu.org/solution-p ...

  5. Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)

    学习了“叙利亚”这个单词:比较温和的一场:几何的板子eps太小了,坑了几发. A .Hello SCPC 2018! 题意:给定一个排列,问它是否满足,前面4个是有序的,而且前面4个比后面的都小. 思 ...

  6. Gym.101908 Brazil Subregional Programming Contest(寒假自训第六场)

    这几天睡眠时间都不太够,室友晚上太会折腾了,感觉有点累,所以昨天的题解也没写,看晚上能不能补起来. B . Marbles 题意:给定N组数(xi,yi),玩家轮流操作,每次玩家可以选择其中一组对其操 ...

  7. zoj 3659 Conquer a New Region The 2012 ACM-ICPC Asia Changchun Regional Contest

    Conquer a New Region Time Limit: 5 Seconds      Memory Limit: 32768 KB The wheel of the history roll ...

  8. 2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)

    摘要 本文主要给出了2018 ACM-ICPC Asia Beijing Regional Contest的部分题解,意即熟悉区域赛题型,保持比赛感觉. Jin Yong’s Wukong Ranki ...

  9. 2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)

    摘要 本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意.解题思路和代码实现,意即熟悉区域赛比赛题型. Built ...

随机推荐

  1. 把旧系统迁移到.Net Core 2.0 日记 (16) --Cors跨域访问

    IE浏览器的Intranet局域网设置默认是可以跨域访问的.chrome就不可以. 这里说的跨域是指javascript代码不能跨域, 当然你在后端controller代码里用HttpClient.G ...

  2. Java ip地址查询,根据ip接口获得ip所在省市区,邮编,运营商等

    早上一来,项目经理就说需要添加一个用户ip归属地查询功能,然后在网上搜罗半天,研究出一个比较简单的方法,通过接口返回地址json数据 有百度接口,新浪接口,这里用的是淘宝ip接口 通过淘宝IP地址库获 ...

  3. LY.JAVA面向对象编程.修饰符

    2018-07-18 09:20:25 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: ...

  4. 人机交互之QQ拼音

    随着电脑系统的不断更新,电脑自带的系统输入法也越来越适应广大群众了,那为什么其他的输入法还能占有大量的用户呢? 首先系统输入法是面向大众的,个性化方面略显不足. 其次系统输入法功能不够全面,比如说手写 ...

  5. 通过滑动条控制Cube旋转

    private float speed = 10; private float speedValue; private GameObject slider; private GameObject cu ...

  6. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  7. vue-router-2-动态路由配置

    const User = { template: '<div>User{{ $route.params.id }}</div>' } const router = new Vu ...

  8. 深入理解java虚拟机---内存分配策略(十三)

    转载请注明原文地址:https://blog.csdn.net/initphp/article/details/30487407 Java内存分配策略 使用的ParNew+Serial Old收集器组 ...

  9. Linux如何从零开始搭建rsync服务器(centOS6)

    Step1:检查rsync是否已经安装 rmp -qa rsync 如果没有安装的话,通过yum install rsync -y   Step2:给rsync服务添加本地用户,用于管理本地目录. u ...

  10. 7 Serial Configuration 理解 (一)

    reference :  ug470- 7 series config.pdf 7系列器件有5种配置接口,每种配置接口对应一种或者多种配置模式和总线位宽.配置时序相对于引脚的CCLK,即使在内部产生C ...