Preface

NOIP前突然不知道做什么,感觉思维有点江僵化,就在vjudge上随便组了6道ABC D+CF Div2 C/D做,发现比赛质量还不错,知识点涉及广,难度有梯度,码量稍小,思维较多. 同时发现vjudge的比赛功能很不错

A. ABC112-D-Partition

难度感觉比NOIP T1简单了些了

首先naiive的想法是枚举这个公约数\(D\),但是发现有\(D*N<=M\)这个约束,算了算发现\(M/N <=1e4\)

于是开心从大到小枚举就好了

太水了

int n,m;
int main(){
read(n),read(m);
for(ri i=m/n;i>=1;i--){
if(m%i==0){printf("%d\n",i);break;}
}
return 0;
}

B. ABC110-D-Factorization

应该有NOIP T1难度

我先考虑如果这个M是一个质数,那么就有N种可能,稍稍推广一下,如果\(M = P^c\),那么就相当于你有\(N\)个不同的盒子,然后盒子内可以不装东西,求放\(c\)个物品的方案数

这个就是隔板法的经典模型

如果您不知道是什么就看这篇洛谷日报吧:https://www.luogu.org/blog/chengni5673/dang-xiao-qiu-yu-shang-he-zi

于是对于\(M= \prod pi^{ci}\),由于每个\(pi\)是独立的,直接乘法原理相乘就好了

一开始用线性推逆元,不知道怎么回事一直最后一个点WA,最后改成阶乘版本就过了...

int n,m;
int c[maxn],tot=0;
ll fac[maxn],inv_fac[maxn];
ll C(int n,int m){
return fac[m]*inv_fac[n]%P*inv_fac[m-n]%P;
}
ll ksm(ll a){
ll ans=1;
ll c=P-2;
while(c){
if(c&1)ans=ans*a%P;
a=a*a%P;
c=c>>1;
}
return ans%P;
}
int main(){
int x,y,M;
read(n),read(m);
M=m;
for(ri i=2;i*i<=M;i++){
if(M%i==0){
c[++tot]=1;
M/=i;
while(M%i==0){M/=i;c[tot]++;}
}
}
if(M>1)c[++tot]=1;
fac[0]=fac[1]=1;
for(ri i=2;i<=size;i++)
fac[i]=fac[i-1]*i%P;
inv_fac[size]=ksm(fac[size]);
for(ri i=size-1;i>=0;i--)
inv_fac[i]=inv_fac[i+1]*1ll*(i+1)%P;
ll ans=1;
for(ri i=1;i<=tot;i++){
ans=ans*C(n-1,n+c[i]-1)%P;
}
printf("%lld\n",ans);
return 0;
}

C. ABC106-D-AtcoderExpress2

个人认为应该有NOIPT2难度了(天天爱跑步算了)

第一眼一看裸题啊!求一段区间内有多少个被完全包含的区间.冷静分析之后发现并不会做

从数据结构想到容斥还是毫无思路

然后下午睡了一觉之后一下子就想出个一看就不是正解的方法:我会二维数点!

我们对于询问/给出的区间都用\((l,r)\)表示,那么你看这个这个东西,它是不是像炉石补偿一个平面直角坐标系上的一个点

同时发现询问区间\((l,r)\),实际上就是询问有多少个点\((l_i,r_i)\)满足\(l_i>=l,r_i<=r\)

画一个图发现它其实就是求一个矩形内有多少个点,我们按照二维数点套路搞一波就好了

关于二维数点:https://www.cnblogs.com/Rye-Catcher/p/9823554.html

这里注意排序时的cmp就好了,代码同样短的可怕

int sum[maxn<<3];
int n,m,q;
inline void add(int x,int d){for(;x<=n;x+=x&(-x))sum[x]+=d;return ;}
inline int query(int x){int ans=0;for(;x;x-=x&(-x))ans+=sum[x];return ans;}
struct Pt{
int x,y,id;
bool operator <(const Pt &rhs)const{
return (x==rhs.x)?(y==rhs.y?id<rhs.id:y<rhs.y):x>rhs.x;//注意cmp
}
}pt[maxn<<2];
int tot=0,qry[maxn];
int main(){
int x,y;
read(n),read(m),read(q);
for(ri i=1;i<=m;i++){
read(x),read(y);
pt[++tot]=(Pt){x,y,0};
}
for(ri i=1;i<=q;i++){
read(x),read(y);
pt[++tot]=(Pt){x,y,i};
}
std::sort(pt+1,pt+1+tot);
for(ri i=1;i<=tot;i++){
//printf("%d %d %d %d\n",i,pt[i].id,pt[i].x,pt[i].y);
if(!pt[i].id)add(pt[i].y,1);
else qry[pt[i].id]=query(pt[i].y);
}
for(ri i=1;i<=q;i++)printf("%d\n",qry[i]);
return 0;
}

D.CF-EducationalRound52-C-MakeItEqual

这题应该比T1稍难一点

首先naiive的想法就是按照高度排序一遍后,不断向下拓展,但是发现操作繁琐,而且我的做法是一个错误的想法

然后这时候我看到值域居然只有2e5?!然后我们还是按照一样的思路一路向下拓展,如果不行的话切一刀就好了

代码同样很短

注意判0的情况,太坑了

int h[maxn],n,ans=0;
int sz[maxn],mx=0,mi=inf,mi_id;
ll k,sum=0;
int main(){
read(n),read(k);
for(ri i=1;i<=n;i++){
read(h[i]);
mx=max(mx,h[i]);
mi=min(mi,h[i]);
sz[h[i]]++;
}
int num=0;
if(mx==mi){puts("0");return 0;}
for(ri i=mx;i>=mi;i--){
sum+=num;
if(sum>k){
ans++;
sum=num;
}
num+=sz[i];
}
ans++;//最后无论如何都要切一刀
printf("%d\n",ans);
return 0;
}

E. CF-Round#485 div.2 D - Fair

这题昨天没想出来,今天看题解发现还挺简单的 雾)

关键还是思维太僵化了

我们可以用BFS求出每个点到某种颜色的最短路,时间复杂度\(O(nk)\)

然后对于每个点都$nth $_ \(element\),求出前s小的颜色距离加起来就好了

const int maxn=100005;
const int inf=0x7fffffff;
int n,m,k,s;
int col[maxn];
vector <int> fc[105];
struct Edge{
int ne,to;
}edge[maxn<<1];
int h[maxn],num_edge=1;
inline void add_edge(int f,int to){
edge[++num_edge].ne=h[f];
edge[num_edge].to=to;
h[f]=num_edge;
}
int dis[maxn][105];
inline void bfs(int c){
queue <int> q;
int u,v;
for(ri i=0;i<fc[c].size();i++)q.push(fc[c][i]);
while(q.size()){
u=q.front();q.pop();
for(ri i=h[u];i;i=edge[i].ne){
v=edge[i].to;
if(dis[v][c]!=inf)continue;
dis[v][c]=dis[u][c]+1;
q.push(v);
}
}
return ;
}
int main(){
int x,y,z;
read(n),read(m),read(k),read(s);
for(ri i=1;i<=n;i++){
read(col[i]);
fc[col[i]].push_back(i);
for(ri c=1;c<=k;c++){
dis[i][c]=inf;
}
dis[i][col[i]]=0;
}
for(ri i=1;i<=m;i++){
read(x),read(y);
add_edge(x,y);
add_edge(y,x);
}
for(ri c=1;c<=k;c++){
bfs(c);
}
int ans=0;
for(ri i=1;i<=n;i++){
ans=0;
nth_element(dis[i]+1,dis[i]+s+1,dis[i]+1+k);
for(ri j=1;j<=s;j++)ans+=dis[i][j];
printf("%d ",ans);
}
puts("");
return 0;
}

F.

Atcoder&CodeForces杂题11.6的更多相关文章

  1. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  2. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

  3. AtCoder,Codeforces做题记录

    AGC024(5.20) 总结:猜结论,“可行即最优” B: 给定一个n的排列,每次可以将一个数移到开头或结尾,求变成1,2,...,n所需的最小步数. 找到一个最长的i,i+1,...,j满足在排列 ...

  4. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  5. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  6. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  7. Codeforces刷题计划

    Codeforces刷题计划 已完成:-- / -- [Codeforces370E]370E - Summer Reading:构造:(给定某些数,在空白处填数,要求不下降,并且相邻差值<=1 ...

  8. Codeforces Beta Round #11 B. Jumping Jack 数学

    B. Jumping Jack 题目连接: http://www.codeforces.com/contest/11/problem/B Description Jack is working on ...

  9. Codeforces Beta Round #11 A. Increasing Sequence 贪心

    A. Increasing Sequence 题目连接: http://www.codeforces.com/contest/11/problem/A Description A sequence a ...

随机推荐

  1. Facebook 对 PHP 的改进

    PHP 是传统意义上的解释型语言,而不是编译型语言. 因此,在命令行或 Web 服务器调用解释器解释 PHP 代码之前,PHP 代码就是 PHP 代码.PHP 解释器会解释 PHP 脚本,把代码转换为 ...

  2. 绕过WAF、安全狗知识整理

    0x01 前言 目前市场上的WAF主要有以下几类 1. 以安全狗为代表的基于软件WAF 2. 百度加速乐.安全宝等部署在云端的WAF 3. 硬件WAF WAF的检测主要有三个阶段,我画了一张图进行说明 ...

  3. tr -d命令删除与字符无关的符号

    echo "/192.168"| tr -d '/' 结果:192.168

  4. 从Windows转mac遇到的一些坑

    本屌由于运气,分了一台imac来办公,由于以前一直都在用windows,现在用Mac有很多不适应的地方.下面介绍一下Mac与Windows有明显区别的地方: mac与windows鼠标滑轮方向不同. ...

  5. "AttributeError: /lib64/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup"

    以前在openssl,有 EVP_CIPHER_CTX_cleanup函数. 1.1.0版本中 替换成为EVP_CIPHER_CTX_reset 解决办法: 找到报错的文件vim /usr/local ...

  6. 安卓 android studio 报错 All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com

    这个问题是Android studio升级到3.0之后,运行的时候会提示gradle要升级到3.5版本才能编译.于是我把我的gradle升级到了 gradle-4.1-milestone-1 版本,是 ...

  7. Linux记录-mysql服务管理shell实现

    #!/bin/bash menu() { echo "---欢迎使用mysql管理服务程序---" echo "# 1.启动服务" echo "# 2 ...

  8. 标量子查询调优SQL

    fxnjbmhkk4pp4 select /*+ leading (wb,sb,qw) */ 'blocker('||wb.holding_session||':'||sb.username||')- ...

  9. Go并发编程实战 第2版 PDF (中文版带书签)

    Go并发编程实战 第2版 目录 第1章 初识Go语言 1 1.1 语言特性 1 1.2 安装和设置 2 1.3 工程结构 3 1.3.1 工作区 3 1.3.2 GOPATH 4 1.3.3 源码文件 ...

  10. LeetCode_392. Is Subsequence

    392. Is Subsequence Easy Given a string s and a string t, check if s is subsequence of t. You may as ...