首页 > 其他分享 >20240708比赛总结

20240708比赛总结

时间:2024-07-09 21:53:36浏览次数:9  
标签:总结 11 比赛 int ll 20240708 && printf tmp

T1 分糖果

https://gxyzoj.com/d/hzoj/p/3752

因为是三的倍数,所以按余数分为三种情况,分别是:3个0,3个1,3个2,012

显然,当012的组数超过2时,就会出现3组相同余数的,所以枚举012的组数即可

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[100005],cnt[3],b[3][100005],ans,p;
int main()
{
//	freopen("data19.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[i]%=3;
		b[a[i]][++cnt[a[i]]]=i;
	}
	ans=0;
	for(int i=0;i<3;i++)
	{
		int x=cnt[0]-i,y=cnt[1]-i,z=cnt[2]-i;
		int tmp=x/3+y/3+z/3+i;
		if(tmp>ans)
		{
			ans=tmp,p=i;
		}
	}
	printf("%d\n",ans);
	for(int i=0;i<3;i++)
	{
		for(int j=cnt[i]-2;j>p;j-=3)
		{
			printf("%d %d %d\n",b[i][j+2],b[i][j+1],b[i][j]);
		}
	}
	for(int i=1;i<=p;i++)
	{
		printf("%d %d %d\n",b[0][i],b[1][i],b[2][i]);
	}
	return 0;
}

T2 乒乓球

https://gxyzoj.com/d/hzoj/p/3753

如果两个人的比分相等且大于11,那与11:11等价

如果两个人的比分相差1且大于11,那与11:10等价

所以可以循环枚举每一个周期,记录在这个周期结束时的两人的比分,如果重复出现,则找到了大周期

在这个过程中,可以记录每个人赢的次数

此时,可以直接算出在n个球中属于大循环的所有球的胜负情况,剩余暴力枚举即可

代码:


#include<cstdio>
#include<string>
#include<iostream>
#define ll long long
using namespace std;
ll n,sa[15][15],sb[15][15],t[15][15],k;
string s;
ll a=0,b=0,cnta=0,cntb=0;
int main()
{
//	freopen("data06.in","r",stdin);
	scanf("%lld%lld",&n,&k);
	cin>>s;
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<12;j++)
		{
			sa[i][j]=sb[i][j]=t[i][j]=-1;
		}
	}
	sa[0][0]=sb[0][0]=t[0][0]=0;
	ll tmp=0;
	while(tmp*k<=n)
	{
		for(int i=1;i<=k;i++)
		{
			if(s[i-1]=='A') a++;
			else b++;
			if(a>=11&&a-b>=2)
			{
				cnta++,a=b=0;
			}
			if(b>=11&&b-a>=2)
			{
				cntb++,a=b=0;
			}
			if(a==b&&a>=11) a=b=11;
			if(a>=11&&a-b==1) a=11,b=10;
			if(b>=11&&b-a==1) a=10,b=11; 
		}
		tmp++;
		if(t[a][b]!=-1) break;
		t[a][b]=tmp,sa[a][b]=cnta,sb[a][b]=cntb;
	//	printf("%d %d %d %d\n",a,b,cnta,cntb);
	}
	ll tim=(tmp-t[a][b])*k,A=cnta-sa[a][b],B=cntb-sb[a][b];
	if(tim)
	{
		ll tmp1=(n-t[a][b]*k)/tim;
		A=A*tmp1+sa[a][b],B=B*tmp1+sb[a][b];
		tmp=n-t[a][b]*k-tim*tmp1;
		tmp=n-tmp;
	}
	else tmp=0;
	//	printf("%lld ",tmp);
	for(ll i=tmp;i<n;i++)
	{
		int p=i%k;
		if(s[p]=='A') a++;
		else b++;
		if(a>=11&&a-b>=2)
		{
			A++,a=b=0;
		}
		if(b>=11&&b-a>=2)
		{
			B++,a=b=0;
		}
		if(a==b&&a>11) a=b=11;
	}
	printf("%lld:%lld",A,B);
	return 0;
}

T3 与或

https://gxyzoj.com/d/hzoj/p/3754

显然,将所有的&放在最前面值最优的,但是要求字典序最小,所以考虑先算出理论最大值,然后进行枚举

假如当前放|不会影响结果,就放,但是如何check

显然,直接枚举会T,考虑前缀和,通过记录每一位上1的个数,从而得到最终结果

代码:

#include<cstdio>
#define ll long long
using namespace std;
int n,k;
ll sum[200001][61],cnt[65],a[200005];
ll check(int st,ll now,int k1)
{
	if(st<=n-k1)
	{
		for(int i=0;i<60;i++) cnt[i]=0;
		for(int i=0;i<60;i++) cnt[i]=sum[n-k1][i]-sum[st-1][i];
		for(int i=0;i<60;i++)
		{
			if(cnt[i]!=n-k1-st+1&&((now>>i)&1))
			{
				now^=(1ll<<i);
			}
		}
	}
	if(n-k1+1<=n)
	{
		for(int i=0;i<60;i++) cnt[i]=0;
		for(int i=0;i<60;i++) cnt[i]=sum[n][i]-sum[n-k1][i];
		for(int i=0;i<60;i++)
		{
			if(cnt[i])
			{
				now|=(1ll<<i);
			}
		}
	}
	return now;
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		for(int j=0;j<60;j++)
		{
			sum[i][j]=sum[i-1][j];
			if((a[i]>>j)&1) sum[i][j]++;
		}
	}
	ll ans=check(2,a[1],k);
	printf("%lld\n",ans);
	ll nowk=k,tmp=a[1];
	for(int i=2;i<=n;i++)
	{
	//	printf("%d\n",check(i+1,a[i]|tmp,nowk-1));
		if(nowk>0&&check(i+1,a[i]|tmp,nowk-1)==ans)
		{
			printf("|");
			tmp=(a[i]|tmp);
			nowk--;
		}
		else
		{
			printf("&");
			tmp=(a[i]&tmp);
		}
	}
	return 0;
}

标签:总结,11,比赛,int,ll,20240708,&&,printf,tmp
From: https://www.cnblogs.com/wangsiqi2010916/p/18292797

相关文章

  • 比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容
    比赛获奖的武林秘籍:05电子计算机类比赛国奖队伍技术如何分工和学习内容摘要本文主要介绍了在电子计算机类比赛中技术层面上的团队分工和需要学习的内容,分为了嵌入式硬件、嵌入式软件、视觉图像处理、机械、上位机软件开发和数据分析等六个方向,并结合自身经历给出相关建议。正......
  • 助教工作总结
    一、助教工作的具体职责和任务(包括:你和老师是如何配合的、你和课程其他助教是如何配合的(如果有的话))协助老师发布课程资料,布置作业任务,协助老师检查同学的作业,分配其他同学的实验课程,以及平时分的登记等等与其他助教进行作业答案发布前的相互纠错,以及不懂的地方相互探讨......
  • 7.9日工作总结
    今天继续研究BOOTLOAD内容,前两天已经把单区BOOTLOAD研究完了,今天开始研究双区下载,双区优点在于下载程序时不怕因为断电下载失败而导致程序死机,可以继续运行上一次的APP程序,但是会消耗更多的FLASH空间,正常双区构想是将FLASH空间分为三部分,依次为BOOT、APP1、APP2,下载时先把程序下载......
  • 暑假读论文总结
    7.8SAM-G待填7.9MAE(MaskedAutoencodersAreScalableVisionLearners)来源:CVPR2022在视觉领域应用autoencoder的比较早的工作了,是自监督学习。主要内容是在原图中选择若干个patch进行遮挡(patch通常选的很多,~75%),通过encoder-decoder进行复原。encoder结构较......
  • 20240709比赛总结
    T1超市抢购https://gxyzoj.com/d/hzoj/p/3765仔细读懂数据生成器,就能看出来,实际上物品肯定是够用的因为只能从右向左搬运物品,所以我们只需要对于每一个i,i+1的间隔,考虑有多少个物资需要从右边搬到左边去,把这个贡献累加即可代码:#include<cstdio>#include<algorithm>#define......
  • C++ pdf库总结
     mupdf#include"widget.h"#include"ui_widget.h"#include<QMessageBox>#include<QDebug>#include<QImage>#include<QPixmap>#include<QLabel>#include"mupdf/fitz.h"#include"mupdf/pd......
  • 背包题型总结
    概述大致分为以下几类:01背包完全背包混合背包二维背包分组背包以及一个变式:跳楼梯模型,本质是转移顺序的改变。01背包特点:无序加入,每个物品加一次。完全背包特点:无序加入,每个物品无限加。变式:跳楼梯模型:问跳完一段楼梯有多少种不同的方案数。这两者的区别就在于:......
  • Java基础知识总结
    一、什么是JavaJava是一种高级编程语言,由SunMicrosystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运行,只需编译一次,就可以在任......
  • Java知识体系总结
    IO流待整理:File、递归字节流、字节缓冲流编码表、编码方式、转换流、序列化、序列化流、打印流、commons-io网络编程网络概述、网络模型Socket原理机制资源下载:python33UDPTCP/IP协议、OSI七层协议、HTTP、HTTP2.0、HTTPS网络安全​XSS、CSRF、SQL注入、Hash......
  • nuxtjs 2.x.x坑点总结
    1、缩放适配参考:https://blog.csdn.net/weixin_44599931/article/details/136539941坑点:不要用postcss-px2rem,会和nuxt引入公共css冲突,改用postcss-pxtorem可解决2、axios使用坑点:不要配置axios的headers,会导致源代码中seo失效,以及刷新页面后axios请求直接失效3、多环境变......