AcWing 刷题1
AcWing 789.数的范围
思路:
整数二分,用二分模板做,先找右侧区间的左端点,再找左侧区间的右端点
题解:
#include
using namespace std;
const int N=100010;
int f[N];
int n,q,x;
int main()
{
cin>>n>>q;
for(int i=0;i>f[i];
while(q--)
{
cin>>x;
int l=0,r=n-1;
while(l=x)
r=mid;
else l=mid+1;
}
if(f[l]==x) cout<
AcWing 790.数的三次方根
思路:
实数二分,不需要考虑太多
题解:
#include
using namespace std;
int main()
{
double n;
cin>>n;
double l=-100.0;
double r=100.0;
double m;
while(r-l>10e-8)
{
m=(l+r)/2;
if(m*m*m
AcWing 730.机器人跳跃问题
思路:
找到公式之后倒推即可
题解:
#include
using namespace std;
const int N=100005;
int f[N];
int n;
double e=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>f[i];
for(int i=n;i>=1;i--)
if(e
AcWing 1221.四平方和
思路:
先枚举c2+d2,存入数组(相当于哈希表)
再枚举a2+b2,注意按照字典序枚举,然后检查数组中下标为[n-a2-b2]是否有值,如果有,则此时的a b c d即为字典序最小的答案。
题解:
#include
using namespace std;
const int N=5000005;
int f[N],sta[N];
int n;
int main()
{
cin>>n;
for(int a=0;a*a<=n;a++)
for(int b=a;a*a+b*b<=n;b++)
{
if(sta[a*a+b*b]==0)
{
f[a*a+b*b]=a;
sta[a*a+b*b]=1;
}
}
for(int a=0;a*a<=n;a++)
for(int b=a;a*a+b*b<=n;b++)
{
if(sta[n-a*a-b*b]==1)
{
int c,d;
c=f[n-a*a-b*b];
d=sqrt(n-a*a-b*b-c*c);
cout<