2018 计蒜之道 初赛 第四场

这次凭借这超强的手速终于打到了Rank76

由于这是手速场,所以题目都偏简单,但惯后面两题还是很不可做的

A. 贝壳找房均价计算

这道题题意很清楚了吧,但是有一个坑点:|Y|表示的是字符串Y的长度,而不是Y的绝对值

然后模拟即可,不得不说道题5minA了还是挺快的

CODE

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
char s[1005];
LL x;
int t,y;
int main()
{
	register int i; scanf("%d",&t);
	while (t--)
	{
		scanf("%lld.%s",&x,s+1);
		int len=strlen(s+1);
		for (i=len;i>1;--i)
		if (s[i]>='5') ++s[i-1];
		if (s[1]>='5') ++x;
		printf("%lld
",x);
	}
	return 0;
}

B. 贝壳找房搜房(简单)

这个的话由于数据范围小,我们n!枚举全排列然后暴力判断即可

但是这里有一个巨大无比的坑点:集合无序

这么说对于这组数据:

2 1
2 2 1

的输出应该是1 2而不是2 1

然后我们只要在以上基础上sort一下即可

CODE

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=10;
int num[N],a[30][30],n,m,t[30];
inline char tc(void)
{
	static char fl[100000],*A=fl,*B=fl;
	return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
	x=0; char ch=tc();
	while (ch<'0'||ch>'9') ch=tc();
	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline bool check(int l,int r,int id)
{
	register int i; int cnt=0;
	for (i=l;i<=r;++i)
	t[++cnt]=num[i];
	sort(t+1,t+cnt+1);
	for (i=1;i<=cnt;++i)
	if (a[id][i]!=t[i]) return 0;
	return 1;
}
inline void print(void)
{
	for (register int i=1;i<n;++i)
	printf("%d ",num[i]); printf("%d
",num[n]);
}
int main()
{
	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
	register int i,j,k;
	read(n); read(m);
	for (i=1;i<=m;++i)
	for (read(a[i][0]),j=1;j<=a[i][0];++j)
	read(a[i][j]);
	for (i=1;i<=m;++i)
	sort(a[i]+1,a[i]+a[i][0]+1);
	for (i=1;i<=n;++i)
	num[i]=i;
	do
	{
		bool sign=1;
		for (i=1;i<=m;++i)
		{
			bool flag=0;
			for (j=1;j<=n-a[i][0]+1;++j)
			if (check(j,j+a[i][0]-1,i)) { flag=1; break; }
			if (!flag) { sign=0; break; }
		}
		if (sign) { print(); return 0; }
	}while (next_permutation(num+1,num+n+1));
	puts("-1");
	return 0;
}

C. 贝壳找房搜房(中等)&&D. 贝壳找房搜房(困难)

这两题也是很不可做的,SOL写得比较简略,可以O(n^2)贪心判断

但是我不会啊,我真的是太弱了

跪求大佬题解ing......

原文地址:https://www.cnblogs.com/cjjsb/p/9073891.html