西南民族大学第十二届程序设计竞赛(同步赛)补题题解

E 数菌落

西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第1张图片
西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第2张图片
西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第3张图片
西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第4张图片

分析

本题需要用到一个思想,叫做查并集思想。

标程

#include
using namespace std;
struct jl
{
	int x,y;
}q[1005];
int main()
{
	int n,d,a[1005];
	scanf("%d%d",&n,&d);
	for(int i=0;ia[j])
				{
					a[i]=a[j];
				}
				else
				a[j]=a[i];
			}
		}
	}
	int ans=0;
	for(int i=0;i

H 编故事

西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第5张图片西南民族大学第十二届程序设计竞赛(同步赛)补题题解_第6张图片

分析

找了一下午bug的一道题,一度心态爆炸,最后的原因竟然是自己班门弄斧,学艺不精,把无穷大0x3f3f3f3f写成了0x3f3f3f。本题思路为将所有人的步子放在一个整体数组里进行排序,然后用尺取法进行判断

尺取法

1.将左右端点都初始化为0,然后将右端点推到满足题意的位置。
2.将左端点向右移动一个单位,若该区间仍满足题意,继续推动左端点。若不满足题意,则推动右端点至满足题意的位置。
3.一直循环第二步骤,更新答案,直到右端点推到最右端以外

标程

#include
using namespace std;
struct man
{
	long long step,home;
}q[500100];
int cmp(man a,man b)
{
	return a.step=q[r-1].step-q[l].step)
			{
				ans=min(ans,q[r-1].step-q[l].step);
			}
			book[q[l].home]--;
			if(book[q[l].home]==0)
			{
				all--;
			}
			l++;	
			
		}
	}	
	if(ans==0x3f3f3f3f)
	printf("-1");
	else
	printf("%lld",ans);
} 

你可能感兴趣的:(西南民族大学第十二届程序设计竞赛(同步赛)补题题解)