AtCoder Regular Contest 077
跟身在国外的Marathon-fan一起打的比赛,虽然最后没出F但还是涨分了。
C - pushpush
题意:n次操作,每次往一个序列后面塞数,然后把整个序列翻转。
#include<cstdio>
#include<algorithm>
#define MN 510000
using namespace std; int n,a[MN],r,l=r=;
int main(){
scanf("%d",&n);r--;
for (int i=;i<=n;i++)
if ((i&)^(n&)) scanf("%d",&a[++r]);else scanf("%d",&a[--l]);
for (int i=l;i<=r;i++) printf("%d ",a[i]);
}
D - 11
题意:在一个1到n的排列中塞进一个数a(1<=a<=n),求得到的序列的不同子序列个数。
#include<cstdio>
#include<algorithm>
#define MN 110000
using namespace std; const int MOD=1e9+;
int n,f[MN],I[MN],t[MN],a,b,m,mmh;
inline int mi(int x,int y){
int mmh=;
while(y){
if (y&) mmh=1LL*mmh*x%MOD;
y>>=;x=1LL*x*x%MOD;
}
return mmh;
}
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<)x+=MOD;}
inline int C(int n,int r){
if (n<r) return ;
return 1LL*f[n]*I[r]%MOD*I[n-r]%MOD;
}
int main(){
scanf("%d",&n);
for (int i=;i<=n+;i++){
scanf("%d",&m);
if (t[m]) a=t[m],b=i;else t[m]=i;
}
I[]=f[]=;
for (int i=;i<=n+;i++) f[i]=1LL*f[i-]*i%MOD,I[i]=mi(f[i],MOD-);
for (int i=;i<=n+;i++){
mmh=;
if (i<n) M(mmh+=C(n-,i));
if (i>) M(mmh+=C(n-,i-));
M(mmh+=C(n-,i-)*%MOD);
M(mmh-=C(n+-b+a-,i-));
//printf("%d %d\n",a,b,C(a-1,i-1),mmh);
printf("%d\n",mmh);
}
}
E - guruguru
题意:一个初始为0的数A,定义一次操作为在模m意义下把A加1,或将A变成提前设定好的数x,给n次需求,每次要把A从一个数变成另一个,要求设定x使n次需求总操作数最少。
题解:每次需求对x的影响为一个常数或一次函数,直接统计即可。
#include<cstdio>
#include<algorithm>
#define MN 210000
using namespace std; int n,m,a,b;
long long c[MN],x[MN],mmh=1e18;
int main(){
scanf("%d%d",&n,&m);scanf("%d",&a);
for (int i=;i<=n;i++){
scanf("%d",&b);
if (a<b){
c[]+=b-a;
c[a+]-=b-a;
c[b+]+=b-a; c[a+]+=b+;c[b+]-=b+;x[a+]--;x[b+]++;
}else{
c[b+]+=m-a+b;c[a+]-=m-a+b; c[a+]+=b++m;x[a+]--; c[]+=b+;c[b+]-=b+;x[]--;x[b+]++;
}
a=b;
}
for (int i=;i<=m;i++) if (c[i]+=c[i-],x[i]+=x[i-],c[i]+x[i]*i<mmh) mmh=c[i]+x[i]*i;
printf("%lld\n",mmh);
}
F - SS
题意:定义even string为形如SS的字符串,f(S)为把S变成even string需要添加的最少字符(不能不变),给出even string A,求对A做足够多次f操作后得到字符串的[l,r]内各个字符的数量。
题解:记S为A的前一半字符(A是even的),n=strlen(S),设k为最大的数满足S前n-k个字符与后n-k个字符完全相同,T=S[1...k],打打表可以发现,如果k∤n,f(A)的前一半字符为ST,然后为STS、STSST……即记g(i)为fi(A)的前一半字符,有g(i)=g(i-1)+g(i-2),如果k|n用同样方法处理也不会出错。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define MN 210000
using namespace std; ll n,k,l,r,ne[MN],w[];
char s[MN];
void work(ll r){
if (r<=n) for (ll i=;i<r;i++) w[s[i]-'a']++;else{
ll _s=,_t=,S=,T=;
for (;S*n+T*k<r;) S+=_s,T+=_t,_s=S-_s,_t=T-_t;
work(r-_s*n-_t*k);
for (ll i=;i<k;i++) w[s[i]-'a']+=_t;
for (ll i=;i<n;i++) w[s[i]-'a']+=_s;
}
}
int main(){
scanf("%s%lld%lld",s,&l,&r);
n=strlen(s)/;ne[]=-;
for (ll i=;i<n;i++){
ll j=ne[i-];
while (j!=-&&s[i]!=s[j+]) j=ne[j];
ne[i]=j+(s[i]==s[j+]);
}
k=n-ne[n-]-;
work(l-);
for (ll i=;i<;i++) w[i]=-w[i];
work(r);
for (ll i=;i<;i++) printf("%lld ",w[i]);
}
AtCoder Regular Contest 077的更多相关文章
- AtCoder Regular Contest 077 E - guruguru
https://arc077.contest.atcoder.jp/tasks/arc077_c 有m个点围成一个圈,按顺时针编号为1到m,一开始可以固定一个位置x,每次操作可以往顺时针方向走一步或直 ...
- AtCoder Regular Contest 077 D - 11
题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_b Time limit : 2sec / Memory limit : 256MB Score ...
- AtCoder Regular Contest 077 C - pushpush
题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_a Time limit : 2sec / Memory limit : 256MB Score ...
- AtCoder Regular Contest 077 被虐记&题解
直到\(7:58\)才知道今天\(8:00\)有\(AtCoder\)的菜鸡来写题解啦. C - pushpush 题目: 给定一个长为\(n\)的序列,第\(i\)次操作做如下的事 : 将\(a_i ...
- AtCoder Regular Contest 077 E - guruguru 线性函数 前缀和
题目链接 题意 灯有\(m\)个亮度等级,\(1,2,...,m\),有两种按钮: 每次将亮度等级\(+1\),如\(1\rightarrow 2,2\rightarrow 3,...,m-1\rig ...
- 【arc077f】AtCoder Regular Contest 077 F - SS
题意 给你一个形如"SS"的串S,以及一个函数\(f(x)\),\(x\)是一个形如"SS"的字符串,\(f(x)\)也是一个形如"SS"的 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
随机推荐
- APP闪退问题
1.iOS-中app启动闪退的原因 2.iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题 3.iOS-应用闪退总结 4.iOS开发-捕获程序崩溃日志 5.iOS开发-应用崩溃日 ...
- ArcGIS 网络分析[8] ArcObjects二次开发之底层网络分析开发
基于现有的线要素类.转弯要素类(在地理数据库的要素数据集中),要用AO做两件事: 1. 创建网络数据集(使用Geodatabase类库) 2. 执行网络分析(使用NetworkAnalyst类库) 在 ...
- EL表达式隐式对象
用户输入界面 ---------------------------------------------------------------------------------------- < ...
- Docker(十一):Docker实战部署HTTPS的Tomcat站点
1.选择基础镜像 docker pull tomcat:7.0-jre8 2.生成HTTPS证书 keytool -genkey -alias tomcat -keyalg RSA -keystor ...
- JavaScript的DOM编程--09--节点的替换
节点的替换: 1). replaceChild(): 把一个给定父元素里的一个子节点替换为另外一个子节点 var reference = element.replaceChild(newChild,o ...
- 微信小程序一:微信小程序UI组件、开发框架、实用库
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8079095.html 内容持续更新,维护中 邮箱 ...
- vim 高级应用
1 全文内容删除 方法1: 按ggdG方法2: :%d
- 每天学一点Docker(5)——了解Docker架构
Docker的核心组件: 1.Docker客户端 - Client 2.Docker服务器 - Docker deamon 3.Docker镜像 - Image 4.仓库 - Registry 5.D ...
- iOS微信运动 刷分
修改 iOS微信运动的数据 很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...
- Python:名片管理系统
字符串和列表学完, 自己试着写了一个非常简单的名片管理系统, 新萌尝试, 大佬们不要喷, 修改名片的功能我偷了个懒, 因为我不知道怎么通过定义下标,然后通过下标来修改列表内的字符串 我的思路是,把用户 ...