首页 > 其他分享 >ROBCOM 2022 代码实录

ROBCOM 2022 代码实录

时间:2022-08-15 22:14:47浏览次数:57  
标签:int ll 实录 pos MAXN 2022 sum ROBCOM define

太久没有写博客了水一篇,仅记录一下暑期裸考参加的两场 2022 RoboCom ,半年来都在忙着读联考和考研,题解没有时间写了 QAQ,期待回归。

省赛

RC-u1

#include <bits/stdc++.h>
using namespace std;
ll n,m,c=0,ans=0;
ll main() {
	cin>>n>>m;
	for (ll i=1;i<=n;i++) {
		ll p; cin>>p; 
		if (c+p>m) ans++,c=min(p,m);
		else c+=p;
	//printf("now = %d\n",c);
	}
	cout<<ans;
	return 0;
} 

RC-u2

#include <bits/stdc++.h>
#define MAXN 1007
#define INF 0x3f3f3f3f
using namespace std;
ll n,m,gap[MAXN],last[MAXN];
ll main() {
	for (ll i=0;i<1007;i++) last[i]=-INF;
	cin>>n>>m;
	for (ll i=1;i<=n;i++) {
		cin>>gap[i];	
	}
	for (ll i=1;i<=m;i++) {
		ll t,k; cin>>t>>k;
		for (ll j=1;j<=k;j++) {
			ll p; cin>>p;
			if (t-last[p]<gap[p])
				printf("Don't take %d at %d!\n",p,t);
			else last[p]=t;
		}
	}
	return 0;
}

RC-u3

#include <bits/stdc++.h>
#define MAXN 100007
#define ll long long
using namespace std;
string in;
ll maxn,minn,pos,len;
ll n1,n2,sig,sum[MAXN];
int main() {
	cin>>in; len=(ll)in.size();
	if (in[0]=='-') pos++,sig=-1; else sig=1;
	while (pos<len) {
		n1=n2=0;
		while (isdigit(in[pos])) n1=n1*10+in[pos]-'0',pos++;
		if (in[pos]!='d') maxn+=sig*n1,minn+=sig*n1;
		else {
			pos++,n1=n1?n1:1;
			while (isdigit(in[pos]) && pos<len) n2=n2*10+in[pos]-'0',pos++;
			if (sig==1) maxn+=n1*n2,minn+=n1;
			else maxn+=sig*n1,minn+=sig*n1*n2; 
			sum[n2]+=n1;
		}
		sig=(in[pos]=='+')?1:-1,pos++;
	}
	for (ll i=1;i<MAXN;i++) 
		if (sum[i]) printf("%lld %lld\n",i,sum[i]);
	printf("%lld %lld",minn,maxn);
	return 0;
}

RC-u4 攻略分队

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
struct group { int num,fl; bool a,b,c,dis; }g[7];
// a: MT b: worker c: leader 
int sig,value=-INF;
vector<int> ans[2];
void dfs(int u) {
	if (u>6) { // check answer
		int mt[2]={0,0},worker[2]={0,0},leader[2]={0,0},val=0,sum[2]={0,0};
		for (int i=1;i<=6;i++) {
			if (g[i].dis) continue;
			sum[g[i].fl]+=g[i].num;
			mt[g[i].fl]+=g[i].a,worker[g[i].fl]+=g[i].b,leader[g[i].fl]+=g[i].c;
		}
		if (mt[0]>0 && mt[1]>0 && leader[0]>0 && leader[1]>0) 
			val=100000-abs(sum[0]-sum[1])*10-(sum[1]-sum[0]);
		else if (leader[0]>0 && leader[1]>0) val=1000-abs(sum[0]-sum[1])*10-(sum[1]-sum[0]);
		else val=-abs(sum[0]-sum[1])*10-(sum[1]-sum[0]);
		if (val>value) {
			value=val; ans[0].clear(); ans[1].clear();
			for (int i=1;i<=6;i++) {
				if (g[i].dis) continue;
				ans[g[i].fl].push_back(i);
			}
		}
		return;
	}
	g[u].fl=0,dfs(u+1); g[u].fl=1,dfs(u+1);
}
int main() {
	for (int i=1;i<=6;i++) {
		cin>>g[i].num;
		if (g[i].num==0) g[i].dis=true;
	}
	for (int i=1;i<=6;i++) {
		string in; cin>>in; sig+=in[0]-48;
		g[i].a=(in[0]=='1')?true:false;
		g[i].b=(in[1]=='1')?true:false;
		g[i].c=(in[2]=='1')?true:false;
	}
	if (sig<2) { puts("GG"); return 0; }
	dfs(1);
	for (int i=0;i<(int)ans[0].size();i++) {
		if (i!=(int)ans[0].size()-1) printf("%d ",ans[0][i]);
		else printf("%d",ans[0][i]);
	}
	printf("\n");
	for (int i=0;i<(int)ans[1].size();i++) {
		if (i!=(int)ans[1].size()-1) printf("%d ",ans[1][i]);
		else printf("%d ",ans[1][i]);
	} 
	return 0;
}

RC-u5 树与二分图

#include <bits/stdc++.h>
#define MAXN 1000007
#define ll long long
using namespace std;
ll n,maxd,ans,pre1[MAXN],pre2[MAXN];
ll son[MAXN],dep[MAXN],sum[MAXN];
vector<int> G[MAXN];
void dfs(ll u) {
	for (ll i=0;i<(ll)G[u].size();i++)
		if (!dep[G[u][i]]) {
			dep[G[u][i]]=dep[u]+1,sum[dep[G[u][i]]]++;
			maxd=max(maxd,dep[G[u][i]]),son[u]++,dfs(G[u][i]);
		}
}
int main() {
	cin>>n;
	for (ll i=1;i<n;i++) {
		ll u,v; cin>>u>>v;
		G[u].push_back(v),G[v].push_back(u); 
	}
	dep[1]=sum[1]=1,dfs(1);
	for (int i=1;i<=maxd;i++) {
		if (i&1) pre1[i]=pre1[i-1]+sum[i],pre2[i]=pre2[i-1];
		else pre1[i]=pre1[i-1],pre2[i]=pre2[i-1]+sum[i];			
	}
	for (ll i=1;i<=maxd;i++) {
		if (i&1) ans+=(sum[i]*(pre2[maxd]-pre2[i]));
		else ans+=(sum[i]*(pre1[maxd]-pre1[i]));
	}
	//printf("ans = %lld\n",ans);
	for (int i=1;i<=n;i++) ans-=son[i];
	printf("%lld",ans);
	return 0;
}

国赛

RC-u1

#include <bits/stdc++.h>
#define MAXN 10007
#define INF 0x3f3f3f3f
using namespace std;
int n,sred=INF,tred=0,vis=0;
int main() {
	scanf("%d",&n);
	for (int i=1;i<=n;i++) {
		int now;
		scanf("%d",&now); 
		if (now>=sred && now<tred && !vis) vis++,tred+=15;
		else if (now>=tred) {
			if(i!=1) printf("%d %d\n",sred,tred-1);
			vis=0,sred=now+15,tred=now+45;
		}
	}
	printf("%d %d",sred,tred-1);
	return 0;
}

RC-u2

#include <bits/stdc++.h>
using namespace std;
struct Node {
	int a,b,c,d;
	bool operator < (const Node &T) const {
		if (a!=T.a) return a<T.a;
		if (b!=T.b) return b<T.b;
		if (c!=T.c) return c<T.c;
		else return d<T.d;
	}
};
vector<Node> ans;
int pos[3][5],step[5],row,col,d1,d2;
int px[5],py[5],ux[5],uy[5];

inline bool check(int x,int y,int v) {
	if (x<1 || x>5 || y<1 || y>5) return false;
	if (y==pos[v][1] || y==pos[v][2] || x==pos[v][3] || x==pos[v][4])
		return false;
	return true;
}
int main() {
	scanf("%d%d%d%d",&pos[1][1],&pos[1][2],&pos[1][3],&pos[1][4]);
	for (int i=1;i<=4;i++) scanf("%d",&step[i]);
	pos[1][3]-=step[3],pos[1][4]+=step[4];
	pos[2][1]=pos[1][1]+step[1],pos[2][2]=pos[1][2]-step[2]; 
	pos[2][3]=pos[1][3],pos[2][4]=pos[1][4];
	scanf("%d%d%d%d",&row,&col,&d1,&d2);
	for (int i=0;i<d2;i++) {
		px[1]=row-d2+i,py[1]=col+i;	
		px[2]=row+i,py[2]=col+d2-i; 
		px[3]=row+d2-i,py[3]=col-i;
		px[4]=row-i,py[4]=col-d2+i;
		for (int j=1;j<=4;j++) {
			if (!check(px[j],py[j],2)) continue;
			for (int ii=0;ii<d1;ii++) {
				ux[1]=px[j]-d1+ii,uy[1]=py[j]+ii;	
				ux[2]=px[j]+ii,uy[2]=py[j]+d1-ii; 
				ux[3]=px[j]+d1-ii,uy[3]=py[j]-ii;
				ux[4]=px[j]-ii,uy[4]=py[j]-d1+ii;
				for (int jj=1;jj<=4;jj++) {
					if (!check(ux[jj],uy[jj],1)) continue;
					ans.push_back(Node{ux[jj],uy[jj],px[j],py[j]});
				}
			}
		}
	}
	sort(ans.begin(),ans.end());
	for (int i=0;i<(int)ans.size();i++) 
		printf("%d %d %d %d\n",ans[i].a,ans[i].b,ans[i].c,ans[i].d);
	return 0;
} 

RC-u3

#include <bits/stdc++.h>
#define MAXN 1000007
#define ll long long
using namespace std;
ll n,m,k,p,s,t,v[MAXN],dp[MAXN],cnt[MAXN];
vector<ll> G[MAXN];
queue<ll> Q; 
using namespace std;
int main() {
	memset(cnt,0x3f,sizeof(dp));
	scanf("%lld%lld%lld%lld",&n,&m,&k,&p);	
	for (ll i=1;i<=n;i++) scanf("%lld",&v[i]);
	for (ll i=1;i<=m;i++) {
		ll u,v; scanf("%lld%lld",&u,&v);
		G[u].push_back(v),G[v].push_back(u);
	}
	scanf("%lld%lld",&s,&t);
	Q.push(s),cnt[s]=1; 
	if (p==1) dp[s]=v[s];
	while (!Q.empty()) {
		ll now=Q.front(); Q.pop();
		//printf("cnt[%lld] = %lld dp[%lld] = %lld\n",now,cnt[now],now,dp[now]);
		for (ll i=0;i<(ll)G[now].size();i++) {
			ll vt=G[now][i];
			if (cnt[vt]<cnt[now]+1) continue;
			else if (cnt[vt]==cnt[now]+1) {
				if (cnt[vt]%k==0 && k==p) dp[vt]=max(dp[vt],dp[now]+v[vt]);
				else if (cnt[vt]%k) dp[vt]=max(dp[vt],dp[now]+(cnt[vt]%k%p?0:v[vt]));
				else dp[vt]=max(dp[vt],dp[now]);
			}
			else {
				cnt[vt]=cnt[now]+1;
				if (cnt[vt]%k==0 && k==p) dp[vt]=dp[now]+v[vt];
				else if (cnt[vt]%k) dp[vt]=dp[now]+(cnt[vt]%k%p?0:v[vt]);
				else dp[vt]=dp[now];
				Q.push(vt);
			}
		}
	}
	printf("%lld",dp[t]);
	return 0;
}

国赛的时候中午睡傻了,比赛的时候不紧不慢的,贼佛

最后全国排名 392,获二等奖一枚

感谢老师,监督半年没写代码的我参加比赛

标签:int,ll,实录,pos,MAXN,2022,sum,ROBCOM,define
From: https://www.cnblogs.com/zhwer/p/16589821.html

相关文章

  • "蔚来杯"2022牛客暑期多校训练营9 G Magic Spells
    原题链接一开始manacher+单哈希wa,样例通过率97%,应该是卡了一手int_64自然溢出换成manacher+双哈希过了#include<bits/stdc++.h>usingnamespacestd;#definefr......
  • 2022-08-15 第八组 卢睿 学习心得
    目录Mysql数据库数据库Mysql基本操作表SQL语言SQL分类DCL(数据库控制语言)创建用户给用户授权撤销授权查看权限删除用户DDL(数据定义语言)创建表数据类型整型浮点型字符串类型......
  • 2022-08-15 第五组 赖哲栋 学习笔记
    Mysql数据库数据库【暗战数据结构来组织、存储和管理数据的仓库】。是一个长期存储在计算机内的,有组织的、可共享的、统一管理的大量数据的集合程序员的工作就是对数据......
  • NOI2022 D 类打摆记
    Day-17~-15打了UNR,我是250,挂了一堆分,Cu滚粗了,rp++。Day-13HDU多校,只会签到和一大堆罚时,给队友拖后腿了/kkDay-11HDU多校,还是只会签到和一大堆罚时,给队友拖后......
  • 2022-08-15 第六小组 张宁杰 Mysql数据库(1)
    Mysql数据库数据库数据库【按照数据结构来组织、存储和管理数据的仓库】。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据对于公司......
  • 2022-8-15MySQL的学习
    MySQL数据库数据库数据库【按照数据结构来组织来存储和管理数据的仓库】。是一个长期存储在计算机内的有组织的可共享的,统一管理的大量数据的集合。数据对于公司来......
  • [游记]暑假集训3-2022.8.15
    Rank2,终于没有$\cdots\cdots$不,挂分少了A.数列显然一眼先扩欧发现如果$n$个数中有一个不能被$\gcd(a,b)$整除就无解那么对于每个$x_i$我们要解$ap+bq=x_i$中......
  • 2022-8-15 第一组 (≥▽≤) 学习笔记
    目录1.MySQL数据库1.1数据库1.2MySQL1.3基本操作1.4表2.SQL语言2.1SQL语句的分类2.1.1DCL(数据控制语言)给用户授权撤销授权查看指定用户授权删除用户2.1.2DDL(数据......
  • 【2022-08-15】mysql基础知识(二)
    mysql基础知识(二)字符编码与配置文件windows系统下查看mysql的版本信息:\s由于5.6版本编码不统一,会导致乱码的情况出现,所以统一修改编码格式为>>>:utf8my-defaul......
  • 2022杭电多校第八场1、7、5
    1001Theramore观察以下两种情况:以0为例,上图就是说,只要有两个连续的0,我们就可以一直把它们往前移动直到移动到首位。同理只要有两个连续的1我们就可以把它们移动到尾部......