首页 > 其他分享 >AtCoder Beginner Contest 275 A-F 题解

AtCoder Beginner Contest 275 A-F 题解

时间:2023-02-28 23:01:09浏览次数:54  
标签:AtCoder include int 题解 long 275 lld dp mod

比赛链接

砳赫賏,看懂扣 1(

A - Find Takahashi

模拟。

#include<cstdio>
#include<algorithm>
using namespace std;
int n, mx, id = 1;
int main() {
	int x;
	scanf("%d %d", &n, &mx);
	for(int i = 2; i <= n; i ++) {
		scanf("%d", &x);
		if(mx < x) mx = x, id = i;
	}
	printf("%d", id);
	return 0;
}

B - ABC-DEF

全部一顿取模操作就好。

#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
ll a, b, c, d, e, f, ans, mod = 998244353;
int main() {
	scanf("%lld %lld %lld %lld %lld %lld", &a, &b, &c, &d, &e, &f);
	a %= mod, b %= mod, c %= mod, d %= mod, e %= mod, f %= mod;
	ans = (a * b % mod * c % mod - d * e % mod * f % mod) % mod + mod;
	ans %= mod;
	printf("%lld", ans);
	return 0;
}

C - Counting Squares

枚举左上和右下两个点,在得到另外两个点,判断即可。

#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
int n, m, ans;

char s[15][15];

bool check(int x, int y) {
	if(x <= 9 && x > 0 && y > 0 && y <= 9 && s[x][y] == '#') return 1;
	return 0;
}

int main() {
	
	for(int i = 1; i <= 9; i ++) {
		scanf("%s", s[i] + 1);
	}
	
	for(int a = 1; a <= 9; a ++) {
		for(int b = 1; b <= 9; b ++) {
			for(int c = 1; c <= 9; c ++) {
				for(int d = 1; d <= 9; d ++) {
					if(a == c && b == d) continue;
					if(s[a][b] == '.' || s[c][d] == '.') continue;
					if(check(c - d + b, d - a + c) && check(a - d + b, b - a + c)) ans ++;
				}
			}
		}
	}
	printf("%d", ans / 4);
	return 0;
}

D - Yet Another Recursive Function

记忆化搜索,

#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
#define ll long long
ll n;

map<ll, ll> mp;

ll dfs(ll n) {
	if(mp.count(n)) return mp[n];
	if(!n) return 1;
	mp[n] = dfs(n / 2) + dfs(n / 3);
	return mp[n];
}

int main() {
	scanf("%lld", &n);
	printf("%lld", dfs(n));
	return 0;
}

E - Sugoroku 4

定义 dp[i][j] 为 花费 i 步到达 j 点的概率。

然后枚举每次的步数,分类讨论是否超过 n , 转移方程。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1005, mod = 998244353;

int n, m, K, inv, dp[N][N];

int qpow(int a, int b) {
	int res = 1;
	while(b) {
		if(b & 1) res = res * a % mod;
		a = a *a % mod, b >>= 1;
	}
	return res;
}
int ans;
signed main() {
	scanf("%lld %lld %lld", &n, &m, &K);
	inv = qpow(m, mod - 2);
	dp[0][0] = 1;
	for(int i = 0; i <= K; i ++) {
		for(int j = 0; j < n; j ++) {
			for(int k = 1; k <= m; k ++) {
				if(j + k > n) {
					dp[i + 1][2 * n - j - k] = (dp[i + 1][2 * n - j - k] + dp[i][j] * inv % mod) % mod;
				}
				else dp[i + 1][j + k] = (dp[i + 1][j + k] + dp[i][j] * inv % mod) % mod;
			}
		}
	}
	for(int i = 0; i <= K; i ++) ans = (ans + dp[i][n]) % mod;
	printf("%lld", ans);
	return 0;
}

F - Erase Subarrays

定义 dp[i][j] 为前 i 个数中保留数之和为 j 的最小操作次数。

分类讨论第 i 个数是否保留来转移,

  • 保留,dp[i][j] = min(dp[i - 1][j - a[i]])

  • 不保留,dp[i][j] = min(dp[i][j], dp[k - 1][j] + 1) (1 <= k <= i)

而观察可知,dp[i][j] 的转移只需要保留 dp[0][j]~dp[i - 1][j] 中的最小值,

因此我们再定义一个 p[j][i] 表示 dp[0][j]~dp[i][j] 的最小值。

结束。

#include<bits/stdc++.h>
using namespace std;
const int N = 3005, mod = 998244353;

int n, m, a[N], dp[N][N], p[N][N];


signed main() {
	scanf("%d %d", &n, &m);
	memset(dp, 0x3f, sizeof(dp));
	memset(p, 0x3f, sizeof(p));
	for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
	dp[0][0] = p[0][0] = 0;
	for(int i = 1; i <= n; i ++) {
		for(int j = 0; j <= m; j ++) {
			if(j >= a[i]) dp[i][j] = min(dp[i][j], dp[i - 1][j - a[i]]);
			
			dp[i][j] = min(dp[i][j], p[j][i - 1] + 1);
			p[j][i] = min(dp[i][j], p[j][i - 1]);
		}
	}
	
	for(int i = 1; i <= m; i ++) {
		if(dp[n][i] > 1e9) puts("-1");
		else printf("%d\n", dp[n][i]);
	}
	
	return 0;
}

标签:AtCoder,include,int,题解,long,275,lld,dp,mod
From: https://www.cnblogs.com/Spring-Araki/p/17166414.html

相关文章

  • Codeforces Round #854 by cybercats (Div. 1 + Div. 2) A-B题解
    比赛链接A可以发现,每次出去的顺序一定是按照\(n->1\)的顺序。因为新加入的东西只会放在最前面。相应的,如果其已在序列中,则这个操作不会对\(1~n\)的信息产生影响。......
  • border出现虚边问题解决
    当我们只给元素设置了border-top,没有设置其他边框的时候,如果我们使用了border-radius会出现虚边的情况,如下所示:css代码:div{width:100px;height:100px;border-top:2pxsoli......
  • Atcoder ARC084D Small Multiple
    \(O(k)/O(k)\)解法标签:建图最短路考虑对于一个数\(x\),考虑由它在末尾改变能产生哪些状态:\(x+1\),此时对应的数位和\(+1\)\(x\times10\),对应数位和不变那直接把......
  • 跨域问题解决
    目录跨域请求问题解决解决跨域问题方式简单请求与非简单请求自己编写中间件处理跨域请求问题解决同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全......
  • Codeforces Round #854 by cybercats (Div. 1+2) 1799 A~G 题解
    点我看题A.RecentActions注意到只有编号大于n的博客会被更新,所以每当有一个之前没被更新的过的博客被更新时,当前列表中最下面的就会被挤掉。如果这次更新的博客之前已......
  • [洛谷]P5401 [CTS2019] 珍珠 题解
    [洛谷]P5401[CTS2019]珍珠题解题意概述有\(D\)种珍珠,每种有无限颗,现在等概率的从\(D\)种珍珠中抽\(n\)次珍珠,每次抽\(1\)个珍珠,记第\(i\)种珍珠最后一共抽......
  • 江南信息学2023年第一周练习20230223 题解
    比赛链接1001:鸡尾酒疗法1#include<bits/stdc++.h>2usingnamespacestd;3intmain()4{5intn;6cin>>n;7doublea,b;8cin>>a......
  • [AtCoder Grand Contest 060][C. Large Heap]
    看了几篇题解都是从下往上(子树大小从小到大)推的,来整一个从上往下的。题目链接:C-LargeHeap题目大意:称一个大小为\(2^N-1\)的排列是好排列当且仅当其满足对任意\(1\l......
  • [CF755G] PolandBall and Many Other Balls 题解
    [CF755G]PolandBallandManyOtherBalls题解题意概括有一排\(n\)个球,定义一个组可以只包含一个球或者包含两个相邻的球。现在一个球只能分到一个组中,求从这些球中......
  • Django uwsgi问题解析
    通常情况下,部署Django应用到生产环境时都会通过uwsgi部署,uwsgi一些配置项配置问题有可能会导致服务出现502状态码或者其他超时等的情况常用到的配置项如下:reload-on-as......