手速选手成功混进rated only里面的前30名,但是总排名就到110+了...

A - Double Helix

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define il inline namespace io { #define in(a) a = read()
#define out(a) write(a)
#define outn(a) out(a), putchar('\n') #define I_int ll
inline I_int read() {
I_int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
char F[200];
inline void write(I_int x) {
if (x == 0) return (void) (putchar('0'));
I_int tmp = x > 0 ? x : -x;
if (x < 0) putchar('-');
int cnt = 0;
while (tmp > 0) {
F[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while (cnt > 0) putchar(F[--cnt]);
}
#undef I_int }
using namespace io; using namespace std; #define N 100010 char s[N]; int main() {
scanf("%s",s);
if(s[0] == 'A') putchar('T');
if(s[0] == 'T') putchar('A');
if(s[0] == 'G') putchar('C');
if(s[0] == 'C') putchar('G');
}

B - ATCoder

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define il inline namespace io { #define in(a) a = read()
#define out(a) write(a)
#define outn(a) out(a), putchar('\n') #define I_int ll
inline I_int read() {
I_int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
char F[200];
inline void write(I_int x) {
if (x == 0) return (void) (putchar('0'));
I_int tmp = x > 0 ? x : -x;
if (x < 0) putchar('-');
int cnt = 0;
while (tmp > 0) {
F[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while (cnt > 0) putchar(F[--cnt]);
}
#undef I_int }
using namespace io; using namespace std; #define N 100010 char s[N]; bool check(char c) {
if(c == 'A') return 1;
if(c == 'G') return 1;
if(c == 'T') return 1;
if(c == 'C') return 1;
return 0;
} int main() {
scanf("%s",s); int cnt = 0, ans = 0, n = strlen(s);
for(int i = 0; i < n; ++i) {
if(check(s[i])) ++cnt;
else ans = max(ans, cnt), cnt = 0;
}
ans = max(ans, cnt);
outn(ans);
}

C - GeT AC

这个C怎么比B还简单...

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define il inline namespace io { #define in(a) a = read()
#define out(a) write(a)
#define outn(a) out(a), putchar('\n') #define I_int ll
inline I_int read() {
I_int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
char F[200];
inline void write(I_int x) {
if (x == 0) return (void) (putchar('0'));
I_int tmp = x > 0 ? x : -x;
if (x < 0) putchar('-');
int cnt = 0;
while (tmp > 0) {
F[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while (cnt > 0) putchar(F[--cnt]);
}
#undef I_int }
using namespace io; using namespace std; #define N 100010 int n = read(), q = read();
int sum[N];
char s[N]; int main() {
scanf("%s",s+1);
for(int i = 1; i <= n; ++i) {
sum[i] = sum[i - 1];
if(s[i]=='C'&&s[i-1]=='A') {
++sum[i];
}
}
while(q--){
int l = read(), r = read();
outn(sum[r]-sum[l]);
}
}

D - We Like AGC

全场唯一有点意思的题了...直接考虑太麻烦了,dp一下。

\(f[i][j][a][b]\)表示位置i,i字符j,i-1字符a,i-2字符b。

利用map来简化判断过程: mp[1]='A'; mp[2]='C';mp[3]='G';mp[4]='T'

利用string重载了加法这个特性,也可以简化判断过程。

然后思考一下就会发现不合法的判定情况就6种(虽然我想+调了要半小时...),如下(a,b,c,d的位置是递增的)

map<int,string>mp;
bool check(int a,int b,int c, int d) { if(mp[a]+mp[c]+mp[b]=="AGC") return 0;
if(mp[a]+mp[b]+mp[d]=="AGC") return 0;
if(mp[a]+mp[c]+mp[d]=="AGC") return 0; if(mp[b]+mp[c]+mp[d]=="AGC") return 0;
if(mp[b]+mp[d]+mp[c]=="AGC") return 0; if(mp[c]+mp[b]+mp[d]=="AGC") return 0; return 1;
}

所以转移的时候再多枚举一个第i-3位的字符,就可以\(O(5^4n)\)解决这题了。注意要特判\(n\leq 2\)的情况。

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define il inline namespace io { #define in(a) a = read()
#define out(a) write(a)
#define outn(a) out(a), putchar('\n') #define I_int ll
inline I_int read() {
I_int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
char F[200];
inline void write(I_int x) {
if (x == 0) return (void) (putchar('0'));
I_int tmp = x > 0 ? x : -x;
if (x < 0) putchar('-');
int cnt = 0;
while (tmp > 0) {
F[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while (cnt > 0) putchar(F[--cnt]);
}
#undef I_int }
using namespace io; using namespace std; #define N 100010
const ll mod = 1e9 + 7;
int n = read();
ll f[N][5][5][5];
/*
f[i][j][a][b]位置i,字符j,i-1字符a,i-2字符b */
map<int,string>mp;
bool check(int a,int b,int c, int d) { if(mp[a]+mp[c]+mp[b]=="AGC") return 0;
if(mp[a]+mp[b]+mp[d]=="AGC") return 0;
if(mp[a]+mp[c]+mp[d]=="AGC") return 0; if(mp[b]+mp[c]+mp[d]=="AGC") return 0;
if(mp[b]+mp[d]+mp[c]=="AGC") return 0; if(mp[c]+mp[b]+mp[d]=="AGC") return 0; return 1;
} int main() {
if(n<=2) return outn(pow(4,n)), 0;
mp[0]='Q'; mp[1]='A'; mp[2]='C';mp[3]='G';mp[4]='T';
f[0][0][0][0]=1;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= 4; ++j)
for(int a = 0; a <= 4; ++a)
for(int b = 0; b <= 4; ++b)
for(int l = 0; l <= 4; ++l)
if(check(l,b,a,j)) (f[i][j][a][b] += f[i-1][a][b][l]) %= mod;
ll ans = 0;
for(int i = 1; i <= 4; ++i) {
for(int j = 1; j <= 4; ++j) {
for(int k = 1; k <= 4; ++k) {
(ans+=f[n][i][j][k])%=mod;
}
}
}
outn(ans);
}

AtCoder Beginner Contest 122 解题报告的更多相关文章

  1. AtCoder Beginner Contest 146解题报告

    题目地址 https://atcoder.jp/contests/abc146/tasks 感觉没有什么有意思的题... 题解 A #include <bits/stdc++.h> usi ...

  2. Atcoder Beginner Contest 124 解题报告

    心态爆炸.本来能全做出来的.但是由于双开了Comet oj一个比赛,写了ABC就去搞那个的B题 还被搞死了. 回来写了一会D就过了.可惜比赛已经结束了.真的是作死. A - Buttons #incl ...

  3. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  4. AtCoder Beginner Contest 120 解题报告

    为啥最近都没有arc啊... A - Favorite Sound #include <algorithm> #include <iostream> #include < ...

  5. AtCoder Beginner Contest 117 解题报告

    果然abc都是手速场. 倒序开的qwq. D题因为忘记1e12二进制几位上界爆了一发. A - Entrance Examination 就是除一下就行了... 看样例猜题意系列. #include& ...

  6. AtCoder Beginner Contest 132 解题报告

    前四题都好水.后面两道题好难. C Divide the Problems #include <cstdio> #include <algorithm> using names ...

  7. AtCoder Beginner Contest 129 解题报告

    传送门 写了四个题就跑去打球了.第五题应该能肝出来的. A - Airplane #include <bits/stdc++.h> using namespace std; inline ...

  8. AtCoder Beginner Contest 127 解题报告

    传送门 非常遗憾.当天晚上错过这一场.不过感觉也会掉分的吧.后面两题偏结论题,打了的话应该想不出来. A - Ferris Wheel #include <bits/stdc++.h> u ...

  9. AtCoder Beginner Contest 126 解题报告

    突然6道题.有点慌.比赛写了五个.罚时爆炸.最后一个时间不太够+没敢写就放弃了. 两道题奇奇怪怪的WJ和20/20.今天的评测机是怎么了. A Changing a Character #includ ...

随机推荐

  1. [03] SpringBoot+MyBatis+Shiro搭建杂谈

    0.写在前面的话 一直想能仿公司框架的形式,着手做一个简单的脚手架,一来是带着目标性能更好地学习,接触新的技术,另外自己如果有什么想要实现的简单需求,就可以进行快速开发,主要还是希望能在权限上有所控制 ...

  2. CF833D Red-Black Cobweb 点分治、树状数组

    传送门 统计所有路径的边权乘积的乘积,不难想到点分治求解. 边权颜色比例在\([\frac{1}{2},2]\)之间,等价于\(2B \geq R , 2R \geq B\)(\(R,B\)表示红色和 ...

  3. IDEA的Maxcomputer Studio开发

    一.安装 在IDEA中File > Settings > Plugins中Browse repositories搜索安装即可:MaxCompute Studio 二.开发UDF.UDAF. ...

  4. 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  5. 01-HTML介绍

    1.WEB标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...

  6. SVN插件和Tomcat插件地址

    SVN插件: http://subclipse.tigris.org/update_1.8.x Tomcat插件: http://tomcatplugin.sf.net/update 备注:如果svn ...

  7. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  8. 【转】安装ambari的时候遇到的ambari和hadoop问题集

    5.在安装的时候遇到的问题 5.1使用ambari-server start的时候出现ERROR: Exiting with exit code -1. 5.1.1REASON: Ambari Ser ...

  9. 【问题解决方案】editplus中批量将ANSI转换为utf-8

    来自一个用editplus写java程序但是上传到GitHub里中文乱码的故事 大致步骤: editplus全部打开之后(打开为何种编码不重要): (全部打开是指在左下方的文件列表选中-->右击 ...

  10. 【学习总结】之 3Blue1Brown系列

    刷知乎看到的,各种力荐. YouTube: https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw/featured B站: https:// ...