2004 ACM-ICPC世界总决赛试题分析4-8

本文深入探讨了信息技术领域的多个子领域,包括前端开发、后端开发、移动开发、游戏开发、大数据开发等,通过具体实例展示了各领域的核心技术和实践应用,旨在为读者提供全面的技术视野。

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

5

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,m,i,j,a,b,cases,no_quotes,st[101],ed[101];
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char c[147000];
int leap(int y)
{
	return y%400==0||y%4==0&&y%100;
}

void get_date(int day)
{
	int y,m;
	for(y=1700;day>365+leap(y);y++)
		day-=365+leap(y);
	for(m=1;day>days[m]+(m==2&&leap(y));m++)
		day-=days[m]+(m==2&&leap(y));
	printf("%d/%d/%d",m,day,y);
}

int f(int x)
{
	int i,tmp,sum;
	tmp=x/10000;
	sum=0;
	for(i=1700;i<tmp;i++)
	{
		sum+=365;
		if(leap(i))
			sum++;
	}
	tmp=x%10000/100;
	for(i=1;i<tmp;i++)
	{
		sum+=days[i];
		if(i==2&&leap(x/10000))
			sum++;
	}
	return sum+x%100;
}

void fill(int a,int b,int x)
{
	int fa,fb;
	fa=f(a);
	fb=f(b);
	memset(&c[fa],x,fb-fa+1);
}

int main()
{
	while(scanf("%d%d",&n,&m)&&n+m)
	{
		if(cases)
			printf("\n");
		memset(c,0,sizeof(c));
		for(i=0;i<n;i++)
			scanf("%d%d",&st[i],&ed[i]);
		for(i=0;i<m;i++)
		{
			scanf("%d%d",&a,&b);
			fill(a,b,2);
		}
		for(i=0;i<n;i++)
			fill(st[i],ed[i],1);
		printf("Case %d:\n",++cases);
		no_quotes=1;
		for(i=0;i<147000;i++)
			if(c[i]>1)
			{
				no_quotes=0;
				printf("    ");
				get_date(i);
				if(c[i+1]<2)
					printf("\n");
				else
				{
					printf(" to ");
					for(j=i;c[j]>1;j++);
					get_date(j-1);
					printf("\n");
					i=j;
				}
			}
			if(no_quotes)
				printf("    No additional quotes are required.\n");
	}
	return 0;
}

6

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct MAPS
{
	int n,m;
	char feature[110][110];
};
struct Merge
{
	int score,r,c;
};
char s[2000];
int cases,n,i,j,k,sum,max,x,y;
MAPS map[100];
Merge merge[100][100];
bool sign[100];
int calc(char a,char b)
{
	if(a=='-') return 0;
	if(b=='-') return 0;
	if(a==b) return 1;
	else return -10000;
}

int Max(int a,int b)
{
	if(a>b) return a;
	else return b;
}

int Min(int a,int b)
{
	if(a>b) return b;
	else return a;
}

Merge Try(int x,int y)
{
	int r,c,i,j,k,score,x1,y1,x2,y2;
	Merge tmp;
	tmp.score=0;
	for(r=-map[y].n+1;r<map[x].n;r++)
		for(c=-map[y].m+1;c<map[x].m;c++)
		{
			x1=Max(0,r);y1=Max(0,c);
			x2=Min(map[x].n,map[y].n+r);y2=Min(map[x].m,map[y].m+c);
			score=0;
			for(i=x1;i<x2;i++)
				for(j=y1;j<y2;j++)
					score+=calc(map[x].feature[i][j],map[y].feature[i-r][j-c]);
			if(score>tmp.score)
			{
				tmp.score=score;
				tmp.r=r;
				tmp.c=c;
			}
		}
	return tmp;
}

void add_map(int x,int y,int z)
{
	int i,j,k,Dx,Dy;
	Dx=Max(-merge[x][y].r,0);Dy=Max(-merge[x][y].c,0);
	map[z].n=Max(map[x].n,map[y].n+merge[x][y].r)+Dx;
	map[z].m=Max(map[x].m,map[y].m+merge[x][y].c)+Dy;
	for(i=0;i<map[z].n;i++)
		for(j=0;j<map[z].m;j++)
			map[z].feature[i][j]='-';
	for(i=0;i<map[x].n;i++)
		for(j=0;j<map[x].m;j++)
			map[z].feature[i+Dx][j+Dy]=map[x].feature[i][j];
	Dx+=merge[x][y].r;Dy+=merge[x][y].c;
	for(i=0;i<map[y].n;i++)
		for(j=0;j<map[y].m;j++)
			if(map[y].feature[i][j]!='-')
				map[z].feature[i+Dx][j+Dy]=map[y].feature[i][j];
}

int main()
{
	for(cases=1;;cases++)
	{
		scanf("%d",&n);
		if(n==0) break;
		for(i=1;i<=n;i++)
		{
			scanf("%d %d",&map[i].n,&map[i].m);
			for(j=0;j<map[i].n;j++)
			{
				scanf("%s",s);
				for(k=0;k<map[i].m;k++)
					map[i].feature[j][k]=s[k];
			}
		}
		for(i=1;i<=n;i++)
			for(j=i+1;j<=n;j++)
				merge[i][j]=Try(i,j);
		memset(sign,1,sizeof(sign));
		while(1)
		{
			max=0;
			for(i=1;i<=n;i++) if(sign[i])
				for(j=i+1;j<=n;j++) if(sign[j])
					if(merge[i][j].score>max)
					{
						max=merge[i][j].score;
						x=i;y=j;
					}
			if(max==0)
				break;

			sign[x]=sign[y]=0;
			n++;
			add_map(x,y,n);
			for(i=1;i<n;i++)
				if(sign[i])
					merge[i][n]=Try(i,n);
		}
		if(cases>1)
			printf("\n");
		printf("Case %d\n",cases);
		x=0;
		for(i=1;i<=n;i++)
			if(sign[i])
			{
				if(x)
					printf("\n");
				x++;
				printf("    MAP %d:\n",i);
				printf("    +");
				for(j=0;j<map[i].m;j++)
					printf("-");
				printf("+\n");
				for(j=0;j<map[i].n;j++)
				{
					printf("    |");
					for(k=0;k<map[i].m;k++)
						printf("%c",map[i].feature[j][k]);
					printf("|\n");
				}
				printf("    +");
				for(j=1;j<=map[i].m;j++)
					printf("-");
				printf("+\n");
			}
	}
	return 0;
}

7

#include<cstdio>
#include<cmath>
double t,x,y,ox[12],oy[12],r[12],px,py,dx,dy,dr,degree,ti,pi,dis,lx,ly,xa,ya,xb,yb;
int n,i,cases,c1,c2;

int check(double x,double y)
{
	int i;
	double dx,dy;
	for(i=0;i<n;i++)
	{
		dx=x-ox[i];
		dy=y-oy[i];
		dr=sqrt(dx*dx+dy*dy)-r[i];
		if(fabs(dr)>0.1)
			return 0;
	}
	return 1;
}

int main()
{
	pi=acos(-1.0);
	while(scanf("%d%lf%lf%lf",&n,&t,&x,&y)&&n)
	{
		for(i=0;i<n;i++)
		{
			scanf("%lf%lf%lf%lf",&px,&py,°ree,&ti);
			degree=(90-degree)/180*pi;
			dis=100*ti;
			ox[i]=px+dis*cos(degree);
			oy[i]=py+dis*sin(degree);
			r[i]=350*(t-ti);
		}
		printf("Trial %d: ",++cases);
		for(i=1;i<n;i++)
		{
			dx=ox[i]-ox[0];
			dy=oy[i]-oy[0];
			dr=r[i]-r[0];
			if(dx*dx+dy*dy+dr*dr>0.01)
				break;
		}
		if(i>=n)
		{
			puts("Inconclusive");
			continue;
		}
		dis=sqrt(dx*dx+dy*dy);
		if(dis<0.1)
		{
			puts("Inconsistent");
			continue;
		}
		lx=(dis*dis+r[0]*r[0]-r[i]*r[i])/dis/2;
		if(fabs(lx)>r[0]+0.1)
		{
			puts("Inconsistent");
			continue;
		}
		if(lx>r[0])
			lx=r[0];
		if(lx<-r[0])
			lx=-r[0];
		ly=sqrt(r[0]*r[0]-lx*lx);
		dx/=dis;
		dy/=dis;
		xa=ox[0]+dx*lx-dy*ly;
		ya=oy[0]+dy*lx+dx*ly;
		xb=ox[0]+dx*lx+dy*ly;
		yb=oy[0]+dy*lx-dx*ly;
		if(sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))<0.1)
		{
			xb=1e9;
			yb=1e9;
		}
		c1=check(xa,ya);
		c2=check(xb,yb);
		if(c1+c2==1)
		{
			if(c2)
			{
				xa=xb;
				ya=yb;
			}
			dx=x-xa;
			dy=y-ya;
			dis=sqrt(dx*dx+dy*dy);
			if(dis<0.1)
				puts("Arrived");
			else
			{
				if(dy>0)
					degree=acos(dx/dis);
				else
					degree=pi*2-acos(dx/dis);
				degree=90-degree/pi*180;
				if(degree<0)
					degree+=360;
				if(degree>360)
					degree-=360;
				printf("%.0lf degrees\n",degree);
			}
		}
		else
			if(c1)
				puts("Inconclusive");
			else
				puts("Inconsistent");
	}
	return 0;
}



8

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct line
{
	int x1,y1,x2,y2;
};
int cases,n,ans,s,i,j,k;
line a[110];
double b[200];
double len;

bool init()
{
	int i;
	scanf("%d",&n);
	if(n==0)
		return false;
	for(i=1;i<=n;i++)
		scanf("%d %d %d %d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
	return true;
}

double dis(double x,double y)
{
	return sqrt(x*x+y*y);
}

bool check(int x1,int y1,int x2,int y2,int x3,int y3)
{
	long long t1,t2;
	t1=(long long)x1*(long long)y2-(long long)x2*(long long)y1;
	t2=(long long)x1*(long long)y3-(long long)x3*(long long)y1;
	return ((t1>=0&&t2<=0)||(t1<=0&&t2>=0));
}

void cross(line A,line B)
{
	double A1,B1,C1,A2,B2,C2,x,y;
	A1=A.y2-A.y1;B1=A.x1-A.x2;C1=-(A.x1*A1 + A.y1*B1);
	A2=B.y2-B.y1;B2=B.x1-B.x2;C2=-(B.x1*A2 + B.y1*B2);
	x=-(C1*B2-C2*B1)/(A1*B2-A2*B1);
	y=-(A1*C2-A2*C1)/(A1*B2-A2*B1);
	b[s]=dis(x-a[i].x1,y-a[i].y1);
}

int main()
{
	cases=0;
	while(init())
	{
		ans=0;
		for(i=1;i<=n;i++)
		{
			s=2;
			b[1]=-25;
			b[2]=dis(a[i].x2-a[i].x1,a[i].y2-a[i].y1)+25;
			for(j=1;j<=n;j++)
				if(i!=j)
				if(check(a[i].x2-a[i].x1,a[i].y2-a[i].y1, a[j].x1-a[i].x1,a[j].y1-a[i].y1, a[j].x2-a[i].x1,a[j].y2-a[i].y1))
				if(check(a[j].x2-a[j].x1,a[j].y2-a[j].y1, a[i].x1-a[j].x1,a[i].y1-a[j].y1, a[i].x2-a[j].x1,a[i].y2-a[j].y1))
				{
					s++;cross(a[i],a[j]);
				}
				sort(b+1,b+s+1);
				for(j=1;j<s;j++)
				{
					len=b[j+1]-b[j];
					k=(int)(len/50);
					while(len-k*50>1e-6) k++;
					while(len-k*50<1e-6) k--;
					ans+=k;
				}
		}
		printf("Map %d\nTrees = %d\n",++cases,ans);
	}
	return 0;
}


基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值