首页 > 其他分享 >AtCoder Beginner Contest 378题解

AtCoder Beginner Contest 378题解

时间:2024-11-02 22:09:18浏览次数:1  
标签:AtCoder int 题解 rep ++ cin 378 mp define

省流:dfs 都会写错。

正片:

A:Pairing

统计一下每个数字出现了多少次即可,每次减去 2。

#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,ans;
map<int,int> mp;
int main(){
	cin>>a>>b>>c>>d;
	mp[a]++,mp[b]++,mp[c]++,mp[d]++;
	while(mp[a]>=2) mp[a]-=2,ans++;
	while(mp[b]>=2) mp[b]-=2,ans++;
	while(mp[c]>=2) mp[c]-=2,ans++;
	while(mp[d]>=2) mp[d]-=2,ans++;
	cout<<ans;
	return 0;
}

B:Garbage Collection

求出余数,然后判断一下大小关系即可。

#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define getmax(a,b) a=max(a,b)
#define getmin(a,b) a=min(a,b)
using namespace std;
int n,qe;
int q[2000],r[2000],t,d;
signed main(){
	ios::sync_with_stdio(false);
	*cin.tie(nullptr)<<fixed<<setprecision(20);
	cin>>n;
	rep(i,1,n) cin>>q[i]>>r[i];
	cin>>qe;
	rep(i,1,qe){
		cin>>t>>d;
		int k=d%q[t];
		if(k<=r[t]) cout<<d+r[t]-k<<'\n';
		else cout<<q[t]-k+d+r[t]<<'\n';
	}
	return 0;
}

C:Repeating

开一个 map 记录当前数上一次出现的地方,如果没有就 \(b_i=-1\),否则 \(b_i=mp_{a_i}\)。每次 \(mp_{a_i}\) 都更新成 \(i\) 即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define getmax(a,b) a=max(a,b)
#define getmin(a,b) a=min(a,b)
using namespace std;
const int N=200010;
int n,a[N],b[N];
unordered_map<int,int> mp;
int main(){
	ios::sync_with_stdio(false);
	*cin.tie(nullptr)<<fixed<<setprecision(20);
	cin>>n;
	rep(i,1,n) cin>>a[i];
	rep(i,1,n){
		if(mp[a[i]]) b[i]=mp[a[i]],mp[a[i]]=i;
		else b[i]=-1,mp[a[i]]=i;
	}
	rep(i,1,n) cout<<b[i]<<' ';
	return 0;
}

D:Count Simple Paths

注意到 \(n,m,k\) 的范围都非常小,考虑直接暴力。

题目中所说的不同路径其实完全没有用,每次找到一个合法的位置,暴力 dfs 找有没有点和它距离为 \(k\) ,由于起点都不一样,那么这个限制就没有任何作用了。

感觉用 bfs 做的话,队列中的每个元素 \(u\) 都还要增加一个 \(set\) 或者 \(map\) 记录当前走过的点。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define getmax(a,b) a=max(a,b)
#define getmin(a,b) a=min(a,b)
using namespace std;
const int N=101;
int n,m,k;
char a[N][N];
ll ans;
bool vis[N][N];
const int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
void dfs(int x,int y,int step){
	if(step==k){
		ans++;
		return ;
	}
	for(int i=0;i<4;i++){
		int nx=x+dx[i],ny=y+dy[i];
		if(nx>=1&&ny>=1&&nx<=n&&ny<=m&&!vis[nx][ny]&&a[nx][ny]=='.'){
			vis[nx][ny]=true;
			dfs(nx,ny,step+1);
			vis[nx][ny]=false;
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	*cin.tie(nullptr)<<fixed<<setprecision(20);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='.'){
				memset(vis,0,sizeof vis);
				vis[i][j]=true;
				dfs(i,j,0);
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
}

标签:AtCoder,int,题解,rep,++,cin,378,mp,define
From: https://www.cnblogs.com/Merge-Change230/p/18522575

相关文章

  • AtCoder Beginner Contest 378题解
    AtCoderBeginnerContest378题解总体情况十分钟翻盘局。A-Pairing题意有四个球,每次可以消掉两个颜色相同的球,问最多能效多少次?题解直接使用贪心即可代码//Problem:A-Pairing//Contest:AtCoder-AtCoderBeginnerContest378//URL:https://atcoder.j......
  • AtCoder Beginner Contest 378
    A-Pairing题意给\(4\)个数,每次选两个数字相同的丢掉。求最大操作数。思路模拟。代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){inta,b,c,......
  • 2024CCPC哈尔滨 L 题解
    思路首先可以发现这个期望其实是假的,我们只需要把所有方案的答案加起来,最后除以\((\frac{n(n-1)}{2})^2\)即可,现在考虑如何统计所有方案的答案。我们先考虑一条路径的方案数:假设存在一条从\(x\)到\(y\)的公共路径,其中\(x\)是\(y\)的祖先,那么小红和小蓝分别选择的路径,......
  • ABC378 比赛记录
    ABC378比赛记录这场打得太唐了。。。A模拟B模拟C\(map\)模拟D爆搜模拟E很典的题目,感觉我绝对见过原题。要求\((a-b)\modm\)可以转化为$(a\modm)-(b\modm)+[a<b]*m$然后前缀和加树状数组做完了。F做\(F\)的时候本来还有一个多小时,rk300+。结果做了......
  • 第八届御网杯线下赛Pwn方向题解
    由于最近比赛有点多,而且赶上招新,导致原本应该及时总结的比赛搁置了,总结来说还是得多练,因为时间很短像这种线下赛,一般只有几个小时,所以思路一定要清晰,我还是经验太少了,导致比赛力不从心,先鸽了~Skillchecksec检查保护(没有开PIE和Canary)ida逆向分析一下不同的选项对应不......
  • Codeforces Round 983 (Div. 2) 题解
    CodeforcesRound983(Div.2)题解CodeforcesRound983(Div.2)Problem-A-Codeforces解题思路考虑贪心,每个灯连两个开关,即两个开的灯可以关闭一盏灯,则灯数最多则尽可能让两个开关都开的灯尽量少,灯数最少则反之#include<bits/stdc++.h>#defineendl'\n'usingnam......
  • 线段树也能是 Trie 树 题解
    题意简述给定一个长为\(n=2^k\)的序列\(\{a_0,\ldots,a_{n-1}\}\),你需要使用数据结构维护它,支持\(m\)次以下操作:单点加:\(a_x\getsa_x+y\);区间查:\(\sum\limits_{i=l}^ra_i\);全局下标与:\(a'_{i\operatorname{and}x}\getsa_{i}\),即把\(a_i\)累加到......
  • 动态规划题解报告
    [APIO2016]划艇注意到\(n\le500\)考虑\(O(n^3)\)的做法。值域小的做法比较显然,值域比较大,考虑离散化(将\(b_i+1\)然后限制变为\([a_i,b_i+1)\))。设\(f_{i,j}\)表示考虑前\(i\)个,\(i\)选择\(j\)的方案数。发现由于离散化了很难转移\(f_{k,j}\(k<i)\)的情况......
  • 关于Copilot出现:You don`t have access to Github Copilot .....的问题解决方案
    前面如何如何配置,以及如何如何上传学生证资料等我这里不赘述badendinghappyending出现这个界面这个问题就是set_up不是很完全,设置一下就行disable改为enable等这样再回去IDE,就可以正常使用了......
  • AtCoder Beginner Contest 363 - VP记录
    PrefaceA-PilingUpAtCoder日爆导致半天登不上去。这道题还是看的洛谷上的题面,用洛谷RMJ交的。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intr;scanf("%d",&r); if(r<=99)printf("%d\n",100-r); elseif(r<=199)printf("%d\......