link

C-Minimization

枚举覆盖\(1\)的区间,两边的次数直接算

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=1e5+5;
int N,K,P;
int main()
{
N=read(),K=read();
reg int i,ans=N;
for(i=1;i<=N;++i) read()==1?P=i:0;
for(i=1;i<=K;++i)if(P>=i&&P+K-i<=N)
ans=min(ans,1+(P-i+K-2)/(K-1)+(N-P-K+i+K-2)/(K-1));
printf("%d\n",ans);
}

D-Snuke Numbers

答案的序列是\(1,2,3,4,5,6,7,8,9,19,29,39,..,99,199,299,399...\)

发现每次的增量都是\(10^{i}\),所以每次比较一下\(\frac{now+10^i}{S(now+10^i)}\)和\(\frac{now+10^{i+1}}{S(now+10^{i+1})}\)

看下一个是加\(10^i\)还是\(10^{i+1}\)

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
ll D[18],d,now=1;
ll get_now(ll p){ll r=0;for(;p;r+=p%10,p/=10);return r;}
int main()
{
D[0]=1;
for(int i=1;i<=17;++i) D[i]=D[i-1]*10ll;
int n=read();
while(n--)
{
printf("%lld\n",now);
if((now+D[d])*get_now(now+2*D[d])>(now+D[d]*2)*get_now(now+D[d])) d++;
now+=D[d];
}
return 0;
}

E-Independence

考虑原图的返图,答案存在当且仅当它是一个二分图

将二分图的每个联通块黑色和白色的数量求出来,\(dp\)算出最后一个块的大小是否可以是\(i\)

对所有可行方案求出一个最小值即可

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=705;
int N,M;
bool G[MN][MN],vis[MN],col[MN],f[MN][MN];
int num[2][MN],T;
void dfs(int x)
{
++num[col[x]][T];vis[x]=true;reg int i;
for(i=1;i<=N;++i)if(i!=x&&!G[x][i])
{
if(!vis[i])col[i]=col[x]^1,dfs(i);
else if(col[i]==col[x]) {puts("-1");exit(0);}
}
}
int cal(int x,int y){return (x*(x-1)+y*(y-1))/2;}
int main()
{
N=read();M=read();
reg int i,j,x,y;
for(i=1;i<=M;++i) x=read(),y=read(),G[x][y]=G[y][x]=1;
for(i=1;i<=N;++i)if(!vis[i])++T,dfs(i);
f[0][0]=1;
for(i=0;i<T;++i)for(j=0;j<=N;++j)
f[i+1][j+num[0][i+1]]|=f[i][j],
f[i+1][j+num[1][i+1]]|=f[i][j];
int ans=MN*MN;
for(i=0;i<=N;++i)if(f[T][i])ans=min(ans,cal(i,N-i));
return 0*printf("%d\n",ans);
}

F-Eating Symbols Hard

字符串\(Hash\),求出全部操作后的字符串的哈希值,把它插入\(map\)

\[hash=\sum_{i=-1e9}^{1e9} A_i x^i
\]

求出当前前缀操作后字符串的哈希值\(num\),\(ans+=map[num]\)

求出一段当前前缀操作后再执行总操作的哈希值,把它插入\(map\)

可以定义\(num\)是有\(6\)个元素的结构体,包含分别用\(6\)个底数求出的哈希值

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
const int MN=250005;
int N;
char s[MN];
const int P=998244353;
int Add(int x,int y){return (x+y)%P;}
int Mul(int x,int y){return (1ll*x*y)%P;}
const int B[]={691,769,823,877,911,967},
inv[]={37560569,983965175,992179685,349442436,115055606,356147158};
struct node
{
int v[6];
int& operator [](int x){return v[x];}
bool operator <(const node o)const
{
for(int i=0;i<6;++i)if(v[i]!=o.v[i])return v[i]<o.v[i];
return false;
}
bool operator ==(const node o)const
{
for(int i=0;i<6;++i)if(v[i]!=o.v[i])return false;
return true;
}
}pre[MN],all;
std::map<node,int> Mp;
int pos[MN],nm[6][MN<<1],cal[MN];
node get(node x,node y,int p)
{
for(int j=0;j<6;++j)
x[j]=Add(x[j],Mul(y[j],nm[j][p]));
return x;
}
int main()
{
scanf("%d%s",&N,s+1);
reg int i,j,k;
for(j=0;j<6;++j)for(nm[j][MN]=i=1;i<=N;++i)
nm[j][i+MN]=Mul(nm[j][i-1+MN],B[j]),
nm[j][-i+MN]=Mul(nm[j][-i+1+MN],inv[j]);
for(k=j=0;j<6;++j,k=0)for(i=1;i<=N;++i)
{
switch(s[i])
{
case '<':--k;break;
case '>':++k;break;
case '+':all[j]=Add(all[j],nm[j][k+MN]);break;
case '-':all[j]=Add(all[j],P-nm[j][k+MN]);break;
}
pos[i]=k;pre[i][j]=all[j];
}
++Mp[all];
for(i=1;i<=N;++i)
cal[i]=Mp[pre[i]],
++Mp[get(pre[i],all,pos[i]+MN)];
ll ans=0;
for(i=1;i<=N;++i) ans+=cal[i];
return 0*printf("%lld\n",ans);
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

【AtCoder】 ARC 099的更多相关文章

  1. 【AtCoder】ARC 081 E - Don't Be a Subsequence

    [题意]给定长度为n(<=2*10^5)的字符串,求最短的字典序最小的非子序列字符串. http://arc081.contest.atcoder.jp/tasks/arc081_c [算法]字 ...

  2. 【Atcoder】ARC 080 E - Young Maids

    [算法]数学+堆 [题意]给定n个数的排列,每次操作可以取两个数按序排在新序列的头部,求最小字典序. [题解] 转化为每次找字典序最小的两个数按序排在尾部,则p1和p2的每次选择都必须满足:p1在当前 ...

  3. 【Atcoder】ARC 080 F - Prime Flip

    [算法]数论,二分图最大匹配 [题意]有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下. ...

  4. 【AtCoder】 ARC 097

    link C-K-th Substring 题意:找出已知串中第\(k\)大的子串,子串相同的不算 \(k\)好小啊,要怎么做啊 不是[Tjoi2015]弦论吗 算了,直接SAM吧 #include& ...

  5. 【AtCoder】 ARC 096

    link C-Half and Half 题意:三种pizza,可以花\(A\)价钱买一个A-pizza,花\(B\)价钱买一个B-pizza,花\(C*2\)价钱买A-pizza和B-pizza各一 ...

  6. 【AtCoder】 ARC 098

    link C-Attention 题意:一个字符队列,每个位置是\(W\)或\(E\),计算最小的修改数量,使得存在一个位置,它之前的都是\(E\),之后的都是\(F\) #include<bi ...

  7. 【AtCoder】 ARC 100

    link C-Linear Approximation 给出\(N\)个数\(A_1,A_2,...,A_N\) ,求一个数\(d\),最小化\(\sum_{i=1}^N|A_i-(d+i)|\) 把 ...

  8. 【AtCoder】 ARC 101

    link 搬来了曾经的题解 C-Candles 题意:数轴上有一些点,从原点开始移动到达这些点中的任意\(K\)个所需要的最短总路程 \(K\)个点必然是一个区间,枚举最左边的就行了 #include ...

  9. 【AtCoder】 ARC 102

    link C-Triangular Relationship 发现要么全部是\(K\)的倍数,要么全部是模\(K\)余\(K/2,(K=2n)\) #include<bits/stdc++.h& ...

随机推荐

  1. Java自学-操作符 逻辑操作符

    Java的逻辑运算符 逻辑运算符 示例 1 : 长路与 和 短路与 无论长路与还是短路与 两边的运算单元都是布尔值 都为真时,才为真 任意为假,就为假 区别: 长路与 两侧,都会被运算 短路与 只要第 ...

  2. English--并列句

    English|并列句 现在开始讲解英语中的最简单的长句,即并列句. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式, ...

  3. ASP.NET Core中使用Cache缓存

    ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始 ...

  4. RabbitMQ基本概念(三)-Centos7下安装RabbitMQ3.6.1

    如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧! 用什么系统 本文使用的是Centos7,为了保证对linux不太熟悉的伙伴也能轻松上手(避免折在安装的路上),下面是 ...

  5. 针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息

    整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...

  6. echarts路径图 绘制上海市52路公交车线路

    busLines = [{"coords":[[121.494687,31.253937],[121.494276,31.254031],[121.494226,31.254042 ...

  7. Django简介,请求生命周期,静态文件配置

    Web框架 ​ Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...

  8. Odoo Qweb语法

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826202.html 一:简介 QWeb是一个基于xml的模板引擎,用于生成HTML片段和页面. 模板指令 ...

  9. mysql的docker版本,如何通过docker run定制服务器选项

    一般用的是My.cnf文件. 如果要图省事呢? 以下的命令可供参考. 特别是--character-set-server=utf8 --collation-server=utf8_general_ci ...

  10. server 2012/2016上,任务管理器性能页面增加磁盘监控

    1.用管理员身份启动命令行 2.命令行中输入:diskperf -y 3.关闭之前打开的任务管理,重新打开,发现可爱的磁盘监视器出现了.