Codeforces Round #497 (Div. 2) D. Pave the Parallelepiped

本文解析了CodeForces竞赛中的一道难题,利用容斥原理解决无序三元组的计数问题,通过代码示例详细展示了算法实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接

http://codeforces.com/contest/1008/problem/D

大意

给你(A,B,C)(A,B,C),求无序三元组(a,b,c)(a,b,c)使得a|A,b|B,c|Ca|A,b|B,c|C,一共TT组数据,T,A,B,C≤105

题解:

这个和容斥原理有关,代码很简单,就是想不到方法!!!

#include<cstdio>
#include<cstring>
#include<iostream>
#define N 100009
using namespace std;
typedef  long long ll;
int fac[N];
int s[10];
int gcd (int a,int b)
{
	if(b==0)
	return a;
	return gcd(b,a%b);
}
void fac_make()
{
	for(int i=1;i<=N;i++)	
	{
		for(int j=i;j<=N;j+=i)
		{
			fac[j]++;
		}
	}
} 
int ok(int a,int b,int c){
    if((a&1) && (b&2) && (c&4))
        return 1;
    if((a&1) && (c&2) && (b&4))
        return 1;
    if((b&1) && (a&2) && (c&4))
        return 1;
    if((b&1) && (c&2) && (a&4))
        return 1;
    if((c&1) && (a&2) && (b&4))
        return 1;
    if((c&1) && (b&2) && (a&4))
        return 1;
    return 0;
}

ll cn(int m,int n)
{
	ll s=1;
	for(int i=0;i<n;i++)
	{
		s*=(m-i);
		s/=(i+1);
	}
	return s;
}
int main()
{
	int t,a,b,c;
	//FILE *fp=fopen("t.txt","r");
	int p[15];
	memset(fac,0,sizeof(fac));
	scanf("%d",&t);
	fac_make();
	while(t--)
	{
	//	cout<<t<<"****"<<endl;
		scanf("%d%d%d",&a,&b,&c);
		//cout<<a<<" "<<b<<" "<<c<<endl;
		int ab=gcd(a,b);
		int bc=gcd(b,c);
		int ac=gcd(a,c);
		int abc=gcd(ab,c);
		s[1]=fac[a]-fac[ab]-fac[ac]+fac[abc];//001
		s[2]=fac[b]-fac[ab]-fac[bc]+fac[abc];//010
		s[4]=fac[c]-fac[bc]-fac[ac]+fac[abc];//100
		s[3]=fac[ab]-fac[abc];//011
		s[6]=fac[bc]-fac[abc];//110
		s[5]=fac[ac]-fac[abc];//101
		s[7]=fac[abc];
		/*for(int i=1;i<=7;i++) cout<<s[i]<<" ";
		cout<<endl;*/
		ll ans=0;
		for(int i=1;i<8;i++)
		{
			for(int j=i;j<8;j++)
			{
				for(int k=j;k<8;k++)
				{
					if(ok(i,j,k))
					{
						ll tp=1;
						memset(p,0,sizeof(p));
						p[i]++;p[j]++;p[k]++;
						//cout<<i<<" "<<j<<" "<<k<<endl;
						for(int g=1;g<8;g++)
						if(p[g]>0)
							{
							tp*=cn(s[g]+p[g]-1,p[g]);
							//cout<<tp<<endl;
							}
						if(tp>0)
						ans+=tp;
						//printf("ans=%lld\n",ans);						
					}
				}
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值