Codeforces 1025

比赛链接

为什么我room里的都不hack别人。。那么明显的错。。

A.Doggo Recoloring

//只要能找到一个出现次数大于等于2的颜色就可以了。注意n=1特判。。
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1e5+5; int tm[300];
char s[N]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
} int main()
{
int n=read(); scanf("%s",s+1);
if(n==1) return puts("Yes"),0;
for(int i=1; i<=n; ++i) ++tm[s[i]];
for(int i='a'; i<='z'; ++i) if(tm[i]>1) return puts("Yes"),0;
puts("No"); return 0;
}

B.Weakened Common Divisor

任意一对总要有个满足的,任找一对分解质因数就可以了。

分解质因数的过程很zz。。不用筛直接枚举到sqrt(n)就行了。。

分解完后要判一次。

//61ms	2400KB
#include <cmath>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5; int n,A[N],B[N],P[N],cnt;
bool not_P[N]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
void Make_Table(int n)
{
for(int i=2; i<=n; ++i)
{
if(!not_P[i]) P[++cnt]=i;
for(int j=1; j<=cnt&&i*P[j]<=n; ++j)
{
not_P[i*P[j]]=1;
if(!(i%P[j])) break;
}
}
}
bool Check(int x)
{
for(int i=1; i<=n; ++i) if(A[i]%x && B[i]%x) return 0;
return 1;
} int main()
{
n=read();
for(int i=1; i<=n; ++i) A[i]=read(), B[i]=read();
Make_Table(sqrt(std::max(A[1],B[1])));
int now=A[1];
for(int i=1; i<=cnt&&P[i]<=now; ++i)
if(!(now%P[i]))
{
if(Check(P[i])) return printf("%d\n",P[i]),0;
if(P[i]*P[i]!=now && now!=P[i] && Check(now/P[i])) return printf("%d\n",now/P[i]),0;
while(!(now%P[i])) now/=P[i];
}
if(now!=1 && Check(now)) return printf("%d\n",now),0; now=B[1];
for(int i=1; i<=cnt&&P[i]<=now; ++i)
if(!(now%P[i]))
{
if(Check(P[i])) return printf("%d\n",P[i]),0;
if(P[i]*P[i]!=now && now!=P[i] && Check(now/P[i])) return printf("%d\n",now/P[i]),0;
while(!(now%P[i])) now/=P[i];
}
if(now!=1 && Check(now)) return printf("%d\n",now),0;
puts("-1"); return 0;
}

C.Plasticine zebra

找些串试试可以发现(串只有两种字符!真不懂我为什么拿abcd试半天),不管怎么切都相当于将串循环右移某些长度。

所以在循环表示里找最长的就可以了。注意答案对原串长度取min!

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5; char s[N]; int main()
{
scanf("%s",s+1);
int l=strlen(s+1),res=0;
for(int i=1; i<=l; ++i) s[i+l]=s[i];
l<<=1;
for(int now=1,i=2; i<=l; ++i,res=std::max(res,now))
if(s[i]!=s[i-1]) ++now;
else now=1;
printf("%d\n",std::min(res,l>>1)); return 0;
}

比赛结束后

D.Recovering BST(DP (bitset))

\(f[l][r][rt]\)表示\(l\sim r\)以\(rt\)为根是否可行,转移时枚举\(l,r,rt\),再枚举左右子树的根。当存在\(f[l][rt-1][rt_{left}]==1\ \&\&\ f[rt+1][r][rt_{right}]==1\ \&\&\ rt_{left},rt_{right}均可与rt连边\) 时,\(f[l][r][rt]=1\)。

最后一层枚举总共是\(O(r-l)\)的,一共\(O(n^4)\)。

但是一个区间是否合法,我们只需要知道左右能否拼起来。我们用\(L[l][k]/R[k][r]\)表示以\(k\)为根往左/右是否能延伸到\(l/r\)。

那么区间\([l,r]\)合法 当且仅当存在k满足 \(L[l][k]==1\ \&\&\ R[k][r]==1\)。当\([l,r]\)合法后就可以根据\(k\)更新\(L[l][r+1]\)和\(R[l-1][r]\)了。

这样只需枚举区间和子树的根,复杂度\(O(n^3)\)。

可以用bitset优化。

数据感觉好水啊。。L,R更新都错了还是在51个点WA。

另外果然有更神奇的做法。。贪心么。。?

//202ms	1800KB
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=707; int n,A[N];
bool ok[N][N],L[N][N],R[N][N],ans[N][N]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int Gcd(int a,int b){
return b?Gcd(b,a%b):a;
} int main()
{
n=read();
for(int i=1; i<=n; ++i) A[i]=read(), L[i][i]=R[i][i]=1;
for(int i=1; i<n; ++i)
for(int j=i+1; j<=n; ++j) ok[i][j]=(Gcd(A[i],A[j])>1);
for(int len=0; len<n; ++len)//得先用长度为1的区间更新一次。。
for(int l=1,r; (r=l+len)<=n; ++l)
for(int k=l; k<=r; ++k)
if(L[l][k] && R[k][r])
ans[l][r]=1, L[l][r+1]|=ok[k][r+1], R[l-1][r]|=ok[l-1][k];
puts(ans[1][n]?"Yes":"No"); return 0;
}

bitset:

//93ms	100KB
#include <cstdio>
#include <cctype>
#include <bitset>
#include <algorithm>
#define gc() getchar()
const int N=707; int n,A[N];
std::bitset<N> ok[N],L[N],R[N],ans[N]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int Gcd(int a,int b){
return b?Gcd(b,a%b):a;
} int main()
{
n=read();
for(int i=1; i<=n; ++i) A[i]=read(), L[i][i]=R[i][i]=1;
for(int i=1; i<n; ++i)
for(int j=i+1; j<=n; ++j) ok[i][j]=ok[j][i]=(Gcd(A[i],A[j])>1);
for(int len=0; len<n; ++len)
for(int l=1,r; (r=l+len)<=n; ++l)
{
ans[l]=L[l]&R[r];
if((ans[l]&ok[r+1]).count()) L[l][r+1]=1;
if((ans[l]&ok[l-1]).count()) R[r][l-1]=1;//l-1是第二维啊
}
puts(ans[1].count()?"Yes":"No"); return 0;
}

Codeforces Round #505 (Div 1 + Div 2) (A~D)的更多相关文章

  1. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  3. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  4. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  5. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  8. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

  9. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  10. Educational Codeforces Round 60 (Rated for Div. 2) 题解

    Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...

随机推荐

  1. jeecms常用的标签

    友情链接 <dt>友情链接:</dt> [@cms_friendlink_list] [#list tag_list as link] <dd><a href ...

  2. VS2010 设置main函数输入参数

    main函数的argc.argv参数. 英文版:菜单Project -> Properties -> Configuration Properties -> Debugging在Co ...

  3. My latest news

    2018.04.12  0:01 本站点停止更新,启用0x7c00.vip站点. 2018.03.23 复试报道(心态不太平稳).每一行的深入都是需要知识的积累和时间的沉淀,就像学法律.计算机等等.愿 ...

  4. 机器学习:分类算法性能指标之ROC曲线

    在介绍ROC曲线之前,先说说混淆矩阵及两个公式,因为这是ROC曲线计算的基础. 1.混淆矩阵的例子(是否点击广告): 说明: TP:预测的结果跟实际结果一致,都点击了广告. FP:预测结果点击了,但是 ...

  5. MongoDB-3.4搭建副本集

    搭建副本集 1:首先创建3台虚拟机作为配置环境 IP1:192.168.101.175 IP2:192.168.101.176 IP3:192.168.101.177 2.下载MongoDB 3.4版 ...

  6. ASP.NET自定义服务器控件

    本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel. 它的使用方式为 ...

  7. 第13月第13天 iOS 放大消失动画

    1. - (void) animate { [UIView animateWithDuration:0.9 animations:^{ CGAffineTransform transform = CG ...

  8. Aho-Corasick 多模式匹配算法、AC自动机详解

    Aho-Corasick算法是多模式匹配中的经典算法,目前在实际应用中较多. Aho-Corasick算法对应的数据结构是Aho-Corasick自动机,简称AC自动机. 搞编程的一般都应该知道自动机 ...

  9. imperva—waf 敏感字段显现

    imperva WAF中看到的日志内容信息有些都是敏感的  比如登录登出的信息 如何调整敏感信息的现实方式,并可以自定义敏感字段? 这里添加字段就可以了 这样就将******转变为明文了

  10. 使用/dev/uinput的简要介绍(含demo程序)【转】

    转自:https://blog.csdn.net/zhongkunjia/article/details/75142699 uinput机制有2个很大的优点: 1) 不用自己写驱动(比如弄个红外遥控器 ...