篮球杯2021年省赛

1.个人反思

”闲来无事”,摆烂中发现6天后篮球杯开始了,随便写点以表安慰

(悲

A:卡片

B:直线

这种题不要试图找规律(因为我找了一会发现不如暴力)
数据范围很小,set去重就OK了

void solve()
{
	for(int xi=0;xi<20;xi++){
		for(int yi=0;yi<21;yi++){
			for(int xj=0;xj<20;xj++){
				for(int yj=0;yj<21;yj++){
					if(xi==xj && yi==yj) continue;
					int a=xi-xj,b=yj-yi,c=-xi*yj+xj*yi;
					int g=gcd(gcd(a,b),c);
					a/=g;b/=g;c/=g;
					s.insert(point(a,b,c));
				}
			}
		}
	}
	printf("%d",s.size());
} 

C:货物摆放

一眼质数分解
我想了一个完整的解法,就是分解出来的式子是
∏ i = 0 j p i a i \prod_{i=0}^{j} p_i^{a_i} i=0jpiai
然后考虑前两个,取x个,就是有 C a i x C_{a^i}^{x} Caix种,剩下来的就是第三个人的,然后两个人分x个,有 ∑ x i = 0 C i x \sum_{x}^{i=0} C_{i}^{x} xi=0Cix 种取法即 2 x 2^x 2x个,然后依次分下来,再相乘即使结果:
∑ j i = 0 C a i x ∗ 2 x \sum_{j}^{i=0}C_{a^i}^{x} *2^x ji=0Caix2x
(不确定对不对
但是写了一半突发奇想打印一下固定数的分解结果,好家伙,全是1或3就几个数,手算更快好吧

分解出来的结果是这个
在这里插入图片描述
3 5 ∗ 10 3^5 * 10 3510

D: 路径

最短路+LCM,很简单的
n 2 n^2 n2也就1e6

E: 回路计数

这题都忘光了,路径状压dp

ll f[1<<21][21];
void solve()
{
	ms(f,0);
	f[1][0]=1;
	for(int i=1;i< 1<<21;i++){
		for(int j=0;j<21;j++){
			if( (i>>j)&1){
				for(int k=0;k<21;k++){
					if(((i>>k)&1) && __gcd(j+1,k+1)==1 ){
						f[i][j]+=f[i^(1<<j)][k];
					}
				}
			}
		}
	}
	ll ans=0;
	for(int i=0;i<21;i++) ans+=f[(1<<21)-1][i];
	printf("%lld",ans); 
} 

F: 砝码称重

太典啦,背包dp,可以看做01dp,也能看成多重背包
dp[i][j] 第i个放不放,j是当前重量
注意一下 j+w[i]能超过1e5,记得数组开大点

其实也能多重背包,从sum反向枚举,算是否减掉

	scanf("%d",&n);
	ll sum=0;
	for(int i=1;i<=n;i++){
		scanf("%d",&w[i]);
		sum+=w[i];
	}
	ms(dp,0);
	for(int i=0;i<n;i++) dp[i][0]=true;
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=sum;j++){
			if( (dp[i-1][j] || dp[i-1][abs(j-w[i])] || dp[i-1][j+w[i]] ) && !dp[i][j] ){
				dp[i][j]=true;
				//ans++;
			}
		}
	}
	for(int i=1;i<=sum;i++){
		if(dp[n][i]) ans++;
	}
	printf("%d",ans); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值