首页 > 其他分享 >ABC279 复盘

ABC279 复盘

时间:2023-12-14 23:25:55浏览次数:30  
标签:std int cin fa using include ABC279 复盘

ABC279 复盘

At 链接

LG 链接

[ABC279A] wwwvvvvvv

思路解析:纯模拟,遍历到哪个字母就加几分

#include<bits/stdc++.h>
using namespace std;
string str;
int main() {
	cin >> str;
	long long ans = 0;
	for(int i = 0; i < str.size(); i++) {
		if(str[i] == 'w') {
			ans += 2;
		}
		else if(str[i] == 'v') {
			ans++;
		}
	}
	cout << ans;
	return 0;
}

[ABC279B] LOOKUP

思路解析:最基础的字符串匹配,用朴素算法即可,但我很皮手打了个 kmp ^_^

#include<bits/stdc++.h>
using namespace std;
string s, t;
int nxt[114514];
int main() {
	cin >> s >> t;
	for(int i = s.size(); i > 0; i--) {
		s[i] = s[i - 1];
	}
	for(int i = t.size(); i > 0; i--) {
		t[i] = t[i - 1];
	}
	for(int i = 2, j = 0; i <= t.size(); i++) {
		while(j && t[i] != t[j + 1]) {
			j = nxt[j];
		}
		if(t[i] == t[j + 1]) {
			nxt[i] = j + 1;
		}
	}
	for(int i = 1, j = 0; i <= s.size(); i++) {
		while(j && s[i] != t[j + 1]) {
			j = nxt[j];
		}
		if(s[i] == t[j + 1]) {
			j++;
			if(j >= t.size()) {
				cout << "Yes";
				return 0;
			}
		}
	}
	cout << "No";
	return 0;
}

[ABC279C] RANDOM

思路解析:由于只能交换列,所以我们把每个列用一个 string 存下来,然后排序将每个 string 进行比较,若全部相同则说明两个字符矩阵中的每一列都有另一个字符矩阵中的一列对应

错因:没想到如何在输入时就存下来单独的一列,因此爆内存

#include<bits/stdc++.h>
using namespace std;
const int N = 4e5 + 10;
int n, m;
string sa[N], sb[N];
int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			char ch;
			cin >> ch;
			sa[j].push_back(ch);
		}
	}
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			char ch;
			cin >> ch;
			sb[j].push_back(ch);
		}
	}
	sort(sa + 1, sa + m + 1);
	sort(sb + 1, sb + m + 1);
	for(int i = 1; i <= m; i++) {
		if(sa[i] != sb[i]) {
			cout << "No";
			return 0;
		}
	}
	cout << "Yes";
	return 0;
}

[ABC279D] Freefall

思路解析:整数三分裸板子,直接套即可

错因:没背好整数三分的边界。。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a, b;
double f(double g) {
	return (double)b * ((double)g - 1) + (double)a / sqrt((double)g);
}
int main() {
	cin >> a >> b;
	ll l = 1, r = 1e18;
	while(l < r) {
		ll lmid = l + (r - l) / 3;
		ll rmid = r - (r - l) / 3;
		if(f(lmid) < f(rmid)) {
			r = rmid - 1;
		}
		else {
			l = lmid + 1;
		}
	}
	printf("%.10lf", f(l));
	return 0;
}

[ABC279E] Cheating Amidakuji

思路解析:考场手撕。我们可以发现如果删除第 \(i\) 次操作,但是操作交换的两个数不影响 \(1\) 所在的位置,直接输出预处理的不删操作的结果。若影响,则说明当前的 \(1\) 以后一直都在被交换的另一个数应该在的位置上,则输出被影响的另一个数在正常情况下的位置即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, m, a[N];
int jh1[N];
int c[N], d[N];
int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		c[i] = i;
		d[i] = i;
	}
	for(int i = 1; i <= m; i++) {
		cin >> a[i];
		swap(c[a[i]], c[a[i] + 1]);
	}
	for(int i = 1; i <= n; i++) {
		d[c[i]] = i;
	}
	for(int i = 1; i <= n; i++) {
		c[i] = i;
	}
	jh1[0] = 1;
	for(int i = 1; i <= m; i++) {
		jh1[i] = jh1[i - 1];
		int temp = jh1[i];
		if(jh1[i - 1] == a[i]) {
			jh1[i]++;
		}
		else if(jh1[i - 1] == a[i] + 1) {
			jh1[i]--;
		}
		cout << d[c[jh1[i]]] << "\n";
		swap(c[a[i]], c[a[i] + 1]);
	}
	return 0;
}

[ABC279F] BOX

思路解析:实践不难,重点是想到思路。我们可以发现操作 \(1\) 其实就是并查集的合并操作,但是每一个箱子合并后当前的箱子就不可用了(因为已经和另一个合并到一起了),所以这时只需再新建一个箱子代表当前编号的箱子即可。

注意:由于需要新建箱子,所以就必须把数组大小再开大一倍

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int n, q;
int ball[N * 2], id[N * 2], box[N * 2], fa[N * 2];
int fd(int x) {
	while(fa[x] != x) x = fa[x] = fa[fa[x]];
	return x;
}
int main() {
	cin >> n >> q;
	for(int i = 1; i <= n; i++) {
		ball[i] = i;
		id[i] = i;
		box[i] = i;
		fa[i] = i;
	}
	int cnt = n;
	int lst = n;
	while(q--) {
		int op, x, y;
		cin >> op;
		if(op == 1) {
			cin >> x >> y;
			fa[fd(box[y])] = fd(box[x]);
			cnt++;
			box[y] = cnt;
			id[cnt] = y;
			fa[cnt] = cnt;
		}
		else if(op == 2) {
			cin >> x;
			ball[++lst] = box[x];
		}
		else if(op == 3) {
			cin >> x;
			cout << id[fd(ball[x])] << "\n";
		}
	}
	return 0;
}

标签:std,int,cin,fa,using,include,ABC279,复盘
From: https://www.cnblogs.com/2020luke/p/17902430.html

相关文章

  • Tita| 升级新增“复盘”页签
    升级详情:Tita-OKR和新绩效一体化管理平台1.目标及关键成果下新增“复盘”页签复盘,围棋术语,也称“复局”,指对局完毕后,复演该盘棋的记录,以检查对局中招法的优劣和得失关键。复盘就是每次博弈结束以后,双方棋手把刚才的对局再重复一遍,这样可以有效地加深对这盘对弈的印象,也可以找......
  • AT_abc 复盘合集
    AT_abc301复盘A一眼水,只需要遍历一遍数组,记录哪一个胜利场数先打到\((n+1)/2\)就好了。ACcode://LUOGU_RID:139221441#include<bits/stdc++.h>usingnamespacestd;intn,c1,c2;strings;intmain(){cin>>n>>s;for(inti=0;i<n;i++){......
  • 面试基础复盘
    px、rpx、em、rem、vw、vhpx:px就是pixel的缩写,意味像素。px就是一张图片最小的一个点,一张位图就是无数个这样的点构成的,是web开发中最常用的像素单位。rpx:由微信小程序官方推出的新单位,适用于移动端的uni-app或者微信小程序的开发。可以根据屏幕宽度进行自适应,1rpx实际上等......
  • AT_abc301 复盘
    AT_abc301复盘A一眼水,只需要遍历一遍数组,记录哪一个胜利场数先打到\((n+1)/2\)就好了。ACcode://LUOGU_RID:139221441#include<bits/stdc++.h>usingnamespacestd;intn,c1,c2;strings;intmain(){cin>>n>>s;for(inti=0;i<n;i++){......
  • #5独立开发11月复盘|销售额提升了4倍
    11月OKR达成情况O1:提高NotionConverter的销售额,达到1000元/月本月前两周的核心都在提升产品体验上,目前产品链路的体验相比之前已经提升许多本月最大的收获就是,找对了用户来体验产品,目前需求池里有几十个待优化的问题,知道如何一步一步把产品做的更好,同时在样式模板上扣细节......
  • Atcoder abc301 复盘(更新中)
    跳转比赛链接A-OverallWinner简述:高桥和青木下了\(N\)盘棋。给你一个长度为\(N\)的字符串\(S\),表示这两盘棋的结果。如果\(S\)的\(i\)个字符是t,那么高桥赢得了\(i\)局;如果\(S\)的\(i\)个字符是A,那么青木赢得了这局。高桥和青木之间的胜负关系是谁赢的局......
  • ABC312 复盘
    ABC312复盘At链接LG链接AChord思路解析:水题,一个if即可#include<bits/stdc++.h>usingnamespacestd;strings;intmain(){ cin>>s; if(s=="ACE"||s=="BDF"||s=="CEG"||s=="DFA"||s=="EGB&qu......
  • ABC301 复盘
    ABC301复盘At链接LG链接[ABC301A]OverallWinner思路解析:从头开始遍历字符串,遇到一个字符就给对应的一方加分,输出第一个胜场大于\(\lceiln/2\rceil\)的一方。#include<bits/stdc++.h>usingnamespacestd;intn;stringstr;intmain(){ cin>>n; cin>>str......
  • AT_abc312复盘
    AT_abc312复盘A一眼过去直接\(if\)秒了ACcode:#include<bits/stdc++.h>usingnamespacestd;strings;intmain(){cin>>s;if(s=="ACE"||s=="BDF"||s=="CEG"||s=="DFA"||s=="E......
  • 【父子进程/AES/XTEA/SMC】赛后复盘
    官方wp:进程重影技术:进程重映像利用了Windows内核中的缓存同步问题,它会导致可执行文件的路径与从该可执行文件创建的映像节区所报告的路径不匹配。通过在一个诱饵路径上加载DLL,然后卸载它,然后从一个新路径加载它,许多WindowsAPI将返回旧路径。这可能可以欺骗安全产品,使其在错误......