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. InvalidOperationException Cannot modify ServiceCollection after application is built .Net6 异常

    背景 我用了一个叫Unchase.Swashbuckle.AspNetCore.Extensions的库来加强Swagger的文档,我一般写法是这样的: builder.Services.AddSwa ...

  2. Built-in COM has been disabled via a feature switch.

    .net 6.0 开始默认关闭com组件 使用时会出现以下信息 Built-in COM has been disabled via a feature switch. See https://aka ...

  3. java ListMap使用多个或者任意个数的key进行排序

    使用JAVA自己的排序方法,有的时候是一个可行的选择. 先从简单的开始说起. 一.少数key的情况 有一个需求:根据 menu_level,sort排序,越小的越前面. -- 下面代码按照升序规则进行 ...

  4. 2019南京区域赛ABCHJK题解 & KM-bfs(O(n^3))板子

    A.Hard Problem 题目大意:给你一个数n,然后让你计算一个子集大小,这个大小的子集要保证一定存在一个数是另一个数的约数,求出这个最小的数. 做法:显然后面的\(\frac{n}{2}\)个 ...

  5. 呼吁 《上海市卫生健康&ldquo;信息技术应用创新白皮书》改正 C# 被认定为A 组件是错误认知

    近日,<上海市卫生健康"信息技术应用创新"白皮书>(以下简称<白皮书>)正式发布,介绍了"医疗信创核心应用适配方法.公立医院信息系统及全民健康信息 ...

  6. .NET Core 中生成验证码

    在开发中,有时候生成验证码的场景目前还是存在的,本篇演示不依赖第三方组件,生成随机验证码图片. 先添加验证码接口 public interface ICaptcha { /// <summary ...

  7. 实验5.OSPF配置实验

    # 实验5.OSPF配置实验 配置ospf使全网联通 实验组 拓扑,路由器选择为AR2220,交换机为S5700 联通配置 给每台路由器的对应端口配置相应的ip,并启动ospf协议,可以看到此时5台设 ...

  8. Sql Server中Cross Apply关键字的使用

    Sql Server中Cross Apply关键字的使用 前言 在写一个业务的时候,有1列数据如下: 车牌号 湘A00001/湘G00001 湘A00002/湘G00002 湘A00003/湘G000 ...

  9. GuavaCache、EVCache、Tair、Aerospike 缓存框架比较

    Guava Cache.EVCache.Tair.Aerospike 是不同类型的缓存解决方案,它们各有特点和应用场景.下面我会逐一分析这些缓存系统的优势.应用场景,并提供一些基本的代码示例. Gua ...

  10. MFC CFileDialog DoModal()无法弹出窗口,直接返回IDCANCEL

    最近需要用VS2017在MFC中加一个文件浏览窗口,采用了如下方式 1 CFileDialog Dlg(TRUE); 2 int res = Dlg.DoModal(); 3 if(res == ID ...