跟身在国外的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的更多相关文章

  1. AtCoder Regular Contest 077 E - guruguru

    https://arc077.contest.atcoder.jp/tasks/arc077_c 有m个点围成一个圈,按顺时针编号为1到m,一开始可以固定一个位置x,每次操作可以往顺时针方向走一步或直 ...

  2. AtCoder Regular Contest 077 D - 11

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_b Time limit : 2sec / Memory limit : 256MB Score ...

  3. AtCoder Regular Contest 077 C - pushpush

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_a Time limit : 2sec / Memory limit : 256MB Score ...

  4. AtCoder Regular Contest 077 被虐记&题解

    直到\(7:58\)才知道今天\(8:00\)有\(AtCoder\)的菜鸡来写题解啦. C - pushpush 题目: 给定一个长为\(n\)的序列,第\(i\)次操作做如下的事 : 将\(a_i ...

  5. AtCoder Regular Contest 077 E - guruguru 线性函数 前缀和

    题目链接 题意 灯有\(m\)个亮度等级,\(1,2,...,m\),有两种按钮: 每次将亮度等级\(+1\),如\(1\rightarrow 2,2\rightarrow 3,...,m-1\rig ...

  6. 【arc077f】AtCoder Regular Contest 077 F - SS

    题意 给你一个形如"SS"的串S,以及一个函数\(f(x)\),\(x\)是一个形如"SS"的字符串,\(f(x)\)也是一个形如"SS"的 ...

  7. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  8. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  9. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

随机推荐

  1. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  2. [array] leetcode - 33. Search in Rotated Sorted Array - Medium

    leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...

  3. python模拟shell执行脚本

    工作时候需要模拟shell来执行任务,借助包paramkio import paramiko class ShellExec(object): host = '127.0.0.1' port = 36 ...

  4. 支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)

    CSV是一种十分简洁的数据结构,在DOTNET平台实际使用中发现微软官方并没有提供默认的方法,而网上好多例子发现实现并不严谨甚至一些含有明显错误,所以后面自己实现了一个读写工具类,这里发出来希望方便后 ...

  5. [置顶] webapi token、参数签名是如何生成的

    一个问题 在这里我想问大家一句,如果你向一个刚刚接触.net web后端程序开发的同学(别人刚刚也就学了webform的request,response,会提交表单的这种刚接触不久的同学),你怎么去解 ...

  6. java中可变长参数

    ** * Created by Lenovo on 2017/12/10. * java中可变长参数 */ public class reflect04 { //m1有一个int类型的可比变长参数 / ...

  7. ElasticSearch 学习记录之ES如何操作Lucene段

    近实时搜索 提交(Commiting)一个新的段到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据.但是每次提交的一个新的段都fsync 这样操作代价过大.可以使用 ...

  8. 20行JS代码实现贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Macaca环境搭建踩坑总结

    1.使用命令 npm i macaca-android -g 安装一直不成功,使用Macaca  doctor 一直没有显示出android C:\Users\ABC>npm i macaca- ...

  10. Vue 爬坑之路(五)—— 组件进阶

    组件(Component)是 Vue.js 最强大的功能之一,之前的文章都只是用到了基本的封装功能,这次将介绍一些更强大的扩展. 一.基本用法 在使用 vue-cli 创建的项目中,组件的创建非常方便 ...