首页 > 其他分享 >2023 USACO Dec G 组

2023 USACO Dec G 组

时间:2024-01-31 11:24:24浏览次数:33  
标签:qs const int ll USACO long 2023 using Dec

\(1:10\) AK。

T1

注意到路线是从小的到大的点,因此可以从后往前确定。具体地说,确定一个点 \(i\),从前往后枚举 \(j>i\),如果现在到 \(j\) 的路线个数不符合奇偶性,就连一条边。

很容易证明是正确的。\(\mathcal{O}(N^3)\)。

Code
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 755;

int n;
char c[N][N];

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin>>n;
	for (int i=1; i<n; i++){
		for (int j=i+1; j<=n; j++){
			cin>>c[i][j];
		}
	}
	int ans=0;
	for (int i=n-1; i>=1; i--){
		vector<int> cnt(n+1,0);
		for (int j=i+1; j<=n; j++){
			if ((cnt[j]+(c[i][j]-'0'))&1){
				ans++;
				for (int k=j+1; k<=n; k++){
					cnt[k]+=c[j][k]-'0';
				}
			}
		}
	}
	cout<<ans<<endl; 
	return 0;
}

T2

首先,最长的路径长度非常好求(直接 topo sort)。要确保字典序最小,就要确定

  • 第一个边的权值是可能中的最小的。

  • 满足第一个条件后,所有路径当中去掉第一个边,字典序最小的。

发现解决最长路径为 \(d\) 的问题,转化成了如果能求出为 \(d-1\) 的所有点的最小字典序的 rank,就可以了。其次发现,topo sort 的时候一定是 \(d-1\) 在 \(d\) 前面。

因此就做完了。具体看代码。\(\mathcal{O}(N\log N)\)。

Code
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 4e5+5;
const int inf = 2e9;

int n,m,dis[N],in[N],rnk[N];
ll sum[N];
vector<pair<int,int> > g[N],rg[N]; 
pair<ll,ll> ans[N];

struct node {
	int vl,rk,id;
	bool operator < (const node &b) const {
		return vl!=b.vl?vl<b.vl:rk<b.rk;
	}
};

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin>>n>>m;
	for (int i=1; i<=m; i++){
		int a,b,l;
		cin>>a>>b>>l;
		in[a]++;
		rg[a].push_back({b,l});
		g[b].push_back({a,l});
	}
	memset(dis,-1,sizeof dis);
	int cur=0;
	queue<int> q;
	vector<node> v;
	for (int i=1; i<=n; i++){
		if (!in[i]){
			dis[i]=0;
			q.push(i);
		}
	}
	while (!q.empty()){
		int x=q.front();
		q.pop();
		if (cur!=dis[x]){
			sort(v.begin(),v.end());
			for (int i=0; i<v.size(); i++){
				rnk[v[i].id]=i;
			}
			v.clear();
			cur=dis[x];
		}
		node it={inf,inf,x};
		ll mx=0,psum=0;
		for (auto p : rg[x]){
			int y=p.first,l=p.second;
			node itt={l,rnk[y],x};
			if (itt<it&&mx==dis[y]+1 || mx<dis[y]+1){
				psum=sum[y]+l;
				mx=dis[y]+1;
				it=itt;
			}
		}
		ans[x]={mx,psum};
		sum[x]=psum;
		v.push_back(it);
		for (auto p : g[x]){
			int y=p.first,l=p.second;
			in[y]--;
			if (!in[y]){
				dis[y]=dis[x]+1;
				q.push(y);
			}
		}
	}
	for (int i=1; i<=n; i++){
		cout<<ans[i].first<<" "<<ans[i].second<<"\n";
	}
	return 0;
}

听说有 hash 的做法,但是不会。

T3

先给出一个离线的 \(\mathcal{O}(N\log N)\) 的做法。

离线下来,按照 \(\frac{a}{b}\) 从大到小排序。很容易得知,出发的位置是按照排序越来越大的。

根据人类智慧,是单谷函数,因此可以直接维护一个东西从左往右扫。

Code
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 1e6+6;

struct qy {
	ll a,b;
	int id;
	bool operator < (const qy &x) const {
		// a/b>x.a/x.b
		return a*x.b>x.a*b;
	}
} qs[N];

ll n,q,x[N],vis[N];
ll lf[N],ri[N],ans[N];

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin>>n;
	for (int i=1; i<=n; i++){
		cin>>x[i];
		vis[x[i]]++;
	}
	ll cnt=0;
	for (int i=0; i<N; i++){
		lf[i]=(i==0?0:lf[i-1])+cnt;
		cnt+=vis[i];
	}
	cnt=0;
	for (int i=N-2; i>=0; i--){
		ri[i]=ri[i+1]+cnt;
		cnt+=vis[i];
	}
	cin>>q;
	for (int i=1; i<=q; i++){
		cin>>qs[i].a>>qs[i].b;
		qs[i].id=i;
	}
	sort(qs+1,qs+1+q);
	ll cur=0;
	for (int i=1; i<=q; i++){
		ll a=qs[i].a,b=qs[i].b;
		#define cal(x) (a*lf[x]+b*ri[x])
		while (cal(cur)>cal(cur+1)){
			cur++;
		}
		ans[qs[i].id]=cal(cur);
	}
	for (int i=1; i<=q; i++){
		cout<<ans[i]<<"\n";
	}
	return 0;
}

因为单谷,所以在线做法就是三分。

听说有都少掉一个 \(\log\) 的,很想学。

标签:qs,const,int,ll,USACO,long,2023,using,Dec
From: https://www.cnblogs.com/SFlyer/p/17909166.html

相关文章

  • 阿里云参编业内首个代码大模型标准,通义灵码获 2023 AI4SE “银弹” 案例
    日前,中国人工智能产业发展联盟智能化软件工程工作组(AIforSoftwareEngineering,下文简称AI4SE)在京召开首届“AI4SE创新巡航”活动。阿里云作为AI4SE首批成员单位,与中国信息通信研究院等组织联合发起的《智能化软件工程技术和应用要求第一部分:代码大模型》(标准编号AIIA/PG0110......
  • 白鲸开源荣膺2023年度大数据产业最具投资价值企业奖项
    北京时间2024年2月20日,中国领先的开源技术公司,白鲸开源科技有限公司(以下简称"白鲸开源")荣幸宣布,该公司获得了第六届"年度金猿季大型主题策划活动"颁发的"2023大数据产业年度最具投资价值"奖项。这一殊荣是对白鲸开源在大数据领域取得的卓越成就和突出贡献的认可。金猿季推动......
  • 白鲸开源荣膺2023年度大数据产业最具投资价值企业奖项
    北京时间2024年2月20日,中国领先的开源技术公司,白鲸开源科技有限公司(以下简称"白鲸开源")荣幸宣布,该公司获得了第六届"年度金猿季大型主题策划活动"颁发的"2023大数据产业年度最具投资价值"奖项。这一殊荣是对白鲸开源在大数据领域取得的卓越成就和突出贡献的认可。金猿季推动......
  • 2023年度总结:我们都在用力的活着,拼尽了全力,却换回了伤痕累累!!!
    阅前必读:2023你还记得让你听过最扎心的话吗?你印象里记得你做的哪些不如意痛心的事吗?当你的付出得不到回报的时候。你有过绝望吗?闭上眼睛,想起过往时候,你流泪了吗?其实我并不害怕黑夜,我只是怕了孤单。走在那条回忆的路上,想我了血肉模糊的风景。承受过了背叛。其实并不是放不下。......
  • P1699 [USACO19OPEN] Bucket Brigade B
    题目大意给一个\(10×10\)字符串矩阵,求从\(L\)开始(不经过\(R\))到\(B\)的短路径。思路这道题因为是求最短,所以用\(DFS\)比较麻烦,于是我用的是\(BFS\)做。遇到障碍则跳过,到终点直接退出就行了。code#include<iostream>usingnamespacestd;structnode{intx,y......
  • [职场] 高温补贴发放标准2023年
    目前正处于夏天最热的三伏天阶段,高温下还是有部分劳动者顶着烈日辛苦劳作,对于在高温环境下工作的,是有高温补贴的,那么高温补贴的标准是什么样的,这个根据每个地区的规定是不一样的,下面会详细的整理每个地区的高温补贴标准,仅供参考!首先我们来看下国家对于高温补贴的规定文件,2012年6月2......
  • thuwc2023:梦想
    可能会写成流水账。我怎么已经高一了啊。怎么只有一年了啊。DAY-1考完了期末。希望物理能及格。出数学考场后知道自己填空压轴题没有注意到题面的\(-1\),当场愣住了,过了一会泪水忍不住往外流,并对着朋友生气了。唉,上次哭大概还在GDKOI。上次在学校生气已经想不起来是什么时......
  • 2023最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包
     引言在移动应用程序的开发中,了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法,可以让我们分析应用程序的网络请求和响应,了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具,可以帮助我们在Android和iOS平台上进行数据抓包。本篇博客将介绍如何使......
  • 美赛2023C练习-做题笔记
    代码:clc;TC=ProblemCDataWordle;%数据处理noC=TC(:,1);wordC=TC(:,2);dataC=TC(:,3:11);no=cell2mat(noC);data=cell2mat(dataC);L=size(wordC);L=L(1);word=[];%原表格有错误,根据网络数据进行修正wordC{36}="clean";wordC{247}="trash";%修正endfori=1:L......
  • 喜讯 | 嘉为蓝鲸亮相腾讯产业合作伙伴大会,荣获2023年度卓越合作伙伴
    1月18-19日,以“腾云逐浪,智在千里”为主题的2024年腾讯产业合作伙伴大会在三亚顺利召开,嘉为蓝鲸作为腾讯云核心合作伙伴受邀出席,与众多业界领袖、合作伙伴共同探讨产业生态发展的新趋势和机遇。此次大会,腾讯云表示坚持“长期主义”价值,以及“共赢未来”的理念,继续携手各生态合作伙伴......