• AcWing 刷题1


    AcWing 789.数的范围

    思路:

    整数二分,用二分模板做,先找右侧区间的左端点,再找左侧区间的右端点

    题解:
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=100010;
    int f[N];
    int n,q,x;
    
    int main()
    {
    	cin>>n>>q;
    	for(int i=0;i<n;i++)
    		cin>>f[i];
    	while(q--)
    	{
    		cin>>x;
    		int l=0,r=n-1;
    		while(l<r)
    		{
    			int mid=(l+r)/2;
    			if(f[mid]>=x)
    				r=mid;
    			else l=mid+1;
    		}
    		if(f[l]==x) cout<<l<<' ';
    		else
    		{
    			cout<<"-1 -1"<<endl;
    			continue;
    		}
    		r=n-1;
    		while(l<r)
    		{
    			int mid=(l+r+1)/2;
    			if(f[mid]==x) l=mid;
    			else r=mid-1;
    		}
    		cout<<l<<endl;
    	}
    	return 0;
    }
    

    AcWing 790.数的三次方根

    思路:

    实数二分,不需要考虑太多

    题解:
    #include<bits/stdc++.h>
    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<n)
    			l=m;
    		else r=m;
    	}
    	cout<<fixed<<setprecision(6)<<m<<endl;
    	return 0;
    }
    

    AcWing 730.机器人跳跃问题

    思路:

    找到公式之后倒推即可

    题解:
    #include<bits/stdc++.h>
    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<f[i])
    		e+=(f[i]-e)/2;
    		else e-=(e-f[i])/2;
    	int a=(int)e/1;
    	if(a!=e) cout<<a+1<<endl;
    	else cout<<a<<endl;
    	return 0;
    }
    

    AcWing 1221.四平方和

    思路:

    先枚举c^2 + d^2,存入数组(相当于哈希表)

    再枚举a^2 + b^2,注意按照字典序枚举,然后检查数组中下标为[n - a^2 - b^2]是否有值,如果有,则此时的a b c d即为字典序最小的答案。

    题解:
    #include<bits/stdc++.h>
    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<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
    				return 0;
    			}
    		}
    	return 0;
    }
    
  • 相关阅读:
    The path "" is not valid path to the gcc binary.
    ADB命令介绍
    Android 中Message,MessageQueue,Looper,Handler详解+实例
    Sqlite 修改字段
    曾经光辉岁月 永远海阔天空
    用AchartEngineActivity引擎自定义图表控件和背景折线图
    一个帖子学会Android开发四大组件
    Android获得系统时间(24小时制)
    TagBuilder
    MVC
  • 原文地址:https://www.cnblogs.com/longwind7/p/15843461.html
Copyright © 2020-2023  润新知