前言:依旧菜,\(A\)了\(4\)题,不过这次上蓝了挺开心的。

A. Make a triangle!

Description

给出\(3\)根木棍,希望用它们拼成三角形,可以将其中的某些木棍增长,求至少需要增长多少才能拼成一个三角形。

Solution

水题,答案就是最长的木棍长度减去剩下两根木棍的长度和再\(+1\),如果为负则输出\(0\)(即本来就能拼成三角形)。

#include<cstdio>
using namespace std;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline void sw(int &x, int &y)
{
int z = x;
x = y;
y = z;
}
int main()
{
int a, b, c;
a = re();
b = re();
c = re();
if (a < b)
sw(a, b);
if (a < c)
sw(a, c);
if (b < c)
sw(b, c);
if (b + c > a)
printf("0");
else
printf("%d", a - b - c + 1);
}

B. Equations of Mathematical Magic

Description

给出\(a\),求方程\(a - (a\oplus x) - x = 0\)的解的个数(\(\oplus\)为\(xor\)操作)

Solution

找规律,样例很贴心的给出最大数,于是我大力猜结论,核对机房大佬的表后发现正确,非常愉快。

结论:设\(s\)为\(a\)在二进制下\(1\)的个数,则答案就是\(2^s\)。

然而并不会证明

#include<cstdio>
using namespace std;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
int main()
{
int a, s, i, t = re();
while (t--)
{
s = 0;
a = re();
for (i = 30; ~i; i--)
if (a & (1 << i))
s++;
printf("%d\n", 1 << s);
}
return 0;
}

C. Oh Those Palindromes

Description

给你一个字符串,你可以任意改变串中字符的位置,求构造一个有最多回文子串的字符串。

Solution

构造题,一开始想的很复杂,然后打到一半,机房大佬突然说,只要将相同的字符扔在一起就好了。。

所以这题就是一个\(sort\)的事。。因为我是在打到一半的代码临时改的,所以直接在计数数组上构造了。

#include<cstdio>
using namespace std;
const int N = 1e5 + 10;
const int M = 300;
struct dd{
int s;
char c;
};
dd a[M];
int mp[M], l;
char an[N];
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline void re_l()
{
char c = getchar();
for (; c < 'a' || c > 'z'; c = getchar());
for (; c >= 'a' && c <= 'z'; c = getchar())
{
if (!mp[c])
{
a[++l].c = c;
a[l].s = 1;
mp[c] = l;
}
else
a[mp[c]].s++;
}
}
int main()
{
int i, k = 0, j;
re();
re_l();
for (i = 1; i <= l; i++)
for (j = 1; j <= a[i].s; j++)
an[++k] = a[i].c;
for (i = 1; i <= k; i++)
putchar(an[i]);
return 0;
}

D. Labyrinth

Description

一个迷宫,部分格子有障碍物不能走,而你向左和向右走的步数有限制,向上和向下则没有限制,求你一共能到达多少个格子。

Solution

为了到达某个格子是最优情况(剩余向左向右的步数尽量多),可以使用双端队列\(+BFS\),将向上或下走的插入队首,向左或向右的插入队尾,正常\(BFS\)即可。

因为我和机房大佬们一开始想复杂了,我打了\(3.4k\),结果我打挂了。。最后\(1\)分钟的时候,就想着交个暴力算了,于是爆改代码到\(1.6k\),离结束\(15s\)的时候\(pp\)了。

结果因为我恰好改的就是双端队列\(+BFS\)(一开始想的也是基于这个)暴力搜,结果\(A\)了。。。

因为临时爆改,代码很冗长,\(BFS\)里的两个\(if\)和一个\(for\)其实可以合在一起,凑合着看吧。

#include<cstdio>
#include<deque>
using namespace std;
const int N = 2010;
struct dd{
int x, y, mx, my;
};
dd X, Y;
int a[N][N], b[N][N], mo_x[2] = {1, -1}, mo_y[2] = {0, 0}, n, m, s;
deque<dd>q;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline void re_l(int i)
{
int k = 0;
char c = getchar();
for (; c != '.' && c != '*'; c = getchar());
for (; c == '.' || c == '*'; c = getchar())
{
a[i][++k] = c == '*' ? -1 : 0;
b[i][k] = a[i][k];
}
}
int main()
{
int i, j, s = 0;
n = re();
m = re();
X.x = re();
X.y = re();
X.mx = re();
X.my = re();
for (i = 1; i <= n; i++)
re_l(i);
a[X.x][X.y] = 1;
q.push_back(X);
while (!q.empty())
{
X = q.front();
q.pop_front();
Y = X;
for (i = 0; i < 2; i++)
{
Y.x = X.x + mo_x[i];
if (!a[Y.x][Y.y] && Y.x > 0 && Y.x <= n && Y.y > 0 && Y.y <= m)
{
a[Y.x][Y.y] = 1;
q.push_front(Y);
}
}
if (X.mx > 0)
{
Y = X;
Y.y--;
Y.mx--;
if (!a[Y.x][Y.y] && Y.x > 0 && Y.x <= n && Y.y > 0 && Y.y <= m)
{
a[Y.x][Y.y] = 1;
q.push_back(Y);
}
}
if (X.my > 0)
{
Y = X;
Y.y++;
Y.my--;
if (!a[Y.x][Y.y] && Y.x > 0 && Y.x <= n && Y.y > 0 && Y.y <= m)
{
a[Y.x][Y.y] = 1;
q.push_back(Y);
}
}
}
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (a[i][j] > 0)
s++;
printf("%d", s);
return 0;
}

CF Round #516 (Div. 2, by Moscow Team Olympiad)的更多相关文章

  1. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)

    题目链接 A. Make a triangle! 题意 让某段最少增加多少使得构成三角形 思路 让较小两段往最长段去凑 代码 #include <bits/stdc++.h> #defin ...

  2. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth

    http://codeforces.com/contest/1064/problem/D 向上/向下加0,向左/右加1, step = 0,1,…… 求的是最少的步数,所以使用bfs. step=k ...

  3. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth(重识搜索)

    https://codeforces.com/contest/1064/problem/D 题意 给你一个有障碍的图,限制你向左向右走的次数,问你可以到达格子的个数 思路 可以定义状态为vi[x][y ...

  4. [Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) ](A~E)

    A: 题目大意:给你$a,b,c$三条边,可以给任意的边加任意的长度,求最少共加多少长度使得可以构成三角形 题解:排个序,若可以组成,输出$0$,否则输出$c-a-b+1(设a\leqslant b\ ...

  5. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins

    http://codeforces.com/contest/876/problem/D 题意: 最开始有一串全部由"O"组成的字符串,现在给出n个数字,指的是每次把位置n上的&qu ...

  6. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) C. Classroom Watch

    http://codeforces.com/contest/876/problem/C 题意: 现在有一个数n,它是由一个数x加上x每一位的数字得到的,现在给出n,要求找出符合条件的每一个x. 思路: ...

  7. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) B. Divisiblity of Differences

    http://codeforces.com/contest/876/problem/B 题意: 给出n个数,要求从里面选出k个数使得这k个数中任意两个的差能够被m整除,若不能则输出no. 思路: 差能 ...

  8. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal

    http://codeforces.com/contest/876/problem/A 题意: 一个人一天要吃n次蜂蜜,他有3个朋友,他第一次总是在一个固定的朋友家吃蜂蜜,如果说没有吃到n次,那么他就 ...

  9. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)

    A. Trip For Meal 题目链接:http://codeforces.com/contest/876/problem/A 题目意思:现在三个点1,2,3,1-2的路程是a,1-3的路程是b, ...

随机推荐

  1. Pandas统计分析

    Pandas统计分析 pandas数据的基本统计分析 和numpy的函数近似 dates = pd.date_range(',periods=10) dates df = pd.DataFrame(n ...

  2. js基础-数组及数据类型

    数组也是引用类型 构造函数创建数组 Object 构造函数类型(所有类型基类)   Array 构造函数类型 求幂运算符 **   2**32-1 数组容量最大 arry.length 如果减小len ...

  3. LisView控件

    用LisView控件在窗体中创建一个表,设置一个按钮,点击按钮, 将数据库中的表在这个控件中显示(LisView控件中表格式列名与数据库中一致) 首先使用控件将表的每一列创建好,加入一个按钮,如图,现 ...

  4. 基于WebQQ3.0协议写一个QQ机器人

    最近公司需要做个qq机器人获取qq好友列表,并且能够自动向选定的qq好友定时发送消息.没有头绪,硬着头皮上 甘甜的心情瞬间变得苦涩了 哇 多捞吆 1.WEBQQ3.0登陆协议 进入WEBQQ, htt ...

  5. 前端三大框架之一React入门教程

    相信大家对框架这个词都很熟悉吧,我一直喜欢js原生来开发,但是目前都要求工作效率,所有使用框架或者是库会使我们开发更加方便和快速,甚至一个人干十个人的活.. 框架优点: 1.方便开发.快速写功能 2. ...

  6. springboot 线程池

    我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务: 本 ...

  7. 加载 AssetBundle 的四种方法

    [加载 AssetBundle 的四种方法] 1.AssetBundle.LoadFromMemoryAsync(byte[] binary, uint crc = 0); 返回AssetBundle ...

  8. ServiceWork的五种状态

    [ServiceWork的五种状态] installing.installed.activating.activated.redundant 参考:https://developer.mozilla. ...

  9. javase中javax源码下载地址

    OracleJDK 和 OpenJDK 源码都可以参考. OpenJDK 源码下载 http://hg.openjdk.java.net/jdk7/jdk7/jdk/file 我主要是想下载 java ...

  10. python3使用paramiko操作远程机器

    目标:有A和B两台机器,希望在机器A上操作B上的脚本   解决方法:使用paramiko实现操作远程机器   1.安装paramiko   安装第三方包[pip3 install paramiko] ...