首页 > 其他分享 >Solution Set - APIO2015

Solution Set - APIO2015

时间:2023-04-20 19:34:01浏览次数:49  
标签:Q1 Set int s1 Solution pop APIO2015 Q2 push

目录


A 巴厘岛的雕塑

\(n\) 个数分为若干组,组数不少于 \(a\) 且不多于 \(b\)。最小化各组和的 \(OR\) 值。

\(n \le 2000\),\(1=a \le b \le n\) 或 \(n \le 100\),\(1 \le a \le b\)。


key:贪心,DP

按位处理,从高到低依次尝试每一位是否能够是 \(0\)。\(DP\) 求出在满足高位的条件下的最少分组数和最多分组数即可。

但似乎这个做法是伪的,uoj上没有过。

重新考虑 \(DP\) 状态,考虑到某一位能否分若干组即可。不想写了。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
typedef long long ll;
int n,a,b,dp[N][2];ll s[N],res;
int main(){
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1,x;i<=n;i++){
		scanf("%d",&x);
		s[i]=s[i-1]+x;
	}
	res=(1ll<<45)-1;
	for(int d=44;d>=0;d--){
		ll chk=res-(1ll<<d);
		dp[0][0]=dp[0][1]=0;
		for(int i=1;i<=n;i++){
			dp[i][0]=1e9;dp[i][1]=-1e9;
			for(int j=0;j<i;j++)
				if((s[i]-s[j]|chk)==chk){
					dp[i][0]=min(dp[i][0],dp[j][0]+1);
					dp[i][1]=max(dp[i][1],dp[j][1]+1);
				}
		}
		if(dp[n][1]>=a&&dp[n][0]<=b)res=chk;
	}
	printf("%lld\n",res);
	return 0;
}

B 雅加达的摩天楼


key:最短路,建图技巧

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
const int N=3e4+5,M=1e7+5;
int n,m,r,s,t,dis[N],vis[N];
int head[N],nxt[M],ver[M],val[M],tot;
void add(int u,int v,int w){
	ver[++tot]=v;val[tot]=w;
	nxt[tot]=head[u];head[u]=tot;
}
map<pii,vi> MP;vi d[N];
priority_queue<pii> Q;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1,b,p;i<=m;i++){
		scanf("%d%d",&b,&p);
		if(i==1)s=b;if(i==2)t=b;
		d[b].push_back(p);
		MP[pii(b%p,p)].push_back(b);
	}
	for(auto f:MP){
		vi x=f.second;
		int b=f.first.first,p=f.first.second;
		sort(x.begin(),x.end());int len=x.size();
		for(int i=0;i<len;i++){
			int lst=b,nxt=(n-b)/p*p+b;
			if(i!=0)lst=x[i-1];
			if(i!=len-1)nxt=x[i+1];
			for(int j=lst;j<=nxt;j+=p)
				add(x[i],j,abs(x[i]-j)/p);
		}
	}
	memset(dis,0x3f,sizeof(dis));
	Q.push(make_pair(0,s));dis[s]=0;
	while(!Q.empty()){
		int u=Q.top().second,d=-Q.top().first;Q.pop();
		if(vis[u])continue;vis[u]=1;
		for(int i=head[u],v;i;i=nxt[i])
			if(dis[v=ver[i]]>d+val[i]){
				dis[v]=d+val[i];
				Q.push(make_pair(-dis[v],v));
			}
	}
	if(dis[t]>1e9)printf("-1\n");
	else printf("%d\n",dis[t]);
	return 0;
}

C 巴邻旁之桥


key:中位数

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,k;ll ans;char c,d;
namespace task1{
	int a[N*2],m=0;
	void solve(){
		for(int i=1,x,y;i<=n;i++){
			cin>>c>>x>>d>>y;
			if(c==d)ans+=abs(x-y);
			else a[++m]=x,a[++m]=y;
		}
		sort(a+1,a+m+1);
		for(int i=1;i<=m;i++)ans+=abs(a[i]-a[m/2]);
		printf("%lld\n",ans+m/2);
	}
}
namespace task2{
	struct P{int l,r;}a[N];
	int m=0;ll res=1e18,pre[N],suf[N];
	bool cmp(P a,P b){return a.l+a.r<b.l+b.r;}
	void solve(){
		memset(pre,0x3f,sizeof(pre));
		memset(suf,0x3f,sizeof(suf));
		for(int i=1,x,y;i<=n;i++){
			cin>>c>>x>>d>>y;
			if(x>y)swap(x,y);
			if(c==d)ans+=y-x;
			else a[++m].l=x,a[m].r=y;
		}
		if(!m){printf("%lld\n",ans);return;}
		sort(a+1,a+m+1,cmp);
		pre[0]=suf[m+1]=0;
		priority_queue<int> Q1,Q2;
		while(!Q1.empty())Q1.pop();while(!Q2.empty())Q2.pop();
		pre[1]=a[1].r-a[1].l;
		Q1.push(a[1].l);Q2.push(-a[1].r);
		ll s1=a[1].l,s2=a[1].r;
		for(int i=2,x,tmp;i<=m;i++){
			tmp=Q1.top();
			x=a[i].l;if(x<tmp)Q1.push(x),s1+=x;else Q2.push(-x),s2+=x;
			x=a[i].r;if(x<tmp)Q1.push(x),s1+=x;else Q2.push(-x),s2+=x;
			if(Q1.size()>i){x=Q1.top();Q1.pop();s1-=x;s2+=x;Q2.push(-x);}
			if(Q2.size()>i){x=-Q2.top();Q2.pop();s2-=x;s1+=x;Q1.push(x);}
			pre[i]=s2-s1;
		}
		while(!Q1.empty())Q1.pop();while(!Q2.empty())Q2.pop();
		suf[m]=a[m].r-a[m].l;
		Q1.push(a[m].l);Q2.push(-a[m].r);
		s1=a[m].l;s2=a[m].r;
		for(int i=m-1,x,tmp;i>=1;i--){
			tmp=Q1.top();
			x=a[i].l;if(x<tmp)Q1.push(x),s1+=x;else Q2.push(-x),s2+=x;
			x=a[i].r;if(x<tmp)Q1.push(x),s1+=x;else Q2.push(-x),s2+=x;
			if(Q1.size()>m-i+1){x=Q1.top();Q1.pop();s1-=x;s2+=x;Q2.push(-x);}
			if(Q2.size()>m-i+1){x=-Q2.top();Q2.pop();s2-=x;s1+=x;Q1.push(x);}
			suf[i]=s2-s1;
		}
		for(int i=0;i<=m;i++)res=min(res,pre[i]+suf[i+1]);
		printf("%lld\n",ans+m+res);
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin>>k>>n;
	if(k==1)task1::solve();
	else task2::solve();
	return 0;
}

标签:Q1,Set,int,s1,Solution,pop,APIO2015,Q2,push
From: https://www.cnblogs.com/by-chance/p/17338072.html

相关文章

  • GE RTT Desktop Test Set
    通用电气RTT桌面测试集是一个工具,帮助测试继电器,仪表和PLC的能力,提供单相电压和电流,驱动数字输入,并控制RTD。  海拔最大2000米控制权标称6va;最大14伏安规模长7.5英寸×宽5.75英寸×深3.25英寸干式数字输入接触电阻<10mΩ脉冲磁场抗扰度标准上午1000点......
  • LOJ #6564 - 最长公共子序列(bitset 求 LCS)
    怎么全天下就我没见过?被薄纱了/ll还是考虑从朴素的DP入手优化。不难发现对于固定的\(i\),相邻的\(dp_{i,j}\)的差要么是\(0\)要么是\(1\),也就是说从压位的考虑角度可能很有前途。因此我们转而维护\(dp_{i,j}\)的差分数组\(v_{i,j}=dp_{i,j}-dp_{i,j-1}\)。考虑新添加一......
  • 09-内置对象扩展:Set数据结构
    title:09-内置对象扩展:Set数据结构publish:trueSet数据结构Set数据结构的介绍ES6提供了新的数据结构Set。Set类似于数组,但成员的值都是唯一的,没有重复的值。Set的应用有很多。比如,在H5页面的搜索功能里,用户可能会多次搜索重复的关键字;但是在数据存储上,不需要存......
  • vscode 格式化统一配置 settings.json
    {"workbench.colorTheme":"DefaultDark+","eslint.autoFixOnSave":true,"editor.codeActionsOnSave":{"source.fixAll.eslint":true},"[javascript]":{ "......
  • JS中定时执行,setTimeout和setInterval的区别,以及l解除方法
    评:setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout运用在延迟一段时间,再进行某项操作。setTimeout("function",time)设置一个超时对象setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.set......
  • Dynamics CRM - 安装 SSRS CRM Reporting Extensions 时报错:Action Microsoft.Crm.Set
    一、问题场景:   在安装CRM2016的SSRSReportingExtensions时遇到以下报错:    二、解决方案:   a.根据提示,访问对应路径的文件夹:C:\ProgramFiles\MicrosoftSQLServer\MSRS13.MSSQLSERVER\ReportingServices,可以看到ReportManager文件夹并不存在; ......
  • Unknown character set: 'utf8mb4'
    评:Unknowncharacterset:'utf8mb4'从昨天晚上开始,困扰了我几个小时的问题,无论用c3p0还是用Spring的DriverManagerDataSource都无法连接我服务器上的远程数据库,一直报的错误就是:org.springframework.jdbc.CannotGetJdbcConnectionException:CouldnotgetJDBCConnection......
  • Build was configured to prefer settings repositories over project repositories b
    首先上链接:stackoverflow的正解下载了最新版的狐狸图标的AS,4.1.2版本,新建的项目默认使用的最新版本7.0.2的gradle, 在项目的build.gradle中添加项目编译需要的依赖,allprojects{repositories{google()jcenter()}} 然后,报错,编译不过。提示也说了,构建被配......
  • java学习日记20230415-LinkedHashSet源码
    LinkedHashSet全面说明:LinkedHashSet是HashSet子类;底层是一个LinkedHashMap,底层维护了一个数组和双向链表根据元素的hashCode值来决定元素的位置,同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的不允许添加重复元素维护了一个hash表和双向链表,每个节点有pre和......
  • 关于报错:Error adding module to project: setSdk: sdk '1.8' type 'JavaSDK' is not
    问题描述:Erroraddingmoduletoproject:setSdk:sdk'1.8'type'JavaSDK'isnotregisteredinProjectJdkTable(图片来自贴吧,看到有一个人问这个问题,然后自己碰到了但是忘了截图)说明当前项目在“ProjectJdkTable”里面是没有配置sdk1.8的。百度翻译过来就是:未在Project......