首页 > 其他分享 >TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) 补题记录(A-E)

TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) 补题记录(A-E)

时间:2024-11-01 14:31:01浏览次数:1  
标签:AtCoder 10 int Contest cin long 补题 mp

AtCoder Beginner Contest 377

A - Rearranging ABC

字符串有ABC三个字母即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
	string s;
	cin >> s;
	map<char, int> mp;
	for (auto t : s) {
		mp[t] = 1;
	}
	if (mp['A'] == 1 && mp['B'] == 1 && mp['C'] == 1) cout << "Yes\n";
	else cout << "No\n";
}

B - Avoid Rook Attack

标记一下哪行哪列不可以放,然后暴力枚举

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
	char a[10][10];
	map<int, int> h, l;
	for (int i = 1; i <= 8; i++)
		for (int j = 1; j <= 8; j++) {
			cin >> a[i][j];
			if (a[i][j] == '#') h[i] = 1, l[j] = 1;
		}
	int cnt = 0;
	for (int i = 1; i <= 8; i++) {
		for (int j = 1; j <= 8; j++) {
			if (a[i][j] == '.') {
				if (h[i] == 0 && l[j] == 0) cnt++;
			}
		}
	}
	cout << cnt << '\n';
}

C - Avoid Knight Attack

\(set\)套一个\(pair\)将所有能吃的点和有马的点存入\(set\),能放的点就是剩下的点。

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
	int n, m;
	cin >> n >> m;
	set<pair<int, int>> se;
	int dx[10] = {-1, -2, -2, -1, 1, 2, 2, 1};
	int dy[10] = {-2, -1, 1, 2, 2, 1, -1, -2};
	while (m--) {
		int x, y;
		cin >> x >> y;
		se.insert({x, y});
		for (int i = 0; i < 8; i++) {
			if (x + dx[i] >= 1 && x + dx[i] <= n && y + dy[i] >= 1 && y + dy[i] <= n)
				se.insert({x + dx[i], y + dy[i]});
		}
	}
	cout << n*n - se.size() << '\n';
	
}

D - Many Segments 2

首先考虑加法不好做,于是我们选择减法减去所有不合法的区间,那么剩下的就是我们需要的答案。
通过模拟和思考发现我们可以枚举每一个位置 \(i\)查询离这个位置右侧最近的区间左边界\(r\),同时这个区间右边界\(l\)需要大于等于\(i\)此时可以删除(\(i\),\([r,m]\))这些区间组合。

为了实现我们的需求,我们可以对区间按照\(r\)排序,使用双指针查找合法可删除区间。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
struct node {
	int l, r;
} a[N];
bool cmp(node x, node y) {
	if (x.r != y.r) return x.r < y.r;
	return x.l < y.l;
}
signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].l >> a[i].r;
	}
	sort(a + 1, a + 1 + n, cmp);
	int j = 1;
	int ans = m + m * (m - 1) / 2;
	for (int i = 1; i <= m; i++) {
		int x = i;
		while (a[j].l < x && j < n) j++;
		if (a[j].l < x) ans -= 0;
		else ans -= (m - a[j].r + 1);
	}
	cout << ans << '\n';
}

E - Permute K times 2

标签:AtCoder,10,int,Contest,cin,long,补题,mp
From: https://www.cnblogs.com/ZhangDT/p/18520169

相关文章

  • AtCoder Beginner Contest 376 题解
    AtCoderBeginnerContest376题解AtCoderBeginnerContest376A-CandyButton#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;voidsolve(){ intn,c;cin>>n>>c; intpre=-1; intans=0; for(inti=1;i<=n;i++)......
  • dp专题总结 - AtCoder DP Contest
    dp专题总结题单:this w......
  • COCI 17/18 Contest 6 Vrtić
    傻逼题。首先经典的结论是有很多个环,让每个环最小。显然将数组从小到大排序,然后每个环都是取连续一段一定最优,交换法容易证明。然后对于每个环内如何最优呢?假设我们有从小到大排序的数组\(a_{\{1,n\}}\),最优一定是这样的:\[a_1,a_3,a_5,a_7...a_8,a_6,a_4,a_2\]就是左右填......
  • # [Educational Codeforces Round 171](https://codeforces.com/contest/2026)
    EducationalCodeforcesRound171D.SumsofSegments定义四个前缀和:\(s_i=a_1+a_2+\dots+a_i\)\(u_i=s_1+s_2+\dots+s_i\)\(t_i=s(i,i)+s(i,i+1)+\dots+s(i,n)\)\(ts_i=t_1+t_2+\dots+t_i\)\(s_i\)为\(a_i\)的前缀和,\(u_i\)为\(s_i\)的前缀和,\(t_i\)为分块之后第......
  • Atcoder DP Contest
    好像都在说这套题很好,所以来刷一遍太水的就只放代码了尚未完工,先发一下猫猫可爱捏https://www.tldraw.com/ro/1g8hQBpWTkduIlFxT3c0P?d=v-1275.1523.960.968.pageA.Frog1#include<bits/stdc++.h>usingnamespacestd;intn;inth[100001];intf[100001];intmain(){ ......
  • 补题。
    顺序小孩子不懂事乱排的。NOI2024集合太难了不会。百万富翁太难了不会。树的定向(待完成)由特殊性质A可知若所有限制均距离不小于\(2\)则可通过对树染色的方式完成,故应当优先考虑距离为\(1\)的边。按顺序填用倍增维护即可,具体细节写了再说。分数(待完成)大概是暴力......
  • 2024.10.24 The 2021 ICPC Northwestern Russia Regional Contest
    比赛链接Solved:8/14Penalty:909Rank:23前五道签到题ABCHL。K.KaleidoscopicRoute题意给一张带边权的图,求一条1到n的路径,使经过的边数最少的同时边的极差最大。题解求出最短路图,然后DAG上dp:f和g分别表示从1到这个点能经过的最大边权和最小边权。然后每转移一条边(x,y,z......
  • 2024.10.4 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest
    比赛链接Solved:7/11Penalty:914Rank:1/74Rank(vp):63/1k+Dirt:22%G答案是4*纯色块数+5。考虑怎么维护这个纯色块数。这道题的修改保证了一个块纯色当且仅当其行列都纯色。因此对行列分别维护一棵线段树,维护每一层分别有多少个纯色节点,按层乘起来相加就行。K1操作的增加量......
  • 2024.10.3 2022-2023 ICPC Brazil Subregional Programming Contest
    比赛链接Solved:12/14Rank:5/1k+Rank(vp):49/2k+Penalty:1619Dirt:45%前10个题都比较简单/套路。L做法很好想。但是……因为不会写启发式合并卡了40min,警钟长鸣!intsum[N];map<int,int>col[N];intsz[N];llnow[N],ans[N];voidmrg(intx,inty){x=find(x),y=fi......
  • AtCoder Beginner Contest 366 - VP记录
    A-Election2高桥日常出镜,kkk好好学学。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intn,t,a; scanf("%d%d%d",&n,&t,&a); if(t>n-t||a>n-a)printf("Yes\n"); elseprintf("No\n"); return0;......