2018.09.02 Atcoder Regular Contest 102简要题解
T1
Triangular Relationship
分析之后发现有两种情况:
1. n为奇数,那么所有数都是k的倍数。
2. n为偶数,那么所有数都是k/2的倍数。
然后就可以愉快A题了。
代码:
#include<bits/stdc++.h>
#define N 200005
#define ll long long
using namespace std;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
ll n,k;
int main(){
n=read(),k=read();
if(k&1){
ll tmp=n/k;
cout<<tmp*tmp*tmp;
}
else{
ll tmp1=n/k,tmp2=tmp1;
if(n%k>=k/2)++tmp2;
cout<<tmp1*tmp1*tmp1+tmp2*tmp2*tmp2;
}
return 0;
}
T2
All Your Paths are Different Lengths
图的构造需要二进制拆分的思想。
我们把L拆分成1+2+4+…+2^n+tmp的形式。
然后对于i,i+1号点,我们连两条边,边权分别是0和2^(i-1)。
但这样有可能凑不出答案,因此需要将trnp二进制不唯一的位提出来建边。
代码:
#include<bits/stdc++.h>
using namespace std;
int l,cnt=0,tot=0,res,tmp,first[30];
struct edge{int u,v,w,next;}e[65];
inline void add(int u,int v,int w){e[++tot].u=u,e[tot].v=v,e[tot].w=w,e[tot].next=first[u],first[u]=tot;}
int main(){
cin>>l,tmp=l,res=l;
while(tmp)tmp>>=1,++cnt;
for(int i=1;i<cnt;++i)add(i,i+1,0),add(i,i+1,(1<<(i-1)));
res-=1<<(cnt-1);
tmp=1<<(cnt-1);
for(int i=0;i<=20;++i)if(((res>>i)&1))add(i+1,cnt,tmp),tmp+=1<<i;
cout<<cnt<<' '<<tot<<'\n';
for(int i=1;i<=tot;++i)cout<<e[i].u<<' '<<e[i].v<<' '<<e[i].w<<'\n';
return 0;
}
T3
Stop. Otherwise…
感觉这题比T4难啊。。。
容斥原理+组合数。
我们将问题转化成对于每一个数,有多少种凑出来的方法。
这个东西可以用组合数算出来。
最终可以推出一个式子:
ansi=∑j=0,j≤k2(−1)j(k1+k2−j−1N+k1+k2−j−1)∗2k2−j∗(jk2)" role="presentation" style="position: relative;">ansi=∑j=0,j≤k2(−1)j(k1+k2−j−1N+k1+k2−j−1)∗2k2−j∗(jk2)ansi=∑j=0,j≤k2(−1)j(k1+k2−j−1N+k1+k2−j−1)∗2k2−j∗(jk2)
其中k2" role="presentation" style="position: relative;">k2k2是和为i的时候矛盾的对数,k1" role="presentation" style="position: relative;">k1k1是没有影响的种类数,j是方案中没有用的矛盾对数。
代码:
#include<bits/stdc++.h>
#define N 2005
#define mod 998244353
#define ll long long
using namespace std;
ll C[N<<1][N<<1],mul[N<<1];
int n,k;
inline ll calc(int i,int tot){
int k2=min(k-i/2,(i-1)/2),k1=k-(k2<<1)-((i&1)==0);
ll f=1,ret=0;
for(int j=k2;j+k1>0&&j>=0;--j,f=-f)(ret+=f*C[j+k1+tot-1][j+k1-1]*mul[j]%mod*C[k2][j]%mod)%=mod;
return (ret+mod)%mod;
}
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
k=read();
n=read();
mul[0]=1;
for(int i=1;i<=4000;++i)mul[i]=(mul[i-1]<<1)%mod;
C[0][0]=1;
for(int i=1;i<=4000;++i){
C[i][0]=1;
for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
ll tmp=0;
for(int i=2;i<=2*k;++i){
if(!(i&1))tmp=(calc(i,n)+calc(i,n-1))%mod;
else tmp=calc(i,n);
cout<<tmp<<'\n';
}
return 0;
}
T4
Revenge of BBuBBBlesort!
考试时只能用假算法过掉93个点,剩下的真没办法了。
其实很简单。
对于一个点,如果i!=a[i],那么这个点一定需要被换,否则一定不能被换,因此对于每一个点i,我们算出从i开始最多连续换的区间,然后检验这个区间能否使用某种方法换回去就行了。
时间复杂度O(n)" role="presentation" style="position: relative;">O(n)O(n)
代码:
#include<bits/stdc++.h>
#define N 300005
using namespace std;
int n,a[N];
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
inline bool check(int l,int r){
int mx=0,mn=n+1;
for(int i=l;i<=r;++i)mx=max(mx,a[i]),mn=min(mn,a[i]);
if(mx!=r||mn!=l)return false;
int mx1=0,mx2=0;
for(int i=l;i<=r;i+=2){
if(mx1<a[i]&&mx2<a[i])mx1=a[i];
else if(mx2<a[i])mx2=a[i];
else return false;
}
return true;
}
int main(){
n=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=1;i<=n;++i){
if(a[i]==i)continue;
int p=i;
while(p<=n-2){
if(a[p+1]!=p+1||a[p+2]==p+2)break;
p+=2;
}
if(!check(i,p)){puts("No");return 0;}
i=p;
}
puts("Yes");
return 0;
}
2018.09.02 Atcoder Regular Contest 102简要题解的更多相关文章
- 2018.09.08 AtCoder Beginner Contest 109简要题解
比赛传送门 水题大赛? 全是水题啊!!! T1 ABC333 就是判断是不是两个数都是奇数就行了. 代码: #include<bits/stdc++.h> using namespace ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Regular Contest 102 E Stop. Otherwise...
题目链接:atcoder 大意:有\(n\)个骰子,每个骰子上面有\(k\)个数,分别是\(1\text ~ k\),现在求\(\forall i\in[2...2k]\),求出有多少种骰子点数的组合 ...
- AtCoder Regular Contest 102 (ARC102) E - Stop. Otherwise... 排列组合
原文链接https://www.cnblogs.com/zhouzhendong/p/ARD102E.html 题目传送门 - ARC102E 题意 有 $n$ 个取值为 $[1,k]$ 的骰子,对于 ...
- AtCoder Regular Contest 102 (ARC102) D All Your Paths are Different Lengths 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/ARC102D.html 题目传送门 - ARC102D 题意 给定 $L$,请你构造一个节点个数为 $n$ ,边 ...
- AtCoder Regular Contest 102 D - All Your Paths are Different Lengths
D - All Your Paths are Different Lengths 思路: 二进制构造 首先找到最大的t,使得2^t <= l 然后我们就能构造一种方法使得正好存在 0 到 2^t ...
- AtCoder Grand Contest 039 简要题解
从这里开始 比赛目录 Problem A Connection and Disconnection 简单讨论即可. Code #include <bits/stdc++.h> using ...
- AtCoder Grand Contest 040 简要题解
从这里开始 比赛目录 A < B < E < D < C = F,心情简单.jpg. Problem A >< 把峰谷都设成 0. Code #include &l ...
随机推荐
- EventUtil——跨浏览器的事件对象
. 首页 博客园 联系我 前言:什么是EventUtil?. EventUtil对象全见. addHandler方法. removeHandler方法. event对象与getEvent方法. tar ...
- shell echo 打印换行
echo -e "aaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbb"
- java垃圾回收几种算法
1.引用计数法 2.标记——清除法 3.标记——整理算法 4.copying算法 5.generation算法(新生代.老年代.持久代) 详情参考:深入理解 Java 垃圾回收机制
- oracle 数据字典
select * from dictionary; --数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的. 比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访 ...
- PHP判断客户端是PCweb端还是移动手机端方法
/** * * 根据php的$_SERVER['HTTP_USER_AGENT'] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端 * @author discuz3x * ...
- 原生nodejs 学习笔记2
本章节学习流, 流的一个好处在于减少各种异步IO的回调地狱.IO操作遍及我们各种操作,比如数据库读写,文件读写, 文件转换压缩--别的不说,比如第一节,我们要将一个HTML文件返回浏览器,就涉及IO操 ...
- 创建jsp+Servlet+JavaBean+JDBC+MySQL项目的过程
1 根据需求建立Mysql数据,确立数据库的表的字段.属性.主键,外键等.下面我使用的数据库名dev ,表名user,字段 name,设置为主键.用户名不能为空,字段password,密码 2 在E ...
- Javascript系列:总体理解
js是一个脚本客户端(浏览器)语言.和sql html类似.多练习. 没有排错的经验,弱类型语言,浏览器解释执行,出错也不会报错 预备 <!DOCTYPE html PUBLIC "- ...
- ubuntu 安装 selenium selenium操作 chrome
重装虚拟机,好多包需要重装,sele这个记得当时就找了好久的完整重装方法,这次又找了好久,,,省的下次再这样,记录下来..... ubuntu16.04 4安装seleniumsudo pip ins ...
- 72. Edit Distance (String; DP)
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...