2020ICPC·小米 网络选拔赛第一场

C-Smart Browser

#include <string>
#include <iostream> std::string s; void solve() {
std::cin >> s;
int ans = 0, t = s[0] == 'w';
for (int i = 1; i < s.size(); i++) {
if (s[i] == 'w') {
t++;
} else {
if (t != 0) {
ans += 2 * t - 1;
t = 0;
}
}
}
if (t != 0) {
ans += 2 * t - 1;
}
printf("%d\n" ,ans);
} int main() {
solve();
return 0;
}

I-Walking Machine

思路:

一道模拟+DFS。对于每个点检查它的四个方向上的点能不能到达这个点,可以的话就DFS。

代码中处理了大量重复片段,一来减小了代码量,二来方便查错,具体细节在代码中体现。

AC代码:

#include <cstdio>
#include <cstring>
#include <iostream> #define pii pair<int, int>
#define mp(a, b) make_pair(a, b)
#define fr first
#define sc sesond const int Maxn = 1005;
const int dir[][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // W S A D int a[Maxn][Maxn], n, m, ans = 0;
bool vis[Maxn][Maxn]; inline int read() {
char ch, tar[] = "WSAD";
while ((ch = getchar()) != EOF) {
for (int i = 0; i < 4; i++) {
if (ch == tar[i]) {
return i;
}
}
}
return -1;
} std::pii getDest(int x, int y) {
int d = a[x][y];
int xx = x + dir[d][0];
int yy = y + dir[d][1];
return std::mp(xx, yy);
} void run(int x, int y, int xx, int yy); void dfs(int x, int y) {
for (int i = 0; i < 4; i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (xx >= 1 && yy >= 1 && xx <= n && yy <= m) {
run(x, y, xx, yy);
}
}
} void run(int x, int y, int xx, int yy) {
if (std::mp(x, y) == getDest(xx, yy) && !vis[xx][yy]) {
vis[xx][yy] = true;
ans++;
dfs(xx, yy);
}
} void solve() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = read();
}
}
for (int i = 1; i <= n; i++) {
run(i, 0, i, 1);
run(i, m + 1, i, m);
}
for (int i = 1; i <= m; i++) {
run(0, i, 1, i);
run(n + 1, i, n, i);
}
printf("%d\n", ans);
} int main() {
solve();
return 0;
}

A-Intelligent Warehouse

思路:

记忆化搜索。对于每个存在的数字进行一次搜索,而一些数字可能在搜索之前的数字时就被搜索过,那么直接返回之前搜索过的结果即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> const int Maxn = 10000005; int in[Maxn], a[Maxn], cnt[Maxn], maxx; int dfs(int cur) {
if (cnt[cur] != 0) {
return cnt[cur];
}
int res = a[cur]; // 至少应该包括他自己
for (int i = 2; i * cur <= maxx; i++) {
if (a[i * cur]) {
res = std::max(res, a[cur] + dfs(i * cur));
}
}
cnt[cur] = res;
return res;
} void solve() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", in + i);
maxx = std::max(maxx, in[i]);
a[in[i]]++;
}
int ans = 0;
for (int i = 0; i < n; i++) {
ans = std::max(ans, dfs(in[i]));
}
printf("%d\n", ans);
} int main() {
solve();
return 0;
}

2020ICPC·小米 网络选拔赛第一场的更多相关文章

  1. 2020ICPC·小米 网络选拔赛第一场 A.Intelligent Warehouse (DP)

    题意:给你一组数,选一些数出来组成一个排列,使得每个数都能被前一个数整除,求排列的最大元素. 题解:我们先用欧拉筛筛出\(1e7\)的质数,设\(dp[i]\)表示当前选的数都是\(i\)的约数且合法 ...

  2. 2020ICPC&#183;小米 网络选拔赛第一场 J.Matrix Subtraction (贪心,二维差分)

    题意:给一个\(nXm\)的矩阵,可以选取\(aXb\)的子矩阵,使子矩阵中的所有元素减一,问最后是否能使矩阵中所有元素变为\(0\). 题解:首先贪心,我们看最左上角的元素,如果\(g[1][1]\ ...

  3. hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)

    题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...

  4. 2021ICPC网络赛第一场部分题解-The 2021 ICPC Asia Regionals Online Contest (I)

    写在前面 本来应该6题的,结果不知道哪个铸币发了H的clar,当即把我们的思路转向三维几何上.当时我们还在想这三维计算几何的正确率有点太高了还在感叹ICPC选手的含金量,直到赛后我才知道这H题的铸币出 ...

  5. SCOI2010第一场

    NOI2010全国青少年信息学奥林匹克竞赛 四川代表队选拔赛 第一场 题目名称 幸运数字 游戏 股票交易 英文代号 luckynumber game trade 时限 2秒 2秒 2秒 输入文件 lu ...

  6. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  7. Contest1585 - 2018-2019赛季多校联合新生训练赛第一场(部分题解)

    Contest1585 - 2018-2019赛季多校联合新生训练赛第一场 C 10187 查找特定的合数 D 10188 传话游戏 H 10192 扫雷游戏 C 传送门 题干: 题目描述 自然数中除 ...

  8. 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  9. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)

    $$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...

随机推荐

  1. 【Java】集合框架(List Set Map)

    文章目录 集合框架 List(列表) ArrayList 案例 Set HashSet 案例 iterator(迭代器) Map HashMap 案例 集合总结 参考资料 重新搞一波 复习巩固 简单记 ...

  2. a[i][j] 和 a[j][i] 有什么区别?

    本文以一个简单的程序开头--数组赋值: int LEN = 10000;int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i++ ...

  3. java中如何踢人下线?封禁某个账号后使其会话立即掉线!

    需求场景 封禁账号是一个比较常见的业务需求,尤其是在论坛.社区类型的项目中,当出现了违规用户时我们需要将其账号立即封禁. 常规的设计思路是:在设计用户表时增加一个状态字段,例如:status,其值为1 ...

  4. C语言字符串结束符“\0”

    介绍 '\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写.'\0'就是 字符串结束标志. '\0'是转译字符,意思是告诉编译器,这不是字符0,而是空字符.空字符\0对应 ...

  5. leetcode刷题录-1395

    目录 题目 思考过程 查看别人分享的思路 总结 题目 题目地址:https://leetcode-cn.com/problems/count-number-of-teams/ n 名士兵站成一排.每个 ...

  6. centos7安装vsftpd最大的坑

    1.检查用户和密码没有错误2.vsftpd.conf配置没有错误3.检查/etc/vsftpd/vsftpd.conf  里面pam_service_name =vsftpd4.终极boss查看vim ...

  7. Inlook - 你的私人工作助理 V1.0.0.2

    Inlook - Your personal assistant 中文版|English version Introduction Inlook是为在桌面上直观地提醒用户收到未读邮件和日程安排而开发的 ...

  8. SQL -去重Group by 和Distinct的效率

    经实际测试,同等条件下,5千万条数据,Distinct比Group by效率高,但是,这是有条件的,这五千万条数据中不重复的仅仅有三十多万条,这意味着,五千万条中基本都是重复数据. 为了验证,重复数据 ...

  9. SQLSERVER 修改数据实例的排序规则

    SQL Server服务器修改排序规则的方法 操作及验证步骤: 1 登录数据库后,查看当前安装数据库默认排序规则的两种方式 方式一.使用SQL Server 2014 Management Studi ...

  10. java实现Excel定制导出(基于POI的工具类)

    我的需求: 项目中有一些工程表格需要导出,设计到行列合并,定制样式,原有工具类冗余,内聚性强.所以想写一个可以随意定制excel的工具类,工具类满足需求: 对于常用的工程表格有模板格式,可以任意插拔. ...