首页 > 其他分享 >8.17日二分测试总结

8.17日二分测试总结

时间:2024-08-18 11:48:20浏览次数:9  
标签:二分 cout int mid long maxn 测试 8.17 check

8.17日二分测试总结

比赛传送门

分数情况

A.砍树 B.买木头 C.数列分段2 D.吃冰棍 E.跳石头 F.奶牛晒衣服
100 80 100 \(_{没做:(}\) 10 0

总体分数

微信图片 20240818105911

\(_{很惨}\)

T1. P1873 [COCI 2011/2012 #5] EKO / 砍树

题目传送门

问题分析

运用二分答案与 check 函数

check 函数用来检测答案是否合法

\(AC\) \(Code:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e6 + 7;
int n, m;
int a[maxn];
bool check(int x)
{
	int ans = 0;
	for (int i = 1; i <= n; ++i)
	{
		if (a[i] > x)
		{
			ans += (a[i] - x);
		}
	}
	return ans >= m;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	int maxx = 0;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		maxx = max(maxx, a[i]);
	}
	int l = 1, r = maxx + 1;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (check(mid))
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	cout << l << "\n";
	return 0;
}

T2. B3880 [信息与未来 2015] 买木头

题目传送门

\(Wrong\) \(Code:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn], b[maxn];
int n, m;
bool check(int x)
{
	int sum = 0;
	for (int i = 1; i <= n; ++i)
	{
		sum += a[i] / x * b[i];
		if (sum >= m)
		{
			return 1;
		} 
	}
	return 0;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> a[1] >> b[1];
	int maxx = INT_MIN;
	for (int i = 2; i <= m; ++i)
	{
		a[i] = ((a[i - 1] * 37011 + 10193) % 10000) + 1;
		b[i] = ((b[i - 1] * 73011 + 24793) % 100) + 1;
		maxx = max(a[i], maxx);
	}
	int l = 0, r = maxx + 1;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (check(mid))
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	cout << l << "\n";
	return 0;
}
/*
10 10000 8 20
*/

问题分析

通过题目给的两个公式:

  • \(l_i=((l_{i-1}\times37011+10193) \bmod 10000)+1\)
  • \(s_i=((s_{i-1}\times73011+24793) \bmod 100)+1\)

和给出的初始值求出后面的每个数的大小

通过二分答案与 check 函数查找合法的答案

错误分析

  • 细节决定成败

题目中说:

一行四个整数 \(n,m,l_1,s_1\)。其中 \(l_1\) 是第一个供货商木头的长度,\(s_1\) 是第一个供货商木头的数量。

而我的输入为什么是 \(m\) !!! \(_{气死我了}\)

\(AC\) \(Code:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn], b[maxn];
int n, m;
bool check(int x)
{
	int sum = 0;
	for (int i = 1; i <= n; ++i)
	{
		sum += a[i] / x * b[i];
		if (sum >= m)
		{
			return 1;
		} 
	}
	return 0;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> a[1] >> b[1];
	int maxx = INT_MIN;
	for (int i = 2; i <= n; ++i)
	{
		a[i] = ((a[i - 1] * 37011 + 10193) % 10000) + 1;
		b[i] = ((b[i - 1] * 73011 + 24793) % 100) + 1;
		maxx = max(a[i], maxx);
	}
	int l = 0, r = maxx + 1;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (check(mid))
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	cout << l << "\n";
	return 0;
}
/*
10 10000 8 20
*/

T3. P1182 数列分段 Section II

题目传送门

前置题目 P1181 数列分段 Section I

\(AC\) \(Code:\)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn];
int n, m;

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	int sum = 0, ans = 1;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		if (sum + a[i] <= m)
		{
			sum += a[i];
		}
		else
		{
			ans++;
			sum = a[i];
		}
	}
	cout << ans << "\n";                      
	return 0;
}

回到正题(P1182)

使用P1181的大部分代码作为P1182的 check 函数

具体代码如下

\(AC\) \(Code:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 7;
int n, m;
int a[maxn];
bool check(int x)
{
	int cnt = 1;
	int sum = 0;
	for (int i = 1; i <= n; ++i)
	{
		if (sum + a[i] <= x)
		{
			sum += a[i];
		}
		else
		{
			cnt++;
			sum = a[i];
		}
	}
	return cnt <= m;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	int num = 0;
	int maxx = 0;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		maxx = max(maxx, a[i]);
		num += a[i];
	}
	int l = maxx - 1;
	int r = num + 1;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (check(mid))
		{
			r = mid;
		}
		else
		{
			l = mid;
		}
	}
	cout << r << "\n";
	return 0;
}
/*
5 3
4 2 4 5 1
*/

T4. B3629 吃冰棍

题目传送门

\(Wrong\) \(Code:\)

问题分析

做的时候想的是用模拟 \(+\) 枚举

题目说是二分

但是二分没有想到怎么做

标签:二分,cout,int,mid,long,maxn,测试,8.17,check
From: https://www.cnblogs.com/yucheng0630/p/18365442

相关文章

  • day24-测试之接口测试基础
    目录一、接口的定义二、接口的优点三、API接口四、接口测试流程五、网络基础概念六、HTTP和RURL七、get和post请求八、数据格式九、状态码十、restful风格十一、接口工具一、接口的定义     程序之间协作所要遵循的一套规范、标准二、接口的优点  ......
  • day23-测试自动化之Appium的滑动和拖拽事件、高级手势ActionChains、手机操作API
    目录一、滑动和拖拽事件    1.1.应用场景    1.2.swipe滑动事件    1.3.scroll滑动事件    1.4.drag_and_drop拖拽事件    1.5.滑动和拖拽事件的选择二、高级手势ActionChains    2.1.应用场景    2.2.使用......
  • D46 2-SAT+线段树优化+二分 [ARC069F] Flags
    视频链接: [ARC069F]Flags-洛谷|计算机科学教育新生态(luogu.com.cn)//D462-SAT+线段树优化+二分O(nlognlogv)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#definemid((l+r)>>1)#definels(u<<1)#definer......
  • JetBrains Aqua 2024.2 (macOS, Linux, Windows) - 测试自动化 IDE
    JetBrainsAqua2024.2(macOS,Linux,Windows)-测试自动化IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-aqua/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAqua测试自动化IDE享受更高效的测试体验为什么选择Aqua......
  • 《软件测试》黑书全22章笔记总结——软测新手小白必读
    一、软件测试综述1.第一章:软件测试的背景1.1软件缺陷只有至少满足下列5个规则之一才称为发生了一个软件缺陷软件未实现产品说明书要求的功能软件出现了产品说明书指明不应该出现的错误软件实现了产品说明书未提到的功能软件未实现产品说明书虽未明确提及但应该实现的......
  • 2024.8.17
    DATE#:20240817ITEM#:DOCWEEK#:SATURDAYDAIL#:捌月拾肆TAGS <BGM="快哉风--黄金玉米王"><theme=oi-language><theme=oi-graphtheory><[空]><[空]>取次花丛懒回顾,半缘修道半缘君--元稹《离思五首·其四》[P4208[JSOI2008]最......
  • 2024.8.17 鲜花
    コネクト交(か)わした约束(やくそく)忘(わす)れないよ『无法忘却彼此结下的约定』kawashitayakusokuwasurenaiyo目(め)を闭(と)じ确(たし)かめる『轻闭双眼再次确认』mewotojitashikameru押(お)し寄(よ)せた闇(やみ)振(ふ)り払(はら)って进(すす)むよ『驱......
  • [考试记录] 2024.8.17 csp-s模拟赛21
    T1Set解析思考+组合题场上只能想到暴力01背包再加上bitset优化,很好打。本应该有60pts(?或者更多),不曾想由于spj的一些未知原因喜提systemerror,全部cancelled。喜提0pts。......
  • D1-H 哪吒 HDMI测试
    使用镜像D1-H哪吒HDMI测试固件https://www.aw-ol.com/downloads/resources/22输入命令切换到HDMI输出:cd/sys/kernel/debug/dispdbgechodisp0>name;echoswitch1>command;echo410000x40x1010008>param;echo1>start;测试显示colorbar:echo1>/sys/cl......
  • dp题单vjudge 8.17
    HDU-1024MaxSumPlusPlushttps://acm.hdu.edu.cn/showproblem.php?pid=1024可以想到用dp过,但是无论时间和空间都不够,然后就不会了https://www.cnblogs.com/wuwangchuxin0924/p/6546901.html先写出转移方程,然后发现如果把其中一部分用其他的东西储存起来,就不需要重复寻找,直......