zoukankan      html  css  js  c++  java
  • 51nod——1402最大值、2479小b分糖果 (套路)

      1402最大值:正向从1到n,如果没有限制,就依次递增1,如果有限制,就取那个限制和递增到这的最小值。这样保证1和每个限制点后面都是符合题意的递增,但是限制点前面这个位置可能会有落差(之前递增多了)。不过我们再反向来一遍,再使每一个限制点前面都是符合题意的递增,每个位置取反向这个过程和正向扫过的最小值。再对全局取max。

      2479小b分糖果:正向从1到n,如果相邻且评分更高,就递增1,反向从n到1如果相邻且评分更高,就取后面位置递增1和正向扫过的最大值(前面的糖果已经是最少的了,不能减了)。再对全局求和。

    1042:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define maxn 100050
     4 int s[maxn], ans1[maxn],ans2[maxn];
     5 int main() {
     6     std::ios::sync_with_stdio (0);
     7     cin.tie (0);
     8     int t; cin >> t;
     9     while (t--) {
    10         int n, m; cin >> n >> m;
    11         memset (s, -1, sizeof (s));
    12         memset (ans1, 0, sizeof (ans1));
    13         memset (ans2, 0, sizeof (ans2));
    14         for (int i = 0; i < m; i++) {
    15             int id, x; cin >>id>>x ; s[id]=x;
    16         }
    17         for (int i = 2; i <= n; i++) {
    18             ans1[i]=ans1[i-1]+1;
    19             if(s[i]!=-1) ans1[i]=min(ans1[i],s[i]);
    20         }
    21         ans2[n]=ans1[n];
    22         for(int i = n - 1; i > 0; i--){
    23             ans2[i]=ans2[i+1]+1;
    24             if(s[i]!=-1) ans2[i]=min(ans2[i],s[i]);
    25         }
    26         int maxx=0;
    27         for(int i=1;i<=n;i++)
    28             maxx=max(maxx,min(ans1[i],ans2[i]));
    29 
    30         cout<<maxx<<endl;
    31     }
    32 
    33     return 0;
    34 }

    2479:

     1 ///这题碰见两次了
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 #define maxn 50050
     5 int num[maxn],a[maxn];
     6 int main(){
     7     std::ios::sync_with_stdio(0);
     8     cin.tie(0);
     9     int n; cin>>n;
    10     long long ans=0;
    11     for(int i=0;i<n;i++) cin>>a[i];
    12     fill(num,num+n,1);
    13     for(int i=1;i<n;i++)
    14         if(a[i]>a[i-1]) num[i]=num[i-1]+1;
    15 
    16     for(int i=n-2;i>=0;i--)
    17         if(a[i]>a[i+1]) num[i]=max(num[i],num[i+1]+1);
    18 
    19     for(int i=0;i<n;i++) ans+=num[i];
    20     cout<<ans<<endl;
    21     return 0;
    22 }
  • 相关阅读:
    学习小记: Kaggle Learn
    eclipse 一些快捷键
    Map接口
    学习笔记
    泛型方法 类 接口
    TreeSet
    xml
    Java笔试题目-my
    迭代器三种遍历方法
    线程请求其他线程资源
  • 原文地址:https://www.cnblogs.com/noobimp/p/10957995.html
Copyright © 2011-2022 走看看