首页 > 其他分享 >ABC317题解报告

ABC317题解报告

时间:2023-09-02 22:45:53浏览次数:38  
标签:cnt 报告 int 题解 sum cin ABC317 long ans

我直接从第三题开始讲了。

T3

把数组 \(A\) 从大到小排序。

然后从前往后把前 \(q\) 个数加起来,然后判断这 \(q\) 个数的和与 \(d\) 的大小关系,如果大了就变成 \(d\)。

然后有些细节就看代码吧。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e5 + 10;
int n,d,p;
int a[maxn];
int cnt,sum;
bool cmp(int a,int b)
{
	return a > b;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n >> d >> p;
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
		ans += a[i];
	}
	sort(a + 1,a + n + 1,cmp);
	for(int i = 1;i <= n;i++)
	{
		sum += a[i];
		cnt++;
		if(cnt >= d && sum <= p)
		{
			break;
		}
		if(cnt == d)
		{
			if(sum >= p)
			{
				cnt = 0;
				ans -= sum - p;
				sum = 0;
			}
		}
	}
	if(sum >= p)
	{
		ans -= sum - p;
	}
	cout << ans;
	return 0;
}

T4

看到 \(n \le 16\),想到状压 DP。

然后就没有然后了, DP式就是很普通的 DP 式。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans = -1e9;
int d[20][20];
int dp[1 << 17];
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i = 0;i < n;i++)
	{
		for(int j = 0;j < n;j++)
		{
			if(i != j && i < j)
				cin >> d[i][j];
		}
	}
	for(int i = 0;i < (1 << n);i++)
	{
		for(int j = 0;j < n;j++)
		{
			if(!(i & (1 << j)))
			{
				continue;
			}
			for(int k = j + 1;k < n;k++)
			{
				if(!(i & (1 << k)))
				{
					continue;
				}
				int befor = i xor (1 << j) xor (1 << k);
				dp[i] = max(dp[befor] + d[j][k],dp[i]);
			}
		}
	}
	for(int i = 0;i < (1 << n);i++)
	{
		ans = max(ans,dp[i]);
//		cout << dp[i] << " " << i << '\n';
	}
	cout << ans;
	return 0;
}
/*
16
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1
1 1 1 1
1 1 1
1 1
1

*/

T5

有很多种方法。

比如liangbowen先生说的:e你直接从后往前枚举 i 不就做完了

又比如ran_qwq所写到的:

谔谔,大家的方法都比我高级。

我是直接容斥。

首先先算出以这个点为 \(k\) 的组数并且忽略第二条。

然后减去 \(a_i = a_j = a_k\) 的情况即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 3e5 + 10;
int n,ans;
int cnt[maxn],sum[maxn];
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		int x;
		cin >> x;
		ans += cnt[x] * (i - 1) - sum[x];
		sum[x] += i;
		cnt[x]++;
	}
	for(int i = 1;i <= n;i++)
	{
		ans -= cnt[i] * (cnt[i] - 1) * (cnt[i] - 2) / 6;
	}
	cout << ans;
	return 0;
}

但是呢,你有可能对 ans += cnt[x] * (i - 1) - sum[x]; 有疑问,我们画个图就知道了。

标签:cnt,报告,int,题解,sum,cin,ABC317,long,ans
From: https://www.cnblogs.com/Carousel/p/17674327.html

相关文章

  • 龙芯平台Hadoop集群搭建问题解决
    这几天一直在困扰我pycurl版本和本机的版本不符合他连接又连接的自己自带的版本与系统不相同低级也会报错 https://blog.csdn.net/u010910682/article/details/89496550/?ops_request_misc=&request_id=&biz_id=102&utm_term=pycurl7.45.2%20%E6%90%AD%E9%85%8Dlibcurl%E6%......
  • 假期周进度报告11
    本周(8.27-9.2)主要开展大数据知识的学习和python知识以及调查报告的学习。下周继续学习大数据知识和python知识。周日,进行大数据知识和python知识的学习,决定专心学习大数据和python,学了黑马第五章,遇到的问题去网络查找资料并最终查找到解决方案累积到我的收藏夹中,为下次遇到问题可......
  • 2023.9.2-假期周进度报告
    本周,主要进行休息,将社会实践照片进行了一个简单的整理,并且完成返校的基本准备,并成功返校。本周日,主要进行休息,完成了一天简单的休息,遇到了返校要准备什么东西的问题,解决方法是过几天再说吧,等开学前一两天再思考吧,现在时间还早。本周一,主要进行休息,完成了又一天简单的休息,遇到了......
  • 【题解】NOIP2021
    咕咕咕的东西总是要补的。A.报数题目描述:报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数,但如果下一个报的数是\(7\)的倍数,或十进制表示中含有数字\(7\),就必须跳过这个数,否则就输掉了游戏。在一个风和日丽的下午,刚刚结束SPC20nn比赛的小r和......
  • 【题解】Luogu[P7706] 「Wdsr-2.7」文文的摄影布置
    Link一道很有意思的线段树题。第一步分析,我们要求最大的\(a_i+a_k-\min{(b_j)}\),事实上我们可以直接省去这个\(\min\)因为要最大化这个东西,选出来的\(b_j\)必然是最小的,所以原题转化为给定\(l,r\)求\(\max{(a_i-b_j+a_k)}\)其中\(i<j<k\)。第二步分析,我们发现这是一......
  • 假期周进度报告8
    (1)本周做了什么,花在学习上多长时间,花在代码上多长时间,花在解决问题用了多长时间本周独立完成了一个springboot小项目。每天会使用三个小时的时间来学习,大部分时间都花在了敲代码上。SpringMVC是SpringFramework的一个子框架,用于构建Web应用程序。它基于模型-视图-控制器(MVC)设......
  • 【题解】Educational Codeforces Round 153(CF1860)
    每次打都想感叹一句,Educational名不虚传。A.NotaSubstring题目描述:有\(t\)组数据,对于每一组数据,你需要判断能否构造一个只由左右括号组成且长度为已经给定字符串的\(2\)倍且已经给定的字符串不是子串的合法字符串。注:合法的字符串是左右括号能完全匹配的字符串。如果能,......
  • 【题解】Luogu-P2482 SDOI2010 猪国杀
    写了\(358\)行,\(11.94\mathrm{KB}\),有这么几个地方写挂了:反猪决斗一定选主猪。游戏结束判定是主猪死亡或全部反猪死亡。决斗可能被反杀,之后不能再出牌。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,m;charCh[3];queue<char>Deck;in......
  • CF1863C 题解
    CF1863CMEXRepetition题解Links洛谷CodeforcesDescription给你一个长度为\(n\)的序列\(a\),满足\(\foralli\in[1,n]\),\(0\leqa_{i}\leqn\)且序列中的数互不相同。定义一次操作为:按照\(i\)从\(1\)到\(n\)的顺序,\(a_{i}\gets\operatorname{MEX}(a_{1}......
  • CF1863B 题解
    CF1863BSplitSort题解Links洛谷CodeforcesDescription给定一个\(1\simn\)的排列\(q\),你可以多次进行以下操作:新建一个初始为空的序列\(q\);选择一个整数\(x\)(\(2\leqx\leqn\));按照在\(p\)中出现的顺序将所有小于\(x\)的数添加到序列\(q\)末尾。按照在......