前言:依旧菜,\(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. BOS物流项目第十一天

    教学计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 a.  在spring文件中配置开启shiro注解支持 b.  在Action方法上使用注解 3.使用shiro的标签进 ...

  2. find命令归总

    -amin n  (主要指是否被读取过)对文件的最近一次访问是在 n 分钟之前. 例如:find /opt/* -amin 1 -type f  (找出1分钟之前的/opt下的所有文件) -atime ...

  3. 微信小程序商品筛选,侧方弹出动画选择页面

    https://blog.csdn.net/qq_36538012/article/details/85110641

  4. app.route()

    [app.route()] 可使用 app.route() 创建路由路径的链式路由句柄.由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误.请参考 Router() 文 ...

  5. XSSExcelUtil

    package com.numa.util; import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util.HSSFCo ...

  6. selenium ide界面介绍

    Selenium Ide是firefox浏览器的一个插件,可以进行web的录制和回放,完成简单的自动化测试,同时可以将录制的脚本导出多种语言的脚本. 下面是Selenium Ide的界面: Base  ...

  7. 581. Shortest Unsorted Continuous Subarray

      Given an integer array, you need to find one continuous subarray that if you only sort this subarr ...

  8. FileItem类的常用方法(关于文件上传的)

    1.boolean  isFormField().isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段.如果是普通文本表单字段,返回一个tr ...

  9. Zabbix3.2下Template App Zabbix Server+Template OS Linux Item

    序号 Name Key 返回值 释义1 Agent ping agent.ping 1 就是ping一下2 Avaliable memory vm.memory.size[available] 563 ...

  10. 吉哥系列故事——恨7不成妻(数位DP)

    吉哥系列故事——恨7不成妻 http://acm.hdu.edu.cn/showproblem.php?pid=4507 Time Limit: 1000/500 MS (Java/Others)   ...