zoukankan      html  css  js  c++  java
  • QBXT 二月五号整理

    给你一列数, 询问和最大的子串. N<=10^6

     1 // N <=10^6
     2 #include<cstdio>
     3 #include<iostream>
     4 using namespace std;
     5 int n,a[105200];
     6 int maxSubstr(){
     7     int sum=0,minsum=0,answer=0;
     8     for(int i=1;i<=n;++i){
     9         sum+=a[i];
    10         minsum=min(sum,minsum);
    11         answer=max(answer,sum-minsum);
    12     }
    13     printf("%d
    ",answer);
    14 }
    15 int main()
    16 {
    17     scanf("%d",&n);
    18     for(int i=1;i<=n;i++)
    19       scanf("%d",&a[i]);
    20     maxSubstr();
    21     return 0;
    22 }

    啊!!!好巧妙,幸亏当时记了笔记。。。

    给你两列数 A; B, 定义一个子串 [l; r] 的权值为

    r i=l Ai除以r i=l B问权值最大的子串
    n 10^5.

     1 /*二、给你两列数 A; B, 定义一个子串 [l; r] 的权值为
     2    ∑r i=l Ai
     3 k= ___________
     4    ∑r i=l Bi
     5 问权值最大的子串.*/
     6 const double inf = 1e32;
     7 int n, a[maxn], b[maxn];
     8 double c[maxn];
     9 double maxSubstr() {
    10     double sum = 0, minsum = inf, answer = -inf;
    11     for (int i = 1; i <= n; ++ i) {
    12         sum += c[i];
    13         answer = max(answer, sum - minsum);
    14         minsum = min(sum, minsum);
    15     }
    16     return answer;
    17 }
    18 double erfen() {
    19     double l(-inf), r(inf);
    20     while (l + 1e-10 < r) { 
    21         double mid = (l + r)/ 2;
    22         for (int i = 1; i <= n; ++ i) {
    23             c[i] = a[i] - mid * b[i];
    24         }
    25         if (maxSubstr() >= 0) {
    26             l = mid;
    27         } else {
    28             r = mid - 1e-10;
    29         }
    30     } //把分母乘过去二分答案
    31 } 

     

  • 相关阅读:
    实验6 继承
    实验5 运算符重载
    实验4 类初步
    实验3 文件操作
    实验2 C++数组与指针
    实验1 C++函数
    C++程序设计实验安排
    计算机图形学课件pdf版
    《三维建模简介》课件
    《3D建模初步》参考资料
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6366933.html
Copyright © 2011-2022 走看看