首页 > 其他分享 >ABC265 复盘

ABC265 复盘

时间:2023-12-20 20:33:22浏览次数:40  
标签:const int ll long ABC265 include 复盘 dp

ABC265 复盘

At 链接

LG 链接

[ABC265A] Apple

思路解析:判断一下一次性买 3 个便宜还是 3 个分开买便宜,选更便宜的方法尽量多买剩下的单独买即可。

#include<bits/stdc++.h>
using namespace std;
int n, x, y;
int main() {
	cin >> x >> y >> n;
	if(3 * x <= y) {
		cout << n * x;	
	}
	else {
		cout << y * (n / 3) + (n - (n / 3) * 3) * x;	
	}
	return 0;
}

[ABC265B] Explore

思路解析:模拟,遇到一个有奖金的房间就给时限加上对应的 \(y\) ,同时对于每个房间都减去路程所消耗的 \(a[i - 1]\),注意是先判断再修改时限

错因:题意不清,没注意顺序

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll n, m, t;
ll a[N], z[N];
int main() {
	cin >> n >> m >> t;
	for(int i = 1; i < n; i++) {
		cin >> a[i];
	}
	for(int i = 1; i <= m; i++) {
		int x, y;
		cin >> x >> y;
		z[x] = y;
	}
	for(int i = 1; i < n; i++) {
		if(t <= a[i]) {
			cout << "No";
			return 0;
		}
		t -= a[i];
		t += z[i + 1];
	}
	cout << "Yes";
	return 0;
}

[ABC265C] Belt Conveyor

思路解析:模拟,我用的是 dfs ,遇到之前走过的就返回,并在返回后输出-1;如果出了地图就输出当前坐标,并exit(0),防止多输出一个-1

#include<bits/stdc++.h>
using namespace std;
const int N = 510;
int n, m;
char ch[N][N];
bool vis[N][N];
map<char, int> dx, dy;
void init() {
	dx['U'] = -1;
	dx['D'] = 1;
	dy['L'] = -1;
	dy['R'] = 1;
}
void dfs(int x, int y) {
	if(vis[x][y]) return;
	vis[x][y]= true;
	int nx = x + dx[ch[x][y]], ny = y + dy[ch[x][y]];
	if(nx > 0 && nx <= n && ny > 0 && ny <= m) {
		dfs(nx, ny);
	}
	else {
		cout << x << " " << y;
		exit(0);
	}
}
int main() {
	init();
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			cin >> ch[i][j];
		}
	}
	dfs(1, 1);
	cout << "-1";
	return 0;
}

[ABC265D] Iroha and Haiku (New ABC Edition)

思路解析:二分,枚举 \(x\),剩下的变量二分即可。

错因:\(x\) 应从 \(0\) 开始枚举

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll n, a[N], p, q, r;
ll s[N];
int main() {
	cin >> n >> p >> q >> r;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
		s[i] = s[i - 1] + a[i];
	}
	for(int i = 0; i <= n - 3; i++) {
		int pos1 = lower_bound(s + 1, s + n + 1, p + s[i - 1]) - s;
		if(s[pos1] - s[i - 1] == p) {
			int pos2 = lower_bound(s + 1, s + n + 1, q + s[pos1]) - s;
			if(s[pos2] - s[pos1] == q) {
				int pos3 = lower_bound(s + 1, s + n + 1, r + s[pos2]) - s;
				if(s[pos3] - s[pos2] == r) {
					cout << "Yes";
					return 0;
				}
			}
		}
	}
	cout << "No";
	return 0;
}

[ABC265E] Warp

思路解析:靠着张老师点醒我们,也是成功在赛时切掉。用 dp,首先我们对于二维矩阵不能开 \(10^9\) 的数组,于是可以发现我们经过的每一个点都是由题目里的三种操作得来的,所以我们遍历到的每一个点都可以用 \(i\) 个操作一 \(+\) \(j\) 个操作二 \(+\) \(k\) 个操作三 表示出来,于是我们定义 dp[i][j][k] 代表这个点经过了 \(i\) 个操作一 \(+\) \(j\) 个操作二 \(+\) \(k\) 个操作三 这么多的操作,然后由于每一个点都可以从三种状态中的任意一中推过来,所以状态计算自然就是 dp[i][j][k] = dp[i - 1][j][k] + dp[i][j - 1][k] + dp[i][j][k - 1]

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define PII pair<int, int>
const int M = 1e5 + 10;
const int mod = 998244353;
ll n, m, a, b, c, d, e, f;
ll x[M], y[M];
ll dp[310][310][310];
map<PII, int> mp;
int main() {
	cin >> n >> m >> a >> b >> c >> d >> e >> f;
	for(int i = 1; i <= m; i++) {
		cin >> x[i] >> y[i];
		mp[{x[i], y[i]}] = 1;
	}
	dp[0][0][0] = 1;
	ll ans = 0;
	for(int i = 0; i <= n; i++) {
		for(int j = 0; j <= n; j++) {
			for(int k = 0; k <= n; k++) {
				if(i > 0) {
					dp[i][j][k] = (dp[i][j][k] + dp[i - 1][j][k]) % mod;
				}
				if(j > 0) {
					dp[i][j][k] = (dp[i][j][k] + dp[i][j - 1][k]) % mod;
				}
				if(k > 0) {
					dp[i][j][k] = (dp[i][j][k] + dp[i][j][k - 1]) % mod;
				}
				ll xx = i * a + j * c + k * e;
				ll yy = i * b + j * d + k * f;
				if(mp.find({xx, yy}) != mp.end()) {
					dp[i][j][k] = 0;
				}
				if(i + j + k == n) {
					ans = (ans + dp[i][j][k]) % mod;
				}
			}
		}
	}
	cout << ans;
	return 0;
}

标签:const,int,ll,long,ABC265,include,复盘,dp
From: https://www.cnblogs.com/2020luke/p/17917490.html

相关文章

  • USACO 2023-2024 赛季复盘
    【USACO23DEC】Cu复盘我先用了一个号打,然后是T1TLE*4,T2AC,T3WA*2。然后后面开了一个号调了一些,喜提阿克。T1:首先我们知道,对于\(a_1\)每一次是最先吃糖果的。所以必然有两个情况:全部给他吃了吃了一些首先情况一,我们可以直接特判掉。剩下情况二,吃了一些没吃完......
  • ABC278 复盘
    ABC278复盘At链接LG链接[ABC278A]Shift思路解析:用队列模拟即可。#include<bits/stdc++.h>usingnamespacestd;intn,k,a[110];intmain(){ cin>>n>>k; queue<int>q; for(inti=1;i<=n;i++){ cin>>a[i]; q.push(a[i]); ......
  • ABC279 复盘
    ABC279复盘At链接LG链接[ABC279A]wwwvvvvvv思路解析:纯模拟,遍历到哪个字母就加几分#include<bits/stdc++.h>usingnamespacestd;stringstr;intmain(){ cin>>str; longlongans=0; for(inti=0;i<str.size();i++){ if(str[i]=='w'){ ......
  • 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......