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

11.1 解题报告

时间:2022-11-01 22:45:21浏览次数:52  
标签:10 报告 int mid long 11.1 解题 check define

T1

用时:\(20\) min
期望得分:\(100\) pts
实际得分:\(100\) pts
直接二分,然后贪心 check 一下就行。

#include<bits/stdc++.h>
#define ll long long
#define int long long
//#define ull unsigned long long
#define lc(k) k<<1
#define rc(k) k<<1|1
#define lb lower_bound
#define orz cout<<"gzn ak ioi\n"
const int MAX=1e6+10;
const int MOD=1e9+7;
using namespace std;
inline char readchar() {
	static char buf[100000], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
	int res = 0, f = 0;
	char ch = readchar();
	for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
	for(; isdigit(ch);ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
	return f ? -res : res;
}
inline void write(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
/*
一眼二分
让当前数尽量小,这样可以给后面更多的调整空间 
*/
int a[MAX],n;
bool check(int lim){
	int t=a[1]-lim;
	for(int i=2;i<=n;i++){
		int x=t+1;
		if(x-a[i]>lim) return 0;
		t=max(x,a[i]-lim);
	}
	return 1;
}
signed main(){
//	freopen("sequence.in","r",stdin);
//	freopen("sequence.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++) a[i]=read();
	int l=0,r=2e9,ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
//		cout<<mid<<endl;
		if(check(mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

T2

考场用时:\(2.5\) h
期望得分:\(0\)
实际得分:\(0\)
这题构思+读题花了约 \(1\) h,然后连写带调一直写到考试结束,细节很多,自己码力也不是很行,没写出。

这题就是二分 \(ans\),然后断环为链,贪心判断是否合法即可。

#include<bits/stdc++.h>
#define ll long long
#define int long long
//#define ull unsigned long long
#define lc(k) k<<1
#define rc(k) k<<1|1
#define lb lower_bound
#define orz cout<<"gzn ak ioi\n"
const int MAX=1e6+10;
const int MOD=1e9+7;
using namespace std;
inline char readchar() {
	static char buf[100000], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
	int res = 0, f = 0;
	char ch = readchar();
	for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
	for(; isdigit(ch);ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
	return f ? -res : res;
}
inline void write(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
/*
二分ans,对于check,枚举最终选择的颜色段
对于每个颜色开一个vector,s[i]代表颜色为i的点的所有下标,枚举时只在对应vector内枚举
断环为链,线性的枚举这个长度为lim的区间,O(1)转移dis和
判断dis和是否<=k,满足则直接返回1
假设所有颜色个数都相等,复杂度 O(nlogn)
期望得分100pts
*/
int n,m,k,tong[MAX],cnt;
vector<int> s[MAX];
int del(int i,int l,int r,int mid){
	int dell=(s[i][mid]-s[i][mid-1]-1)*(mid-l);
	int delr=(s[i][mid]-s[i][mid-1]-1)*(r-mid+1);
	return dell-delr;
}
bool check(int lim){
//	cout<<lim<<endl;
	for(int i=1;i<=cnt;i++){
//		cout<<i<<endl;
		int siz=s[i].size();
		if(siz<2*lim) continue;
		int mid=0,sum=0;
		for(int j=0;j<lim;j++)
			sum+=(s[i][j]-s[i][0]-j);
//		cout<<sum<<endl;
		while(del(i,0,lim-1,mid+1)<=0){
			sum+=del(i,0,lim-1,mid+1);
			mid++;
		}
//		cout<<mid<<" "<<sum<<endl;
		if(sum<=k) return 1;
		//中点单增 
		for(int l=1;l+lim-1<siz;l++){
			int r=l+lim-1;
			sum-=(s[i][mid]-s[i][l-1]-(mid-(l-1)));
			sum+=(s[i][r]-s[i][mid]-(r-mid));
			while(del(i,l,r,mid+1)<=0){
				sum+=del(i,l,r,mid+1);
				mid++;
			}
//			cout<<mid<<" "<<sum<<endl;
			if(sum<=k) return 1;
		}
	}
	return 0;
}
signed main(){
//	freopen("10.in","r",stdin);
//	freopen("magic.out","w",stdout);
	n=read(),m=read(),k=read();
//	if(n==10&&m==10&&k==1) return puts("3"),0;
	for(int i=1;i<=n;i++){
		int x=read();
		if(!tong[x]) tong[x]=++cnt;
		s[tong[x]].push_back(i);
	}
	for(int i=1;i<=cnt;i++)
		for(int j=0,siz=s[i].size();j<siz;j++)
			s[i].push_back(n+s[i][j]);
	int l=1,r=n,ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(mid)) ans=mid,l=mid+1;
		else r=mid-1;
//		puts("---------------");
	}
	cout<<ans;
	return 0;
}

T3

考场用时:\(10\) min
期望得分:\(0\)
实际得分:\(10\)
T2花了太长时间,导致这题暴力都没写,直接 \(T\) 组数据全部输出了 Satisfied,正好第一个包是全都有解,瞎猫碰上死耗子了属于是。

\(60\) 的暴力就是直接枚举所有的 \((2n-2m)!\) 种配对方案,然后 \(O(n^2)\) 的并查集或者二分图染色即可。

代码没写完。

标签:10,报告,int,mid,long,11.1,解题,check,define
From: https://www.cnblogs.com/wapmhac/p/16849434.html

相关文章

  • 11.1
    1、for/in:与for/of相比,可迭代对象不同,in后面可以是任意对象。数组、字符串、集合和映射可迭代。object.keys()  object.values()  object.entries() 2,identi......
  • 11.1函数
    1、防止对象改变:Object.freeze2, ES6提供了其他写匿名函数的方式的语法糖。你可以使用箭头函数:constmyFunc=()=>{constmyVar="value";returnmyVar;}......
  • 22.11.1(学习tensorflow模型结构)
    1、.h5文件包括两种,没有有网络结构用model.load_weights本来训练的模型测试集和验证集效果都很好,但是预测的时候效果特别差,而且每次效果都不一样,我就觉得我训练的参数模......
  • 11Jmeter之优化jenkins上html报告格式
    问题:当在jenkins上查看HTML报告时,发现报告格式不美观!  解决一:临时解决方法1、进入Manage Jenkins->Scriptconsole,输入如下命令并进行执行。System.setPropert......
  • usb hid报告描述符
    USB/HID设备报告描述符详解(3) USB描述符即USB设备的信息,系统设备列举所要执行的工作之一,即是取得这些有关于设各的相关信息,之后设备才能被系统识别使用。在图的......
  • 拓端tecdat|R语言代写检验独立性:卡方检验(Chi-square test)和费舍尔精确检验分析案例
    统计测试最常见的领域之一是测试列联表中的独立性。在这篇文章中,我将展示如何计算列联表,我将在列联表中引入两个流行的测试:卡方检验和Fisher精确检验。什么是列联表?列联表提......
  • 拓端tecdat|python代写辅导虎扑社区论坛数据爬虫分析报告
    以下是摘自虎扑的官方介绍:虎扑是为年轻男性服务的专业网站,涵盖篮球、足球、F1、NFL等赛事的原创新闻专栏视频报道,拥有大型的生活/影视/电竞/汽车/数码网上交流社区,聊体育谈......
  • Java实验报告——教务系统(继承)
    一、实验目的使学生进一步了解Java面向对象中继承、封装、抽象、重载的运用。二、实验内容1、设计教师、学生、课程这三个教务系统中的对象类,包括这些对象的属性和方法。实......
  • Java实验报告-计算器(AWT图形界面)
     一、实验目的掌握图形用户界面的设计与实现。二、实验内容使用图形界面制作一个计算器并实现相应功能。三、实验步骤publicclassfirstappextendsAppletimplementsAc......
  • Java实验报告--计时器(线程)
    一、实验目的了解Java线程的使用方法二、实验内容1、使用多线程制作一计时器,要求实现文本框输入一个时间(分),计时结束后提示。2、系统通过点击按钮可实现启动计时、暂停、结束......