分治算法1

本文档探讨了五个不同难度级别的编程问题:一个涉及数组操作(Problem A),一个处理数值范围查找(Problem B),一个使用数学公式求解(Problem C),一个涉及大数运算(Problem D),以及一个精度要求高的数值计算(Problem E)。这些问题涵盖了数组处理、数值分析和算法优化等关键知识点。
部署运行你感兴趣的模型镜像

Problem A

#include<iostream>
#include<algorithm>
 
using namespace std;
 
 
 
int main() {
     
    int n,i;
    cin>>n;
    int a[n];
    for(i=0;i<n;++i){
        cin>>a[i];
    }
    int b[2];
    int k1=0;
    int k2=0;
    if(i>0){
        b[0]=a[0];
        k1++;
    }else{
        return 0;
    }
 
    for(int i=1;i<n;++i){
        if(a[i]!=b[0]){
            k2++;
        }else{
            k1++;
        }
        if(k2!=0&&(k2<k1||k2>k1)){
            cout<<i+1<<" "<<a[i];
            break;
        }
    }
     
     
    return 0;
}

Problem B

#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main()
{
    long int n;
    long int maxx=0,minn=100000;
    long int a[100000];
    while(~scanf("%ld",&n)&&n){
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            if(a[i]>=maxx){
                maxx=a[i];
            }
            if(a[i]<minn){
                minn=a[i];
            }
        }
        printf("%d %d",maxx,minn);
 
    }
    return 0;
}

Problem  C

#include <bits/stdc++.h>
using namespace std;
const int mod=2e5+5;
typedef long long ll;
int A[55];
int main()
{
  double a,b,c,d;
  int cnt=0;
  scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
  for(double i=-100;i<=100;)
  {
      if(cnt==3) break;
      double sum=a*i*i*i+b*i*i+c*i+d;
      if(fabs(sum)<0.000001)
      {
          cnt++;
          printf("%0.2lf ",i);
      }
  
  
      i+=0.01;
  }
   return 0;
}

Problem  D

#include<cstdio>
#include<iostream>
using namespace std;
long long pow(long long a,long long b,long long p){
    long long ret=1%p;
    while(b){
        if(b&1) ret=ret*a%p;
        b>>=1;a=a*a%p;
    }
    return ret;
}
int main(){
    long long a,b,p;cin>>a>>b>>p;
    cout<<a<<"^"<<b<<" mod "<<p<<"="<<pow(a,b,p)<<endl;
    return 0;
}
 

Problem  E

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-10;//一开始精度为1e-8,错误12%,改完后终于正确了0v0
double f(double x)
{
    double y;
    y=exp(x*log(2))+exp(x*log(3))-exp(x*log(4));
    return y;   
}
int main()
{
    double x,e=1,x1,x2;int m,mod=1;
    cin>>m;
    for(int i=1;i<=m;i++)
    {mod*=10;}
    x1=1,x2=2;
    if(f(x1)==0) x1=x1;
    else if(f(x1)*f(x2)<0)
    {
        while(x2-x1>=eps)
        {
            double xx=x1+(x2-x1)/2;
            if(f(x1)*f(xx)<=0)
            x2=xx;
            else
            x1=xx;
        }
    }
    int z;
    x1=x1*mod*10;
    z=floor(x1);
    if(m==0)
    {
        int z1;
        z1=floor(x1);
        z1=(z1+5)/10;
        cout<<z1;
        return 0;
    }
    cout<<z/(mod*10);
    if(m!=0)
    cout<<"."<<(z%(mod*10)+5)/10;
    return 0;
}

Problem  F

#include <iostream>
using namespace std;
long long a[100001];
long long r[100001];
long long ans=0;
void msort(long long s,long long t){
    if(s==t) return;
    long long mid=(s+t)/2;
    msort(s,mid);
    msort(mid+1,t);
    long long i=s,j=mid+1,k=s;
    while(i<=mid && j<=t){
        if(a[i]<=a[j]){
            r[k]=a[i];k++;i++; 
        }
        else{
            r[k]=a[j];k++;j++;
            ans+=mid-i+1;
        }
    }
    while(i<=mid) {
        r[k]=a[i];k++;i++;
    }
    while(j<=t){
        r[k]=a[j];k++;j++;
    }
    for(i=s;i<=t;i++) a[i]=r[i];
}
int main(int argc,char* argv[])
{
    long long n,i;
    cin>>n;
    for(i=0;i<n;i++) cin>>a[i];
    msort(0,n-1);
    cout<<ans<<endl;
    return 0;
}

Problem  G

#include <iostream>
#include <cstring>
#include <algorithm>
 
using namespace std;
 
const int N = 100005;
 
int n, m;
int f[N];
 
bool check(double mid)
{
    int cnt = 0;
    for (int i = 0; i < n; ++ i )
    {
        cnt += f[i] / mid;
    }
    return cnt >= m;
}
 
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; ++ i ) cin >> f[i];
     
    double left = 0, right = 1e9;
    while (right - left > 1e-4)
    {
        double mid = (left + right) / 2;
        if (check(mid)) left = mid;
        else right = mid;
    }
    printf("%.2lf", right);
     
    return 0;
}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值