首页 > 其他分享 >10.31考后订正

10.31考后订正

时间:2024-10-31 20:10:21浏览次数:1  
标签:const 考后 10.31 订正 int ll long ri define

T1 可以了

做法

考虑先算出总体的平均数记为 $ \Delta $ .
之后我们遍历每一块蛋糕并计算从第一块到当前这一块的蛋糕的平均值 \(x\) 是否 \(\geq \Delta\).
如果满足这个条件,就继续向后拓展,否则就停下.
记得处理边界条件:全都可以的话就直接取第一块,如果第一块就不行的话直接输出 \(-1\).

代码

#include<bits/stdc++.h>

#define ri register int
#define io cin.tie(0),cout.tie(0),ios::sync_with_stdio (false)
#define ll  long long

using namespace std;
const ll N = 514514;
ll a[N], n;
long double det_x;
ll ans = -1;

int main()
{
	io;
	cin >> n;
	for ( ri i = 1; i <= n; i++ )
	{
		cin >> a[i];
		det_x += a[i];
	}
	det_x /= n;
	for ( ri i = 1; i <= n; i++ )
	{
		double tmp = a[i];
		ll l = 1;
		while ( tmp / l >= det_x )
		{
			tmp += a[++i];
			l++;
			if ( i >= n && i - l + 1 <= n )
			{
				cout << i - l + 1 << "\n";
				exit ( 0 );
			}

		}
	}
	cout << -1 << "\n";
}

T2 淘汰

image

做法

一眼顶针为考虑反悔贪心
我们先把那 \(k\) 个可以用加速的先用了,如果这个时候发现已经可以了那直接输出就行,关键在于怎么处理在加速之外的。
之后我们尝试增加一个项目,有两种可能。

1

新加一个 \(a_i\).

2

新加一个 \(b_i\),把之前的 $b_j $ 换成 \(b_j\) 。
所以我们需要维护三个堆:目前不玩项目的 \(a_i\) ,目前不玩的项目的 \(b_i\) ,目前玩的项目里 \(b_i-a_i\)
是换的代价

代码


#include <bits/stdc++.h>

#define ll long long
#define io cin.tie(0), cout.tie(0), ios::sync_with_stdio(false)
#define lb long double
#define ri int


using namespace std;
const int N = 314514;
struct node
{
	ll val, id;
	bool operator < ( const node&aa ) const
	{
		return val > aa.val;
	}
};
priority_queue<node> q1, q2, q3;
ll ans = 0;
int vis[N];
int a[N], b[N];
int main()
{
	io;
	int n, k;
	cin >> n >> k;
	for ( ri i = 1; i <= n; i++ )
	{
		cin >> a[i] >> b[i];
	}
	for ( ri i = 1; i <= n; i++ )
	{
		q1.push ( {a[i], i} );
		q2.push ( {b[i], i} );
	}
	for ( ri i = 1; i <= k; i++ )
	{
		ll minn = 1e9, op, x, y;
		while ( !q1.empty() && vis[q1.top().id] != 0 ) q1.pop();
		if ( !q1.empty() && q1.top().val < minn )
		{
			minn = q1.top().val;
			x = q1.top().id;
			op = 1;
		}
		while ( !q2.empty() && vis[q2.top().id] != 1 ) q2.pop();
		if ( !q2.empty() && q2.top().val < minn )
		{
			minn = q2.top().val;
			x = q2.top().id;
			op = 2;
		}
		while ( !q3.empty() && vis[q3.top().id] != 1 ) q3.pop();
		while ( !q2.empty() && vis[q2.top().id] != 0 ) q2.pop();
		if ( !q3.empty() && !q2.empty() && q3.top().val + q2.top().val < minn )
		{
			minn = q3.top().val + q2.top().val;
			x = q3.top().id;
			y = q2.top().id;
			op = 3;
		}
		while ( !q2.empty() && vis[q2.top().id] != 0 ) q2.pop();
		while ( !q3.empty() && vis[q3.top().id] != 2 ) q3.pop();
		if ( !q3.empty() && !q2.empty() && q3.top().val + q2.top().val < minn )
		{
			minn = q3.top().val + q2.top().val;
			x = q3.top().id;
			y = q2.top().id;
			op = 4;
		}
		ans += minn;
		if ( op == 1 )
		{
			vis[x] = 1;
			q2.push ( {b[x] - a[x], x} );
			q3.push ( { -a[x], x} );
		}
		if ( op == 2 )
		{
			vis[x] = 2;
			q3.push ( { a[x] - b[x], x} );
		}
		if ( op == 3 )
		{
			vis[x] = 0;
			vis[y] = 2;
			q1.push ( { a[x], x} );
			q2.push ( { b[x], x} );
			q3.push ( { a[y] - b[y], y} );
		}
		if ( op == 4 )
		{
			vis[x] = 1;
			vis[y] = 2;
			q2.push ( { b[x] - a[x], x} );
			q3.push ( { -a[x], x} );
			q3.push ( { a[y] - b[y], y} );
		}
	}
	cout << ans << endl;
	return 0;
}

总结

\(t1\)赛时写了出来,但是数组开小了。
\(t2\) 由于之前看到过很相似的题目所以想到了是反悔贪心,但是具体没想好怎么写,赛时没写出来,一直在调。
\(t3\),\(t4\)看着暴力不好打,直接逃跑。

标签:const,考后,10.31,订正,int,ll,long,ri,define
From: https://www.cnblogs.com/warfarin/p/18518773

相关文章

  • 10.31日
    vector:动态数组,允许在尾部高效地添加和删除元素,支持随机访问。非常适合需要频繁访问元素和进行动态扩展的应用场景。list:双向链表,支持快速插入和删除操作,但不支持随机访问。适合于需要频繁插入和删除元素的情况。deque(double-endedqueue):双端队列,可以在两端高效地添加和删除......
  • juc复习(下篇)(10.31)
    juc复习(10.31)阻塞队列写入:如果队列满了,就必须阻塞等待读取:如果队列是空的,必须阻塞等待生产使用阻塞队列的情况多线程并发处理,线程池四组API方式抛出异常有返回值不抛出异常阻塞等待超时等待添加addofferputoffer(3个参数)移除removepolltakepoll(两个参数)检测队首元素e......
  • 2024.10.31模拟赛
    一定要好好睡觉啊,不然打模拟赛的时候会困死的!!!非常非常困的7:50时就开始打模拟赛,还是打了四个小时。打了T1、T2的正解,T3的5分特殊样例、T3的10分特殊样例,预计总215分。然后经过漫长的三个小时的等待,出现了T1100分,T265分,T360分,T410分、总分235分的神奇成绩。虽然结果比预......
  • 2024.10.31总结
    本文于github同步更新。最后一天喽A:卡双模哈希......
  • 杂题随笔 10.31 两道LIS相关的题
    https://www.luogu.com.cn/problem/AT_abc354_f题意:给定一个序列a,求出所有的i使得任意一个a的最长子序列包含i。解法:我们先求这个序列的LIS的长度maxx,然后再去正着求一遍最长上升子序列和反着求一遍最长下降子序列即可,如果拼起来等于maxx那么说明i这个点是满足要求的点。注意细......
  • 2024.10.31 人工智能技术学 第三课时 AI
    预训练(前提基础)补充语料库微调:针对特定人任务的专门训练。——学科专业化推理:模型根据输入生成输出文本。——学生解答问题的过程生成式人工智能包括图像生成、音频生成、视频生成、文本生成海螺AI(很不错)文心一言kimi(写作业用)智谱清言CAJ可以读知乎论文PPTMINDSHOW:ht......
  • 订正
    include<bits/stdc++.h>usingnamespacestd;defineintlonglongintn,m,k;inta[500010];intst;strings;signedmain(){cin>>n>>m;for(inti=0;i<n;i++)a[i]=i+1;for(inti=1;i<=m;i++){cin>>s;intd=0,cur=0;while('0......
  • 【赛后反思】洛谷基础赛 #15 &「LAOI」Round 6 考后总结(待补完)
    LGR-198-Div.3考后总结又要掉分了:展开目录目录LGR-198-Div.3考后总结A[太阳]]请使用最新版手机QQ体验新功能-100ptsBRadiation-100ptsC区间测速-50ptsDYetAnotherGraphColorationProblem-5ptsA[太阳]]请使用最新版手机QQ体验新功能-100pts因为实际上要截......
  • 20240726模拟赛订正题笔记
    (T1)lnsyoj2212刷数组考场上切掉了,所以来说说考场上的做法。首先看数据范围,线段树并不能拿满分,所以考虑在数组上操作。如何处理区间覆盖:记录一下区间覆盖的数,然后记录第几次覆盖,单点修改或增加时查看次数被覆盖了几次,若与正常覆盖次数不符,则将此数设为新的覆盖数。考场代码如下......
  • 20240724模拟赛订正题笔记
    (T1)lnsyoj2208逆流而上/P10737[SEERC2020]ReverseGame考虑到失败时字符串应为前面都是0,后面都是1(例如"0000001111111")所以可以将原串的逆序对数求出,记为m,对于每个可翻转的串进行分类讨论:1."10"->"01"可以将原串的逆序对减1。2."100"->"001""110"->"011......