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\) ...
随机推荐
- 历史命令~/.bash_history,查看所有别名alias,命令执行顺序,命令行常用快捷键,输入输出重定向,wc统计字节单词行数
历史命令大小:/etc/profile中字段HISTSIZE=1000 历史命令保存文件:~/.bash_history history -c 清空历史命令 history -w 把历史命令写入~/. ...
- 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
package 彩票中奖码生成器; import java.util.Random; public class TestRandom { public static void main(String[ ...
- JavaScript基础4——关于语句流程控制(分支语句、循环语句等)
分支语句 (1)if...else...语句,基本格式分三种,如下 <script type="text/javascript"> var i=50; //if语句 i ...
- 下篇: php 微商城 基于Thinkphp3.2框架开发
(12)微信商城 ① 前台模板引入 a.引入微信商城模板的css+js+Images+img+bootstrap b.引入微商城的首页index.html及详情页detail.html页面模板 注意: ...
- iOS开发--数据库管理CoreData的使用
CoreData是iOS5后,苹果提供的原生的用于对象化管理数据并且持久化的框架.CoreData本质上是将底层数据库封装成对象进行管理.但数据库实际上只是CoreData的一个功能,并不是全部功能. ...
- 每周.NET前沿技术文章摘要(2017-06-21)
汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core Magic: Develop on one OS, run on another 链接:https: ...
- CentOS7.4 chrony时间同步服务器部署(替代NTPD)
Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护进程,用于调整内核 ...
- sql server 各种等待类型-转
等待的类型 资源等待 当某个工作线程请求访问某个不可用的资源(因为该资源正在由其他某个工作线程使用,或者该资源尚不可用)时,便会发生资源等待.资源等待的示例包括锁等待.闩锁等待.网络等待以及磁盘 I/ ...
- Android 获取唯一标识替代方法
private static String getTheOnlyID() { String onlyOne; //获取IMEI TelephonyManager TelephonyMgr = (Tel ...
- 3.移植uboot-使板卡支持nor、nand
在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下 ...