2021-01-25纪中模拟赛总结

T1 【NOIP2016提高组复赛】†组合数问题

题目传送门

想法

这道题没什么难度,首先手推一下C(0,0)到C(4,4),不难发现这是一个杨辉三角.

所以用一个矩阵暴枚就完了?!

事实证明,你想太多,n<=2000,m<=2000.你暴力枚举直接存,不炸掉才怪。

那怎么办呢?
首先观察题目,发现k是不变的,而我们又知道(a+b)%k=(a%k+b%k)%k.
那么我们在算杨辉三角时给每个数%k一下,这不就不会炸了?

这时候我们可以发现一个更神奇的东西:杨辉三角上(i,j)如果为0,那么不就代表着C(i,j)%k也为0吗。

这时候答案显而易见了,我们用二维前缀和来维护一下某个位置在它前面有多少个地方为0,最后输出相应位置的值就好了。

AC代码

#include<iostream>
#include<cstdio>
using namespace std;
long long map[3001][3001],ans[3001][3001],x[100001],y[100001],qzh[3001][3001];
int main()
{
	freopen("problem.in","r",stdin);
	freopen("problem.out","w",stdout);
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
	}
	for(int i=0;i<=3000;i++)
	{
		for(int j=0;j<=i;j++)
		{
			if(j==0)
			{
				map[i][j]=1;
			}
			else
			{
				map[i][j]=(map[i-1][j]+map[i-1][j-1])%k;
			}
		}
	}
	for(int i=1;i<=3000;i++)
	{
		for(int j=1;j<=i;j++)
		{
			qzh[i][j]=qzh[i-1][j]+qzh[i][j-1]-qzh[i-1][j-1];
			if(map[i][j]==0)
			{
				qzh[i][j]++;
			}
		}
		for(int j=i+1;j<=3000;j++)
		{
			qzh[i][j]=qzh[i][j-1];
		}
	}
	long long e;
	for(int i=1;i<=n;i++)
	{
		e=min(x[i],y[i]);
		printf("%d\n",qzh[x[i]][e]);
	}
}

T2 【NOIP2017提高组正式赛】奶酪

题目传送门

想法

我们知道,如果一个空洞可以走到上表面,那么可以走到这个空洞的洞也可以走到上表面,根据这一点,不难想到,我们可以先求出哪些空洞可以走到上表面,再求哪些空洞可以走到这些洞,这样子一层层向下找,给找到的点打上标记,最后看看和下表面直接接触的点有没有被打上标记的,如果有便输出“Yes”,不然就输出“No”。

AC代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double x[100001],y[100001],z[100001];
int map[1001][1001],len[2001],st[10001],en[10001],bz[2001];
double dist(int i,int j)
{
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])+(z[i]-z[j])*(z[i]-z[j]));
}
void dg(int x)
{
	bz[x]=1;
	for(int i=1;i<=len[x];i++)
	{
		if(bz[map[x][i]]!=1)
		{
			dg(map[x][i]);
		}
	}
}
int main()
{
	freopen("cheese.in","r",stdin);
	freopen("cheese.out","w",stdout);
	int t;
	cin>>t;
	int n,p,q,u;
	double h,r;
	for(int tem=1;tem<=t;tem++)
	{
		cin>>n>>h>>r;
		p=0;
		q=0;
		u=0;
		for(int i=1;i<=n;i++)
		{
			bz[i]=0;
			len[i]=0;
		}
		for(int i=1;i<=n;i++)
		{
			cin>>x[i]>>y[i]>>z[i];
			if(abs(z[i])<=r)
			{
				p++;
				st[p]=i;
			}
			if(abs(z[i]-h)<=r)
			{
				q++;
				en[q]=i;
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(dist(i,j)<=r*2)
				{
					if(i!=j)
					{
						len[i]++;
						map[i][len[i]]=j;
						len[j]++;
						map[j][len[j]]=i;
					}
				}
			}
		}
		for(int i=1;i<=q;i++)
		{
			dg(en[i]);
		}
		for(int i=1;i<=p;i++)
		{
			if(bz[st[i]]==1)
			{
				cout<<"Yes"<<endl;
				u=1;
				break;
			}
		}
		if(u==0)
		{
			cout<<"No"<<endl;
		}
	}
}

T3【NOIP2016提高组复赛】愤怒的小鸟

题目传送门

想法

解出相邻两猪的参数,再用状压DP来求覆盖所有猪最小要多少条曲线

AC代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
double x[101],y[101];
int f[1000001],g[101][101];
int main()
{
	freopen("angrybirds.in","r",stdin);
	freopen("angrybirds.out","w",stdout);
	int t;
	cin>>t;
	int n,tem;
	double p,q;
	while(t--)
	{
		cin>>n>>tem;
		for(int i=0;i<n;i++)
		{
			cin>>x[i]>>y[i];
		}
		memset(f,63,sizeof(f));
		memset(g,0,sizeof(g));
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(i!=j)
				{
					p=(y[i]/x[i]-y[j]/x[j])/(x[i]-x[j]); 
					q=(x[i]/x[j]*y[j]-x[j]/x[i]*y[i])/(x[i]-x[j]);
					if(p<=-1e-6)
					{
						for(int k=0;k<n;k++)
						{
							if(fabs(p*x[k]*x[k]+q*x[k]-y[k])<=1e-6)
							{
								g[i][j]|=1<<k;
							}
						}
					}
				}
			}
			g[i][i]|=1<<i;
		}
		f[0]=0;
		for(int i=0;i<(1<<n);i++)
		{
			for(int j=0;j<n;j++)
			{
				if(!((1<<j)&i))
				{
					for(int k=j;k<n;k++)
					{
						if(!((1<<k)&i))
						{
							f[i|g[j][k]]=min(f[i|g[j][k]],f[i]+1);
						}
					}
					break;
				}
			}
		}
		cout<<f[(1<<n)-1]<<endl;
	}
}

T4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值