Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)

A - First ABC (atcoder.jp)

记录一下\(ABC\)是否都出现过了然后输出下标

#include <bits/stdc++.h>
#define int long long using namespace std; signed main() { ios::sync_with_stdio(false);cin.tie(nullptr); int n;
string s;
cin >> n >> s;
bitset<3> v;
for(int i = 0;i < n;i ++){
v[s[i] - 'A'] = 1;
if(v[0] && v[1] && v[2]){
cout << i + 1<< endl;
break;
}
} return 0;
}

B - Vacation Together (atcoder.jp)

数据范围小暴力寻找即可

#include <bits/stdc++.h>
#define int long long using namespace std; signed main() { ios::sync_with_stdio(false);cin.tie(nullptr); int n,d;
cin >> n >> d;
vector<string> g(n);
for (int i = 0; i < n; ++i) {
cin >> g[i];
} int ans = 0;
for(int i = 0;i < d ;i++){
for(int j = d;j >= i; j--){
bool f = true;
for(auto k : g){
if(k.substr(i,j - i + 1) != string(j - i + 1,'o'))
f = false;
}
if(f) ans = max(ans, j - i + 1);
}
}
cout << ans << endl; return 0;
}

还是jiangly的思路巧妙啊,用一个初始化全为\(true\)的bool数组就好了, 每次去跑一遍字符串,将对应位置\(x\)更新为\(false\),最后找出连续最长的\(true\)就好了,这个比暴力找快了7,8倍

#include <bits/stdc++.h>

using i64 = long long;

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); int N, D;
std::cin >> N >> D; std::vector<bool> ok(D, true);
for (int i = 0; i < N; i++) {
std::string s;
std::cin >> s;
for (int j = 0; j < D; j++) {
if (s[j] == 'x') {
ok[j] = false;
}
}
} int ans = 0;
int len = 0;
for (auto x : ok) {
len = x ? 1 + len : 0;
ans = std::max(ans, len);
}
std::cout << ans << "\n"; return 0;
}

C - Find it! (atcoder.jp)

题意就是找出一个环

哎,我还是传统dfs的

#include <bits/stdc++.h>
#define int long long using namespace std; const int N = 2e5 + 10; signed main() { ios::sync_with_stdio(false);cin.tie(nullptr); int n;
cin >> n;
vector<int> g[n + 1];
vector<int> fa(n + 1);
iota(fa.begin(),fa.end(),0);
for(int i = 1,a ;i <= n;i ++){
cin >> a;
g[i].push_back(a);
} bool ok = false;
vector<int> ans;
bitset<N> vis;
int len = 1;
function<void(int,int)> dfs = [&](int u,int v) -> void {
for(auto i : g[u]){
if(vis[i]){
int p = 0;
for(auto j : ans){
if(j != i)
p++;
else
break;
}
cout << len - p << endl;
for(int j = p;j < ans.size();j ++ ){
cout << ans[j] << ' ';
}
exit(0);
}
if(i == v) continue;
len++;
ans.push_back(i);
vis[i] = 1;
dfs(i,u);
len--;
vis[i] = 0;
ans.pop_back();
}
}; for(int i = 1;i <= n;i ++){
vis.reset();
len = 1;
vis[i] = 1;
ans.push_back(i);
dfs(i,i);
ans.pop_back();
} return 0;
}

每日佩服jiangly(

他的思路很巧妙啊(或许是我太傻了,用一个链表的思路就解决了

#include <bits/stdc++.h>

using i64 = long long;

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); int N;
std::cin >> N; std::vector<int> A(N);
for (int i = 0; i < N; i++) {
std::cin >> A[i];
A[i]--;
} std::vector<bool> vis(N);
int i = 0;
while (!vis[i]) {
vis[i] = true;
i = A[i];
}
int j = i;
std::vector<int> ans;
do {
ans.push_back(j);
j = A[j];
} while (j != i);
std::cout << ans.size() << "\n";
for (int i = 0; i < ans.size(); i++) {
std::cout << ans[i] + 1 << " \n"[i == ans.size() - 1];
} return 0;
}

D - Grid Ice Floor (atcoder.jp)

借鉴jiangly,其实赛时我感觉咱的思路也和他很接近了,但是一直没调出来,看了jiangly的才发现他是一个vis数组判断是否走过,一个pass数组记录走过的路径,而我是一个vis数组将两个功能一起合体了(或许就是这里错了吧

#include <bits/stdc++.h>
#define int long long using namespace std; const int N = 2e5 + 10; signed main() { ios::sync_with_stdio(false);cin.tie(nullptr); int n,m;
cin >> n >> m;
vector<string> g(n);
vector<bitset<320>> vis(320),pass(320);
for(auto &i : g) cin >> i; int u[] = {0,0,-1,1};
int v[] = {1,-1,0,0};
queue<pair<int,int>> Q;
Q.emplace(1,1);
pass[1][1] = vis[1][1] = true;
while(Q.size()){
auto [x,y] = Q.front();
Q.pop(); for(int i = 0;i < 4;i ++){
int dx = x;
int dy = y; while(g[dx][dy] == '.'){
pass[dx][dy] = true;
dx += u[i];
dy += v[i];
}
dx -= u[i];
dy -= v[i];
if(!vis[dx][dy]){
vis[dx][dy] = true;
Q.emplace(dx,dy);
}
}
} int ans = 0;
for(int i = 1;i < n;i ++)
for(int j = 1;j < m;j ++)
ans += pass[i][j];
cout << ans << endl; return 0;
}

AtCoder Beginner Contest 311的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  10. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. windows server 安装.net framework 3.5失败

    windows server如果高版本的.net framework 那么在安装.net framework3.5时会提示已安装高版本的不能安装低版本的了 ---------------------- ...

  2. C# .NET 常见DeepCopy 深度拷贝的性能对比

    先上结论 Method Mean Error StdDev Gen0 Gen1 Allocated JSONConvert 2,273.02 ns 43.758 ns 52.091 ns 0.6599 ...

  3. readhat8搭建SFTP双机高可用并配置Rsync数据实时同步

    环境准备: 主机 host-61-118 : 192.168.61.118 host-61-119:192.168.61.119 vip:192.168.61.220 检测openssh版本,版本必须 ...

  4. Linux常用耗资源命令汇总

    在Linux中,以下命令可能在处理大量数据或复杂操作时比较消耗资源.一般来说,涉及大量数据处理.计算或者I/O操作的命令会比较耗费系统资源. ​ 注意:所有命令资源消耗都是相对的,基于文件的处理量来展 ...

  5. 开源云同步的markdown写作软件——Yosoro

    文章目录 前言 简便的项目管理 舒服的写作体验 支持one driver 存在缺点 前言 Yosoro是一款支持在Win.Linux.macOS上使用的写作软件.它的界面设计以及交互上表达出的极简主义 ...

  6. python调用微信JS_SDK及使用redis缓存access_token 和jsapi_ticket

    from flask import Flask, make_response,request import json import string import hashlib import rando ...

  7. 深入理解Prometheus: Kubernetes环境中的监控实践

    在这篇文章中,我们深入探讨了Prometheus在Kubernetes环境中的应用,涵盖了从基础概念到实战应用的全面介绍.内容包括Prometheus的架构.数据模型.PromQL查询语言,以及在Ku ...

  8. UML建模、设计原则

    # UML统一建模语言 定义: 用于软件系统设计与分析的语言工具 目的: 帮助开发人员更好的梳理逻辑.思路 官网: https://www.omg.org/spec/UML 画图工具可以用在线网址:h ...

  9. 免费CDN使用整理

    免费CDN使用整理 最近在使用web优化的时候,需要用到cdn,遇到了一些问题,比如某些cdn在特定的条件下访问不同,整理一波免费的CDN,任君采撷 名称 国家 链接 测速 特色 UNPKG 国外 h ...

  10. webpack4.15.1 学习笔记(七) — 懒加载(Lazy Loading)

    懒加载或者按需加载,是一种很好的优化网页或应用的方式.实际上是先把代码在一些逻辑断点处分离开,然后在一些代码块中完成某些操作后,立即引用或引用另外一些新的代码块.这样加快了应用的初始加载速度,减轻了它 ...