昨日的校预选赛,打到自闭。。。不多说了,回忆起来都是泪。
水平有限,先放部分题题解(参考大佬的),等其他几道研究
明白了陆续更新。
B.梦纤石的牵绊
http://172.23.79.51/problem.php?id=1188
简单的模拟题,问n的二进制有多少位。每次除以2,计数器++即可。
#include<iostream>
using namespace std;
int main()
{
int n,ans=1;
cin>>n;
while(true)
{
ans++;
n=n/2;
if(n<2)
break;//也可用n>>1;
}
cout<<ans<<endl;
return 0;
}
E.诛璃石的断杀
http://172.23.79.51/problem.php?id=1184
开一个数组记录每个数字出现的次数,遍历一遍 找到最大的输出。
注意时间复杂度较大,容易超时。O(n^2)的复杂度过不去。时间复杂度:O(n)
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5+10;
int n,a[N],x;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
a[x]++;
}
int mx=0;
for(int i=1;i<=n;i++)
mx=max(mx,a[i]);
for(int i=1;i<=n;i++)
{
if(a[i]==mx)
cout<<i<<endl;
}
return 0;
}
F—凤瞳⽯的轻鸣
http://172.23.79.51/problem.php?id=1187
题⽬中要求的是使⽤所有数的乘积最⼤,那么可以贪⼼想到,如果能使⼀ 个数的绝对值变⼤,那么就使⽤魔法把这个数的绝对值变⼤。也就是说, 把所有正数都变成负数,那么现在所有数的乘积的绝对值⼀定是最⼤的, 但是现在会存在正负的问题,也就是n是奇数还是偶数,偶数的话乘积就 ⼀定是正的,不需要考虑,如果n是奇数呢,那么我们就现在需要改变⼀ 个数,使它为正数,我们就把绝对值最⼤的那个数变成正的就好,因为它 能提供的贡献是最⼤的,改变别的任意⼀个数,乘积的变化量都会⽐改变 绝对值最⼤的那个数乘积的变化量都⼤。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+10;
int n,a[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>0)
a[i]=-1*a[i]-1;//先把正数全变成复数,再考虑奇偶
}
if(n%2!=0)
{
int mx=0,id=0;
for(int i=0;i<n;i++)
{
if(a[i]<mx)
{
mx=a[i];
id=i;
}//变绝对值最大的
}
a[id]=-1*a[id]-1;
}
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
H—君清⽯的思念
http://172.23.79.51/problem.php?id=1185
最简单的签到题,注意超时。
#include<iostream>
using namespace std;
int main()
{
int n,m;
double x;
scanf("%d",&n);//输入cin较慢
for(int i=0;i<n;i++)
{
scanf("%d",&m);
x=1.0*m/2;
printf("%.1f\n",x);
}
return 0;
}