这大概是你们距离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;
}