首页 > 其他分享 >AtCoder Beginner Contest 294 E

AtCoder Beginner Contest 294 E

时间:2023-06-17 09:00:44浏览次数:48  
标签:AtCoder Beginner Contest int ans 294 指针

AtCoder Beginner Contest 294

E - 2xN Grid

Problem Statement

题意:给你\(2\)行长度为\(L\)的矩阵。告诉你格子里面的数字,以\(vi\) \(li\)的形式:\(vi\)有\(li\)个

问上下两个一样的有多少个?

解释:以样例为例

输入
8 4 3
1 2
3 2
2 3
3 1
1 4
2 1
3 3
输出
4

img

第$1,$2,\(5\),8个上下两个一样,ans++;

Solution

题解:首先如果想要把数字拆开放到数组里面再写是不现实的,那怎么办呢?对于上下比较,想到用双指针。用\(a[i]\)表示\(val\)用\(b[i]\)表示个数,我们考虑把第一行和第二行拼接起来,那左指针\(c = 1\),右指针\(d = n+1\)开始,如果\(a[c]==a[d]\) \(ans+=min(a[c],a[d])\)。

再考虑指针移动:

  1. 如果\(b[c]>b[d],b[c]-=b[d],d++\)。
  2. 如果\(b[c]<=b[d],b[d]-=b[c],c++\)。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5+10;
int l,n,m;
int a[N],b[N];
signed main()
{
	cin>>l>>n>>m;
	for(int i = 1;i<=n;i++)
		cin>>a[i]>>b[i];
	for(int i = n+1;i<=n+m;i++)
		cin>>a[i]>>b[i];
	int c = 1,d = n+1;
	int ans = 0;
	while(c<=n&&d<=n+m)
	{
		if(a[c]==a[d])ans += min(b[c],b[d]);
		if(b[c]>b[d])
			b[c]-=b[d],d++;
		else
			b[d]-=b[c],c++;
	}
	cout<<ans<<endl;
	return 0;
}

标签:AtCoder,Beginner,Contest,int,ans,294,指针
From: https://www.cnblogs.com/nannandbk/p/17487009.html

相关文章

  • AtCoder Beginner Contest 291 DEF
    AtCoderBeginnerContest291D-FlipCardsProblemStatement题意:\(N\)张卡片,编号\(1\)到\(N\),每张卡片有正反两面,写有数字,初始状态都是正面朝上。考虑每张卡片的翻转情况,选择翻或者不翻,求是的相邻两张卡片的数字不同,求方案数,答案模\(998244353\)Solution题解:求方案数,想......
  • AtCoder Beginner Contest 302 ABCDEF
    AtCoderBeginnerContest302A-AttackProblemStatement题意:敌人有\(A\)的耐力值,每次攻击敌人可以减少\(B\)的耐力值,问多少次敌人耐力值\(<=0\)?Solution题解:\(\dfrac{a}{b}\)上取整。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;intmain(){......
  • AtCoder Beginner Contest 305 ABCDE
    AtCoderBeginnerContest305A-WaterStationProblemStatement题意:水站每\(5km\)设一个,给你一个\(N\)\(km\)的位置,问你离它最近的水站位置。Solution题解:模5在乘5,比较给出的点的左边和右边的点,取min#include<bits/stdc++.h>usingnamespacestd;intmain(){ int......
  • AtCoder Beginner Contest 253 Ex We Love Forest
    洛谷传送门AtCoder传送门没做出来。考虑求出方案数后除以\(m^i\)求出概率。设\(U=\{1,2,...,n\}\)。因为题目限制了加几条边,不妨设\(f_{i,S}\)为,加了\(i\)条边,\(S\)形成森林且\(U\setminusS\)没有边的方案数。转移枚举子集\(T\),钦定\(T\)为树,设\(T\)......
  • AtCoder Beginner Contest 298 Ex Sum of Min of Length
    洛谷传送门AtCoder传送门挺无脑的。是不是因为unr所以评分虚高啊/qd考虑把\(L_i\toR_i\)的路径拎出来,那么路径中点(或中边)左边的点挂的子树到\(L_i\)更优,右边的点挂的子树到\(R_i\)更优。差分一下,可以转化成\(O(q)\)次询问,每次询问形如\((u,v)\)表示求\(v\)......
  • AtCoder Beginner Contest 251 G Intersection of Polygons
    洛谷传送门AtCoder传送门经典结论,一个点\(P(x,y)\)在一个凸多边形内部\(S=\{(x_i,y_i)\}\)的充要条件是\(\foralli\in[1,n],(x_{i+1}-x_i,y_{i+1}-y_i)\times(x-x_i,y-y_i)\ge0\),其中\(S\)的点按照逆时针排列。然后我们运用叉积的一个性质......
  • AtCoder Beginner Contest 220 G Isosceles Trapezium
    洛谷传送门AtCoder传送门简单题。首先肯定是要枚举梯形其中一条底边的两个端点的。那么另一条底边除了斜率与这条边相等,两个端点的距离要分别与这条底边两个端点的距离相等。发现这个十分不好做,考虑一个梯形是等腰梯形的一个充要条件。不难想到,连接两底中点,这条线段垂直于两......
  • AtCoder Beginner Contest 249 G Xor Cards
    洛谷传送门AtCoder传送门好题。套路地,考虑枚举最优解的\(a\)异或和二进制下与\(k\)的\(\text{LCP}\),设在第\(i\)位不同。这样的好处是\(i\)之后的位可以随便选。之后按位贪心确定最优解\(b\)的异或和。考虑之前的答案是\(res\),当前在确定第\(j\)位,如何判断\(r......
  • AtCoder Beginner Contest 305 题解 A - F
    A-WaterStation题目大意找到离给定的数最近的一个\(5\)的倍数输出即可。解题思路我们取这个数对\(5\)的上下界,也就是整数除以\(5\)再乘以\(5\),以及这个数再加上一个\(5\),比较这两数和给定数的距离即可。ACCode#include<iostream>#include<algorithm>#includ......
  • AtCoder Beginner Contest 219 H Candles
    洛谷传送门AtCoder传送门套路化了。比较显然的关路灯型区间dp。考虑你\(t\)时刻熄灭一个初始长度为\(a\)的蜡烛,得分是\(\max(a-t,0)\),所以尝试把时间塞进状态。设\(f_{i,j,k,0/1}\)表示,熄灭完区间\([i,j]\)的蜡烛,当前时间是\(t\),在左端点还是右端点的最大得......