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\) ...
随机推荐
- 【java】对象变成垃圾被垃圾回收器gc收回前执行的操作:Object类的protected void finalize() throws Throwable
package 对象被回收前执行的操作; class A{ @Override protected void finalize() throws Throwable { System.out.prin ...
- 尝试在条件“$(_DeviceSdkVersion) >= 21”中对计算结果为“”而不是数字的“$(_DeviceSdkVersion)
晚上搞xamarin ,运行xamarin项目好好的,不知道怎么回事,一次运行xamarin android项目的时候,部署失败,以前也是遇到这样的错误. 尝试在条件"$(_DeviceSd ...
- ORACLE环境变量设置
用oracle帐号登录,配置相关环境变量: vi .bash_profile export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app ...
- JPA实体类注解、springboot测试类、lombok的使用
前提准备: 搭建一个springboot项目,详情请参见其它博客:点击前往 1 引入相关依赖 web.mysql.jpa.lombok <?xml version="1.0" ...
- 浅谈对ST表的一些理解
今天打了人生第一道ST表题(其实只是ST表跑得最快); ST表是一种用来解决RMQ问题的利器... 大体操作有两步: 第一部分nlogn预处理 第二部分O(1)询问 预处理就是运用倍增+区间动规 ST ...
- Appsacn 定期自动化扫描
appscan提供了计划扫描的选项,配合windows的计划任务,可以按需设定. 操作流程如下: 1.打开Appsacn--工具---扫描调度程序---新建 2.新建后显示如下窗口 3.填写好相应的设 ...
- 【自问自答】关于 Swift 的几个疑问
感觉自己给自己释疑,也是一个极为有趣的过程.这次,我还新增了"猜想"一栏,来尝试回答一些暂时没有足够资料支撑的问题. Swift 版本是:4.0.3.不同版本的 Swift,可能无 ...
- SQLServer LinkServer 链接服务器
Linked Server简介 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instance02中的数据.例如在做数据迁移时,如下语句: insert ...
- 对vuex的认识和简单理解
vuex概述 Vuex 是一个主要应用在中大型单页应用的类似于 Flux 的数据管理架构.它主要帮我们更好地组织代码,以及把应用内的的状态保持在可维护.可理解的状态. 但如果是简单的应用 ,就没有必要 ...
- 企业级memcached缓存数据库结合php使用与web管理memcached
环境 [root@cache01 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@cache01 ~]# uname -a ...