Link:

ARC064 传送门

C:

贪心+对边界的特殊处理

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAXN=1e5+;
ll res=;
int n,x,dat[MAXN];
int main()
{
scanf("%d%d",&n,&x);
for(int i=;i<=n;i++) scanf("%d",&dat[i]);
if(dat[]>x) res+=dat[]-x,dat[]=x;
for(int i=;i<=n-;i++)
if(dat[i-]+dat[i]>x)
res+=dat[i-]+dat[i]-x,dat[i]=x-dat[i-];
if(dat[n-]+dat[n]>x) res+=dat[n-]+dat[n]-x;
printf("%lld",res);
return ;
}

Problem C

D:

一道结论题

博弈题一般都要先找到最终的必败/必胜态

对于此题,只要知道最终态的位数就能得到结果,但我一开始觉得位数不定就卡题了……

虽然无法确定最终必败态的位数,但能确定必败态位数的奇偶性

重要条件:序列的两端不能动

因此当两端相等时,最终态一定为$ababa$这样,位数为偶数个;当两端不等时位数一定为奇数个

这样判断初始序列和最终序列差值的奇偶性就能得到结果

#include <bits/stdc++.h>

using namespace std;
char s[];
int main()//最终个数难以确定时观察奇偶性
{
scanf("%s",s+);int len=strlen(s+);
if(s[]==s[len])
if(len&) puts("Second"); else puts("First");
else
if(len&) puts("First"); else puts("Second");
return ;
}

Problem D

由于答案由奇偶性判断,考虑最终态位数的奇偶性即可

E:

为了简化模型,想成走到圆心再从圆心出发,仍能保证最优解

于是两两连边跑最短路就行了(其实可以不用连边,每次找最近的走就行了)

#include <bits/stdc++.h>

using namespace std;
#define x first
#define y second
const int MAXN=;
const double INF=1e13,eps=1e-;
typedef pair<double,double> P;
P S,T,pos[MAXN];
vector<P> G[MAXN];
int n;double r[MAXN],d[MAXN]; double dist(P a,P b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));} int main()//其实可以不用连边,每次找最近的走就行了……
{
scanf("%lf%lf%lf%lf%d",&S.x,&S.y,&T.x,&T.y,&n);
for(int i=;i<=n;i++)
scanf("%lf%lf%lf",&pos[i].x,&pos[i].y,&r[i]);
pos[]=S;pos[n+]=T;
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
if(i!=j)
{
if(r[i]+r[j]>dist(pos[i],pos[j]))
G[i].push_back(P(j,));
else G[i].push_back(P(j,dist(pos[i],pos[j])-r[i]-r[j]));
} priority_queue<P,vector<P>,greater<P> > q;
for(int i=;i<MAXN;i++) d[i]=INF;
d[]=;q.push(P(,));
while(!q.empty())
{
P t=q.top();q.pop(); int u=t.y;
if(d[u]<t.x) continue;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i].x;
if(d[v]>d[u]+G[u][i].y)
d[v]=d[u]+G[u][i].y,q.push(P(d[v],v));
}
}
printf("%.10lf",d[n+]);
return ;
}

Problem E

F:

一开始全在考虑如何去掉不合法的状态,但其实正向求解更方便

回文串共有$k^{n/2}$个,旋转后就有$k^{n/2}*n$个,但明显要去除重复的

观察到重复的原因是从一个回文串转移到了另一个回文串(或自己)

转移的步数与循环节有关:

(1)循环节为奇数时能转移$x$步,回到自己

(2)循环节为偶数时只能转移$x/2$步

因此只要计算构成每种循环节的组合数再乘上此时能转移的步数即可

令$dp[i]$表示最小循环节为$i$时的组合数,明显$dp[i]=k^{(i+1)/2}- \sum_{j|i} dp[j]$

(为了最终为回文数,每个循环节也要为回文数)

那么$res=\sum_{i|n} dp[i]*x(x/2)$

(Tip:$1e9$内因数最多的数的因数个数为1344,因此$O(d^2)$可行)

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAXN=1e5+,MOD=1e9+;
int n,k,dvs[MAXN],dp[MAXN],tot,res=; ll quick_pow(ll a,ll b)
{
ll ret=;
for(;b;b>>=,a=a*a%MOD)
if(b&) ret=ret*a%MOD;
return ret;
} int main()
{
scanf("%d%d",&n,&k);
for(int i=;i*i<=n;i++)
if(n%i==)
{
dvs[++tot]=i;
if(i*i!=n) dvs[++tot]=n/i;
}
sort(dvs+,dvs+tot+);
for(int i=;i<=tot;i++)
{
dp[i]=quick_pow(k,(dvs[i]+)/);
for(int j=;j<=i-;j++)//对循环节长度的分类
if(dvs[i]%dvs[j]==) dp[i]=(dp[i]-dp[j]+MOD)%MOD;
if(dvs[i]%==) (res+=1ll*dp[i]*dvs[i]/%MOD)%=MOD;
else (res+=1ll*dp[i]*dvs[i]%MOD)%=MOD;
}
printf("%d",res);
return ;
}

Problem F

其实不算难的一道题目

当一种思路淦不出来时要赶紧换方向啊

[Atcoder Regular Contest 064] Tutorial的更多相关文章

  1. [Atcoder Regular Contest 060] Tutorial

    Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$s ...

  2. [Atcoder Regular Contest 061] Tutorial

    Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ...

  3. [Atcoder Regular Contest 065] Tutorial

    Link: ARC065 传送门 C: 最好采取逆序贪心,否则要多考虑好几种情况 (从前往后贪心的话不能无脑选“dreamer”,"er"可能为"erase"/ ...

  4. [Atcoder Regular Contest 063] Tutorial

    Link: ARC063 传送门 C: 将每种颜色的连续出现称为一段,寻找总段数即可 #include <bits/stdc++.h> using namespace std; ,len; ...

  5. [Atcoder Regular Contest 062] Tutorial

    Link: ARC 062 传送门 C: 每次判断增加a/b哪个合法即可 并不用判断两个都合法时哪个更优,因为此时两者答案必定相同 #include <bits/stdc++.h> usi ...

  6. AtCoder Regular Contest 064 F - Rotated Palindromes

    Problem Statement Takahashi and Aoki are going to together construct a sequence of integers. First, ...

  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. 【可持久化线段树?!】rope史上最全详解

    https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法——rope!! ...

  2. POJ1511:Invitation Cards(最短路)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 34743   Accepted: 114 ...

  3. Ubuntu 编译Webkit --gtk

    转载自:http://www.linuxidc.com/Linux/2011-10/44809.htm webkit是一个浏览器内核,google的chrome就是基于它的,下面介绍一下如何在Ubun ...

  4. ES6学习笔记(三)—— Set 和 Map

    SetES6提供的数据结构,类似于数组,但是成员的值都是唯一的.(提供了一种数组去重的方法) Set 内部判断两个值是否相同使用的是 'Same-value equality',类似于 ===但是 N ...

  5. 转:强化学习(Reinforcement Learning)

    机器学习算法大致可以分为三种: 1. 监督学习(如回归,分类) 2. 非监督学习(如聚类,降维) 3. 增强学习 什么是增强学习呢? 增强学习(reinforcementlearning, RL)又叫 ...

  6. 【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]

    看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看 ...

  7. bzoj 2142 国家集训队试题 礼物

    问题转化成求C(N,M) mod P p为非素数,那么我们可以将P分解质因数, 也就是 π pi^ci的形式,因为这些pi^ci是互质的,所以我们可以用crt将他们合并 那么问题就转化成了快速求C(N ...

  8. mysql 四 表操作

    表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 本节重点: 1 创建 ...

  9. JAVA中“==”和equals

     A."=="可用于基本类型和引用类型: 当用于基本类型时候,是比较值是否相同:1==2: false: 当用于引用类型的时候,是比较是否指向同一个对象.  B.基本类型int.c ...

  10. SpringBoot集成整合pageHelper分页插件

    今天来讲讲springboot 集成 pagehelper插件, 引入jar 依赖包 <!-- 分页插件 --><dependency> <groupId>com. ...