zzuli19级第四次选拔赛第二场题解

这大概是你们距离ak最接近的一次了。。。

简单讲下思路:
前五道都算签到题
b题:只需默认开始为0,减到负值的操作忽略掉就行
d题:容易看出n可以一直除以重量得到不为0的结果n/2次,输出答案n/2+1即可,手算几个数找规律也能出来
e题:题面翻译得很简单,很好理解

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int i=1;
	while(++m){
		while(a[i]<m&&i<=n)i++;
		if(i>n) break;
		a[i]=0;
	}
	cout<<m-1<<endl;
}

f题:令M=N^N, 对等式两边分别取对数可以得到 log10(M)=N*log10(N)
M=10^(*log10(N))
利用对数思想的简单类型题

int main()
{
	int T;cin>>T;
	double n,k,m;
	while(T--){
		cin>>n;
		m=n*log10(n);
		k=m-(__int64)m;
		cout<<int(pow(10,k))<<endl;
	}
} 

g题:贪心,安排连接广场数量最少的广场进行黑色交易,只要会存图就可以写,图论没有那么可怕。

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++) {
		cin>>x>>y;
		a[x]++;a[y]++;
		ve[x].push_back(y);
		ve[y].push_back(x);
	}
	int Min=0x3f3f3f3f;
	int pos;
	for(int i=1;i<=n;i++){
		if(a[i]<Min){
			Min=a[i];
			pos=i;
		}
	}
	ans[pos]=1;
	for(int v:ve[pos]){
		ans[v]=1;
	}
	for(int i=1;i<=n;i++) if(ans[i]) cout<<0<<' ';else cout<<1<<' ';
	cout<<endl;
}

h题:本次安排的放ak题,非常有趣的一道题,代码量又很小,考察逆向思维,这样的题最适合新生赛,可惜只找到一道。。。
不需要你用微积分算出来安全区域的面积公式,你只需要想到安全区域的面积和龙与城堡的距离的平方成正比,然后直接利用样例给出的一个已知答案就可以了。
看完题解后很简单,但如果没做过类似的题想在赛场上直接做出来还是不容易的。

int main(){
	double x,y,X,Y;
	cin>>x>>y>>X>>Y;
	double dis2=(x-X)*(x-X)+(y-Y)*(y-Y);
	cout<<fixed<<setprecision(8)<<dis2*0.916297857297023<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值