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 }
  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/noobimp/p/10957995.html
Copyright © 2011-2022 走看看