首页 > 其他分享 >AGC003 题解

AGC003 题解

时间:2024-08-21 22:39:40浏览次数:8  
标签:AGC003 10 int 题解 ll num sig getchar

目录

A - Wanna go back home

注意到横纵坐标是独立的,因此可以分开考虑。
考虑横坐标或纵坐标最终为零的充要条件为:

  • 没有出现任何关于它的任何操作(没有 NS,或没有 WE);
  • 出现所有关于它的任何操作(有向正方向走与往负方向走,如有 NS,或有 WE)。

统计每种字母是否出现即可。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll Read() {
	int sig = 1;
	ll num = 0;
	char c = getchar();
	while(!isdigit(c)) {
		if(c == '-') {
			sig = -1;
		}
		c = getchar();
	}
	while(isdigit(c)) {
		num = (num << 3) + (num << 1) + (c ^ 48);
		c = getchar();
	}
	return num * sig;
}
void Write(ll x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x >= 10) {
		Write(x / 10);
	}
	putchar((x % 10) ^ 48);
}


int main() {
	string s;
	cin >> s;
	bool a, b, c, d;
	a = b = c = d = false;
	int i;
	for(i = 0; i < s.size(); i++) {
		if(s[i] == 'N') {
			a = true;
		}
		if(s[i] == 'S') {
			b = true;
		}
		if(s[i] == 'W') {
			c = true;
		}
		if(s[i] == 'E') {
			d = true;
		}
	}
	if(!(a ^ b) && !(c ^ d)) {
		printf("Yes\n");
	}
	else {
		printf("No\n");
	}
	return 0;
}

B - Simplified majhong

考虑一个极大的区间 \([l, r]\),满足 \(\forall i \in [l, r]\),\(A_i > 0\)。
假设我们用相同点数的牌凑对子,则剩下的牌数量为满足 \(A_i\) 为奇数的 \(i\) 的数目。
考虑一个有序数列 \([p, q]\)(\(p < q\)),满足 \(\forall i \in (p, q)\),\(A_i \bmod 2 = 0\),且 \(A_p \bmod 2 = A_q \bmod 2 = 1\),因为 \(\forall i \in (p, q)\),\(A_i \bmod 2 = 0\) 且 \(A_i > 0\),所以 \(A_i \ge 2\),可以将 \((p, q)\) 间点数的对子各拆一个,然后让 \((p, p + 1), (p + 1, p + 2), \dots, (q - 1, q)\) 各凑一个对子,这样答案每次可以增加 \(2\),最多只剩下一张牌,这样就达到了这一极大区间对答案贡献的上界。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll Read() {
	int sig = 1;
	ll num = 0;
	char c = getchar();
	while(!isdigit(c)) {
		if(c == '-') {
			sig = -1;
		}
		c = getchar();
	}
	while(isdigit(c)) {
		num = (num << 3) + (num << 1) + (c ^ 48);
		c = getchar();
	}
	return num * sig;
}
void Write(ll x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x >= 10) {
		Write(x / 10);
	}
	putchar((x % 10) ^ 48);
}

const int N = 100005;
int n, a[N];

int main() {
	int i;
	n = Read();
	for(i = 1; i <= n; i++) {
		a[i] = Read();
	}
	ll sum = 0, ans = 0;
	for(i = 1; i <= n + 1; i++) {
		if(a[i]) {
			sum += a[i];
		}
		else {
			ans += sum / 2, sum = 0;
		}
	}
	Write(ans), putchar('\n');
	return 0;
}

标签:AGC003,10,int,题解,ll,num,sig,getchar
From: https://www.cnblogs.com/IncludeZFR/p/18372699

相关文章

  • CF2000 A~C 题解
    CodeforcesRound967(Div.2)A~C题解(未完待续)唐完了,B构造不会,C交互不会,整场爆切\(1\)题喜提\(-115\)rating强势上灰!我还会什么?I.2001A-MakeAllEqual先找出答案的下界。设众数为\(x\),其出现的次数为\(\operatorname{cnt}(x)\)。由于每次操作只能删除一个数,答......
  • CF889E题解
    \(\text{Problem-889E-Codeforces}\)\(\text{*3000}\)题意给一个序列,对于一个非负整数\(x\),有一个式子:\[x\bmoda_1+x\bmoda_1\bmoda_2+...+x\bmoda_1\bmoda_2...\bmoda_n\]求出上式的最大值。思路先去寻找题目的性质。首先\(x\)的值单调不增,然后如果当前\(x......
  • [SCOI2014] 方伯伯的玉米田 题解
    对于每次修改的区间以及其左边序列和右边序列,共三种情况:1.区间内比两侧低的还是低2.区间内比两侧低的变得比两侧高了3.区间内比两侧高的还是高那么现在又面临一个问题:在区间内变化后,对答案,即最长不下降子序列有什么影响。对区间左边:可能会使其最长不下降子序列增长对区间......
  • SP368 CSTREET - Cobbled streets 题解
    题意选n−1条道路连接n个城市,且使得其修建的价格最小。分析最小生成树的模板题,可以用kruskal来做。首先,先将所有的边权从小到大排序。然后,取当前没有选过的,且边权最小的边,判断它连接的两个点是否同属一个集合,如果不是就把他们加到同一个集合中,再记录答案。代码很简单,......
  • [CERC2019] ABB 题解
    题目可以转化为求最长回文子串,答案就是长度减去最长回文子串的长度。看到是求最长回文子串,一眼就容易想到马拉车。此题只需在求出回文半径的基础上储存回文串的右端点,将求出的右端点排序,只要右端点不在最后的字符就结束(不能补),如果在最后的字符就取原字符串长度与当前回文子串的差......
  • [JOISC 2023 Day3] Tourism 题解
    大家好,我喜欢珂朵莉树,所以我用珂朵莉树\(AC\)了本题。实际上,我们比较容易发现,这题实际上就是求\([l,r]\)中的所有点作为关键点时,虚树所压缩的所有点(实际上就是显现出来的点+在虚边上的点)。那么我们容易发现,一个点\(x\)作为虚树所压缩的所有点的充要条件为:\(x\)是至少......
  • 【题解】Solution Set - NOIP2024集训Day12 树上启发式合并
    【题解】SolutionSet-NOIP2024集训Day12树上启发式合并https://www.becoder.com.cn/contest/5472「CF600E」Lomsatgelral直接dsuontree。记录每一个颜色的出现次数。「IOI2011」Race之前是用点分治做的。考虑dsuontree。每个子树内维护到根节点的距离为\(x\)......
  • SP368 CSTREET - Cobbled streets 题解
    题意选n−1条道路连接n个城市,且使得其修建的价格最小。分析最小生成树的模板题,可以用kruskal来做。首先,先将所有的边权从小到大排序。然后,取当前没有选过的,且边权最小的边,判断它连接的两个点是否同属一个集合,如果不是就把他们加到同一个集合中,再记录答案。代码很简单,......
  • 莫队的 1.5 近似构造 题解
    前言题目链接:洛谷。感觉T4比T3水,虽然我都没做出来。题意简述给定\(1\simn\)的排列\(a\)和\(m\)个区间\([l_i,r_i]\)。定义值域区间\([L,R]\)的价值为\(\operatorname{val}([L,R])\operatorname{:=}\max\limits_{i=1}^m\sum\limits_{k=l_i}^{r_i}[L......
  • P10892 SDOI2024 题解
    【题意简述】你有一个数字\(n\),每次操作将\(n/2\),如果\(n\)是一个奇数,你会纠结是向上取整还是向下取整。问你最少纠结多少次。多组数据。【思路】为了方便起见,我们在二进制下重新审视这个题目:在二进制下,一个数除以\(2\)等同于右移一位。默认向下取整,因为右移会舍弃......