首页 > 其他分享 >CF500C New Year Book Reading 题解

CF500C New Year Book Reading 题解

时间:2023-07-08 10:56:50浏览次数:35  
标签:需要 int 题解 sum CF500C 搬动 vis Book ans

这一题是一道比较复杂的贪心(对于本蒟蒻来说)

假如两本书 \(a\) 和 \(b\),先看 \(a\) 再看 \(b\),那么我们开始的时候就把 \(a\) 放在上面。

这样的话,我们看 \(a\) 时就不需要搬动 \(b\),看 \(b\) 的时候会搬动 \(a\)。

而一开始如果把放在上面,看 \(a\) 的时候需要搬动 \(b\),看 \(b\) 的时候需要搬动 \(a\) ,就比一开始的 \(a\) 放在上面多搬了。

将两本书推到更多也是同样的道理,先看的书放在上面,后看的书放下面。

看相同的书的时候,需要搬动的时两本书之间的所有书,因此需要倒序枚举之前的书。

最后的代码


#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int n, m, w[N], a[N], ans;//n,m,w[]意义请看题目,a[]为要看的书,ans为看所有书需要的最少体力
bool vis[N];//vis数组用来标记
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> w[i];//输入每本书的重量,需要的体力
	for (int i = 1; i <= m; i++)
	{
		cin >> a[i];//输入要看的书
		memset(vis, 0, sizeof(vis));//对于每次阅读书,都要重新统计上面的所有书的总重量
		int sum = 0;
		for (int j = i - 1; j >= 1; j--)//倒序枚举之前看过的书
		{
			if (a[j] == a[i])//如果之前看过,那么a[j]前面的书就不需要搬动
				break;
			if (!vis[a[j]])//重复的书只统计一次重量
			{
				sum += w[a[j]];
				vis[a[j]] = true;//标记这本书已经统计过了,后面不计算重量
			}
		}
		ans += sum;//需要的体力加到总体力里面去
	}
	cout << ans;//输出总体力
	return 0;
}

标签:需要,int,题解,sum,CF500C,搬动,vis,Book,ans
From: https://www.cnblogs.com/Sunseeker-Foam/p/CF500C.html

相关文章

  • AtCoder Beginner Contest 308 题解
    https://atcoder.jp/contests/abc308/tasks_printA-NewScheme过水已隐藏。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>usingnamespacestd;u......
  • [HNOI2008] 玩具装箱 题解
    很难得遇到细节题打码5分钟调试两小时感谢游老师送出的1.5h调试,感激(争取每天用我的代码训练老师的该题能力)细节/思路见注释#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;/*本题细节很多!!!1.注意要把‘0’放进去,否则'1'一直弹不出去,导致答案偏大2......
  • 题解 P8648【[蓝桥杯 2017 省 A] 油漆面积】
    怎么题解区全是扫描线,还有个\(O(n^3)\)暴力老哥。为防止误导新人,给个理论上稳过的\(O(n^2)\)解法。二维前缀和可以处理若干次单点加,最后若干次矩形查的问题。将其差分,即可处理若干次矩形加,最后若干次单点查的问题。于是我们使用差分将所有矩形加上,然后做一遍二维前缀和,即......
  • 「NOIP 模拟赛 20230707」T2 - 涂照片 题解
    题目大意原题有一个\(n+1\timesm+1\)的网格。对于每一行\(i\),都要将左侧的一些格子\((i,1),(i,2),\ldots,(i,x)\)涂黑,其中\(x=k\)的概率为\(a_{i,k}\)。同理对于每一列\(j\),都要将上方的一些格子\((1,j),(2,j),\ldots,(x,j)\)涂黑,其中\(x=k\)的概率为\(b_{k,......
  • P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解
    P7561[JOISC2021Day2]道路の建設案(RoadConstruction)题解题目描述JOI国是一个\(x\timesy\)的二维平面,王国里有\(n\)个城镇,分别编号为\(1,2,\cdots,n\in[1,2.5\times10^5]\),其中第\(i\)个城镇的坐标为\((x_i,y_i)\)。在JOI国,正计划修建连接两座城......
  • AT_bcu30_2019_qual_a 题解
    思路纯模拟题,给定N和P后,定义一个计数器sum,重复N次输入,每输入一次就判断P也就是子弹的能量是否≥每面墙的厚度x,如果是,就用P减去x,sum增加1,表示穿过了一面墙,否则跳出循环,输出sum。代码#include<iostream>usingnamespacestd;intmain(){intn,p,sum=0,......
  • AT_nikkei2019ex_h 题解
    思路这是一道博弈题,最优策略是高桥的k一直是1,青木的k一直是0,可以保证拿走的硬币不超过剩下的硬币,这样每次两人都取完后拿走硬币的数量是8^1+8^0,结果是9,那么就用Nmod9,得出的结果就是剩下的硬币。如果结果是0,那么最后拿的就是青木,输出Lose。如果结果是2、4、6,都......
  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(三)
    ​贴接上回。。。 【往期FAQ参考】【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(二) 【本期FAQ】1、第一次调用geolocation.getCurrentLocation()接口,弹出权限弹框后并未返回结果,再次调用接口才会成功返回?(API8......
  • AT_nikkei2019ex_e 题解
    思路进题扫一眼题目描述,可以写成这样:是不是很眼熟?这不就是角谷猜想嘛,但它不是让我们求步数果,而是求结果。它给了步数,求结果那就要倒推,第二个样例给了P最大时,也就是1000输出的结果1789997546303,我们就用这个结果往前推,带入角谷猜想的运算过程,就可以了。记得开longlong。......
  • AT_pakencamp_2020_day1_c 题解
    思路看到题目的第一句话我就知道要用map了。一道map的入门题,定义一个map来输入和统计参加次数后,定义一个计数器sum用来统计人数。代码#include<iostream>#include<string>#include<map>usingnamespacestd;map<string,int>personnel;intmain(){intn,sum......