传送链接~

ARC102

前言

实在是太菜了。。。。写完第一题就弃疗。。感觉T3好歹也是道可做题吧!!然后T2怎么又是进制拆分!

正文

A

  • 题意 给你两个数字\(n,k(1 \leq n,k \leq 2e5)\) 求出有序对\((a,b,c)\) 的数量 使得满足\((a,b,c \leq n)\) 且 \(a+b , a+c , b+c\) 都是\(k\)的倍数

  • 题解 可以很快地发现 \(a mod k == b mod k == c mod k\) 且 \((a+b) mod k == 0\) 那么\(a,b,c\) 模 \(k\) 之后的情况只剩下了两种
    • 都等于0
    • 都等于 \(\frac{k}{2}\)
#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=1e5+10;
int yz[N];

int main(){
    int n,k;scanf("%d%d",&n,&k);
    LL ans=0;
    LL gg=n/k;
    ans=gg*gg*gg;
    if(k%2==0){
        LL pos=n/k;
        if(pos*k+(k/2)<=n) pos++;
        ans+=pos*pos*pos;
    }
    printf("%lld\n",ans);
    return 0;
}

B

  • 题意 给你一个数\(L(2 \leq L \leq 1e6)\) 让你构造出一张有向图 最多20个点 60条边 (顶点按照1,2,...标号 且满足拓扑序为 1,2,3....

  • 题解 看到最多20个点很明显可以想到二进制拆分嘛!!
    首先我们可以构造出这么一张图 ::

    然后我们拆分一下\(L\) 我们对于剩下的 可以钦定高位 让低位从\(0000..\)一直取到\(1111...\)

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=30;
struct data{
    int nt,to,w;
}a[N*N];
int b[N],head[N];
int n,m,cnt=0;

void add(int x,int y,int w){
    a[++cnt].to=y,a[cnt].w=w,a[cnt].nt=head[x],head[x]=cnt;
}

int main(){
    int L;scanf("%d",&L);
    int n=0,tmp=L;
    for(;L;L>>=1) n++;
    L=tmp;
    fr(i,1,n-1) add(i,i+1,1<<(i-1)),add(i,i+1,0);
    int gg=1<<(n-1);
    rf(i,n-1,1) if((L>>(i-1))&1) add(i,n,gg),gg+=(1<<(i-1));
    printf("%d %d\n",n,cnt);
    fr(u,1,n) for(int i=head[u];i;i=a[i].nt){
        printf("%d %d %d\n",u,a[i].to,a[i].w);
    }
    return 0;
}

C

  • 题意 给你\(n\)个骰子 每个骰子有\(k\)个面 代表的数字分别为\(1...k\) 骰子相同 对于每一个\(2 \leq i \leq 2*k\) 问有多少钟方案使得任意两个骰子相加和不为\(i\)
    \(n,k \leq 2000\)

  • 题解 组合数学 容斥
    我们考虑对于一个\(i\) 有多少对是不合法的 设为\(t\)
    那么我们可以进行容斥操作。。 枚举\(j\)对不合法的
    那么对于剩下的\(n-2*j\)个骰子 随意投 又骰子是相同的 等价于一个放球问题 \(n-2*j\)个相同的球放入\(k\)个盒子里 可以为空
    \(C_{n-2*j+k-1}^{k-1}\)

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=4010,mod=998244353;
LL jc[N]={1},ny[N];

void Mul(LL &x,LL y){
    x=(x*y)%mod;
}

void Add(LL &x,LL y){
    x=(x+y+mod)%mod;
}

LL mul(LL x,LL y){
    return x*y%mod;
}

LL q_pow(LL x,int y=mod-2){
    LL ans=1;
    for(;y;y>>=1){
        if(y&1) Mul(ans,x);
        Mul(x,x);
    }
    return ans;
}

LL C(int x,int y){
    if(x==y||!y) return 1;
    LL pos=mul(jc[x],mul(ny[y],ny[x-y]));
    //printf("%d %d %lld\n",x,y,pos);
    return pos;
}

int main(){
    int n,k;scanf("%d%d",&k,&n);
    fr(i,1,n+k) jc[i]=jc[i-1]*1LL*i%mod,ny[i]=q_pow(jc[i]);
    fr(i,2,2*k){
        int gg=i/2;
        if(i-i/2>k) gg=0;
        else if(i>k+1) gg-=(i-k-1);
        LL ans=0;
        //printf("zz%d %d\n",i,gg);
        fr(j,0,gg) {
            if(j*2>n) break;
            //printf("j=%d gg=%d n-2*j+k-1=%d k-1=%d\n",j,gg,n-2*j+k-1,k-1);
            LL pos=mul(C(gg,j),C(n-2*j+k-1,k-1));
            if(j&1) Add(ans,-pos);
            else Add(ans,pos);
        }
        printf("%lld\n",ans);
    }
    return 0;
}

D

  • 题意 给出一个\(n\)的排列 每次可以交换这个三个数\(a_{i-1},a{i},a_{i+1}\) 满足\(a_{i-1} > a_i > a_{i+1}\) 则交换\(a_{i-1}\)和\(a_{i+1}\) 问最后能否将原序列变成\(1,2,3,4...n\)

  • 题解 首先搞出\(b[]\) \(b[i]=(a[i]==i)\)
    - 如果有连续三个\(b\)是0的话显然是不可行的
    - 将\(b\)数组划分成一段一段
    对于\([l,r]\)这一段 \(a[l]至a[r]\) 的值域也必须是\([l,r]\)
    考虑\(a[i]>i\) 就看离\(a[i]\)最近的\(a[j]>i\) 之中的\(a[j]\)是否大于\(a[i]\)
    \(a[i]<i\) 同理

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=3e5+10;
int a[N],b[N];

void fail(){
    printf("No\n");
    exit(0);
}

bool check(int l,int r){
    int L=0,R=0;
    fr(i,l,r){
        if(b[i]<l||b[i]>r) return false;
        if(b[i]<i)
            if(L>b[i]) return false;
             else L=b[i];
        else if(b[i]>i)
            if(R>b[i]) return false;
             else R=b[i];
    }
    return true;
}

int main(){
    int n;scanf("%d",&n);
    fr(i,1,n) scanf("%d",&b[i]),a[i]=(b[i]==i);
    fr(i,2,n-1) if(!a[i-1]&&!a[i]&&!a[i+1]) fail();
    fr(i,1,n){
        if(!a[i]){
            int l=i,r=i,nw=0;
            while((a[r+1]^nw)&&r+1<=n) r++,nw^=1;
            //printf("%d %d\n",l,r);
            if(!check(l,r)) fail();
            i=r;
        }
    }
    printf("Yes\n");
    return 0;
}

AtCoder | ARC102 | 瞎讲报告的更多相关文章

  1. AtCoder | ARC103 | 瞎讲报告

    目录 ARC 103 A.//// B.Robot Arms C.Tr/ee D.Distance Sums ARC 103 窝是传送门QwQ A.//// 题意 : 给你\(n\)(\(n\)为偶数 ...

  2. Codeforces1101 | EducationalRound58 | 瞎讲报告

    目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division an ...

  3. Codeforces70 | Codeforces Beta Round #64 | 瞎讲报告

    目录 前言 正文 A B C D E 前言 这个毒瘤的517 放了Div1 然后D题是昨天讲的动态凸包(啊喂!我还没来的及去写 结果自己想的是二分凸包 (当然没有写出来 写完前两题之后就愉快地弃疗 C ...

  4. Codeforces1151E,F | 553Div2 | 瞎讲报告

    传送链接 E. Number of Components 当时思博了..一直在想对于\([1,r]\)的联通块和\([1,l-1]\)的联通块推到\([l,r]\)的联通块...我真的是傻了..这题明 ...

  5. Codeforces1084 | Round526Div2 | 瞎讲报告

    目录 A. The Fair Nut and Elevator B.Kvass and the Fair Nut C.The Fair Nut and String D.The Fair Nut an ...

  6. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  7. [NOIP2018模拟赛10.25]瞎搞报告

    闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...

  8. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  9. SQL Server数据库定时自动备份

    SQL Server 数据库定时自动备份[转]   在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求 ...

随机推荐

  1. 解决Mac外接显示器经常没反应

    问题描述 最近在使用绿联扩展坞的时候,发现连接显示器时,有时插上后可以正常使用,有时插上后显示器没反应. 解决办法 经过一段时间的尝试,发现这样操作可以避免出现这种问题: 关机的时候: 从转换器拔掉H ...

  2. Spring Security with Boot

    1.spring安全 boot中的应用文档https://docs.spring.io/spring-security/site/docs/current/guides/html5//hellowor ...

  3. C#版谷歌地图下载器设计与实现

    关于如何将地球经纬度坐标系统转换成程序中常用到的平面2D坐标系统,网上的文章很多,参考http://www.cnblogs.com/beniao/archive/2010/04/18/1714544. ...

  4. 《Python核心编程》第二版第五章答案

    本人python新手,答案自己做的,如果有问题,欢迎大家评论和讨论! 更新会在本随笔中直接更新. 5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型. ...

  5. 设计一个分布式RPC框架

    0 前言 提前先祝大家春节快乐!好了,先简单聊聊. 我从事的是大数据开发相关的工作,主要负责的是大数据计算这块的内容.最近Hive集群跑任务总是会出现Thrift连接HS2相关问题,研究了解了下内部原 ...

  6. 【数据结构与算法】001—栈与队列(Python)

    栈与队列 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有先进先出 ...

  7. Flume的一些报错问题解决(持续更新中)

    严谨转载--否则追究法律责任 作者----王加鸿                                                   ----------bug 1---------- ...

  8. 小米路由器设置端口转发远程登录WEB管理页及安装MT工具箱

    1. 将小米路由器ROM升级到开发版 这一点是必须的,如果是稳定版是不行的 2. 获取高级管理权限 再次确认当前使用的是开发版ROM 到这个网址http://d.miwifi.com/rom/ssh ...

  9. C语言学习记录_2019.02.23

    char类型的输出: scanf("%d",&i);//i=49; char x=i; printf("x=%d\n",x); printf(" ...

  10. MySQL下查看和赋予权限

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackgao@gmail. ...