zoukankan      html  css  js  c++  java
  • 模板题+进阶

    模板题:2500 后面第一个大于

    一般要正着看不出来,反着想,有的人也叫做正难则反。

    有思维的一道题:1279 扔盘子

    暴力会TLE

    数据有点水,反着写的可以拿95%

     1 //垃圾数据从井底倒着网上数盘子居然能过19个测试点
     2 //但是提供给我们一种思路就是,明知道正着肯定会错时逆向解题也许能拿更多的分
     3 #include<bits/stdc++.h>
     4 using namespace std;
     5 const int maxN=50005;
     6 int n, m;
     7 int w[maxN], d[maxN];
     8 int main() {
     9     cin>>n>>m;
    10     for(int i=0; i<n; i++)cin>>w[i];
    11     for(int i=1; i<=m; i++)cin>>d[i];
    12     if(w[0]<d[1])cout<<0;   //下载测试点数据:4 4 3 6 8 9 4 6 2 2
    13     else {
    14         int j=1;
    15         for(int i=n-1; i>=0; i--) {
    16             if(d[j]<=w[i]) {
    17                 j++;
    18             }
    19         }
    20         cout<<j-1;
    21     }
    22     return 0;
    23 }
    View Code

    正着写用到所谓单调栈,比较有意思

     1 //很好的一道关于单调栈的题 
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 const int N=50005;
     5 int w[N],d[N];
     6 stack<int>s;
     7 int main() {
     8     int n,m,ans=0,tmp=0x3f3f3f3f;
     9     scanf("%d%d",&n,&m);
    10     for(int i=0; i<n; i++)scanf("%d",&w[i]);
    11     for(int i=0; i<m; i++)scanf("%d",&d[i]);
    12     for(int i=0; i<n; i++) {
    13         if(w[i]<=tmp)tmp=w[i];//注意此处怎样将栈变成单调栈 
    14         s.push(tmp);
    15     }
    16     int cur=0;
    17     while(!s.empty()&&cur<m) {
    18         if(s.top()<d[cur]) {
    19             s.pop();
    20             continue;
    21         }
    22         ans++;
    23         s.pop();
    24         cur++;
    25     }
    26     printf("%d
    ",ans);
    27     return 0;
    28 }
    View Code

    竞赛题型:1272 最大距离

  • 相关阅读:
    CF161D Distance in Tree
    [WC2010]重建计划 长链剖分
    [FJOI2014]最短路径树问题 长链剖分
    [Vani有约会]雨天的尾巴 线段树合并
    Friend Links
    Nerdtree+高亮+图标配置
    【CF1416C】XOR Inverse
    01-Trie 学习
    【[USACO19DEC】Milk Visits G
    【ARC069D】Flags
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/12350592.html
Copyright © 2011-2022 走看看