zoukankan      html  css  js  c++  java
  • hdu 2610 && hdu 2611(bfs)

    hdu 2610题意:从数组中找出不超过P个序列,每个序列为不下降序列,输出按1)序列长度;2)每个数出现的先后

    做法:bfs,题目要求完全符合bfs的性质。判重很关键,我用了比较水的set来判重。(用set<string>来判重wa,改用set<vector<int> >ac而且比前者快。)

    343MS
     1 /*
     2  *Author:       Zhaofa Fang
     3  *Created time: 2013-04-22-11.50
     4  *Language:     C++
     5  */
     6 #include <cstdio>
     7 #include <cstdlib>
     8 #include <sstream>
     9 #include <iostream>
    10 #include <cmath>
    11 #include <cstring>
    12 #include <algorithm>
    13 #include <string>
    14 #include <utility>
    15 #include <vector>
    16 #include <queue>
    17 #include <map>
    18 #include <set>
    19 using namespace std;
    20 
    21 typedef long long ll;
    22 #define DEBUG(x) cout<< #x << ':' << x << endl
    23 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
    24 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
    25 #define REP(i,n) for(int i=0;i<n;i++)
    26 #define REPD(i,n) for(int i=n-1;i>=0;i--)
    27 #define PII pair<int,int>
    28 #define PB push_back
    29 #define MP make_pair
    30 #define ft first
    31 #define sd second
    32 #define lowbit(x) (x&(-x))
    33 #define INF (1<<30)
    34 
    35 
    36 
    37 int n,p;
    38 int a[1011];
    39 set<vector<int> >S;
    40 
    41 struct node{
    42     vector<int> ss;
    43     int tail,end;
    44 };
    45 
    46 void bfs(){
    47     S.clear();
    48     queue<node>Q;
    49     node now;
    50     int cnt = 0;
    51     FOR(i,1,n){
    52         now.ss.clear();
    53         now.ss.PB(a[i]);
    54         if(S.count(now.ss))continue;
    55         S.insert(now.ss);
    56         now.end = i;
    57         now.tail = a[i];
    58         Q.push(now);
    59         cnt ++;
    60         cout<<a[i]<<endl;
    61         if(cnt>=p)return;
    62     }
    63     while(!Q.empty()){
    64         now = Q.front();
    65         Q.pop();
    66         FOR(i,now.end+1,n){
    67             if(now.tail > a[i])continue;
    68             node next;
    69             next.ss = now.ss;
    70             next.ss.PB(a[i]);
    71             if(S.count(next.ss))continue;
    72             next.end = i;
    73             next.tail = a[i];
    74             S.insert(next.ss);
    75             int sz = next.ss.size();
    76             REP(i,sz)printf("%d%c",next.ss[i],(i!=sz-1)?' ':'\n');
    77             cnt++;
    78             if(cnt>=p)return;
    79             Q.push(next);
    80         }
    81     }
    82 }
    83 
    84 int main(){
    85     //freopen("in","r",stdin);
    86     //freopen("out","w",stdout);
    87     while(~scanf("%d%d",&n,&p)){
    88         FOR(i,1,n)scanf("%d",a+i);
    89         bfs();
    90         puts("");
    91     }
    92     return 0;
    93 }

    hdu 2611 题意与上题的差异是输出规则2)按字典序输出

    做法:我同样是用bfs和同样的判重方法。每个节点增加一个变量记录下标,先按数列的值的值排序,相同则按下标排(因为缺少了后者wa了几次)。在用bfs扩展的时候,要同时符合下标值和数值不小于前一个节点才扩展。

    625MS
      1 /*
      2  *Author:       Zhaofa Fang
      3  *Created time: 2013-04-22-11.50
      4  *Language:     C++
      5  */
      6 #include <cstdio>
      7 #include <cstdlib>
      8 #include <sstream>
      9 #include <iostream>
     10 #include <cmath>
     11 #include <cstring>
     12 #include <algorithm>
     13 #include <string>
     14 #include <utility>
     15 #include <vector>
     16 #include <queue>
     17 #include <map>
     18 #include <set>
     19 using namespace std;
     20 
     21 typedef long long ll;
     22 #define DEBUG(x) cout<< #x << ':' << x << endl
     23 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
     24 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
     25 #define REP(i,n) for(int i=0;i<n;i++)
     26 #define REPD(i,n) for(int i=n-1;i>=0;i--)
     27 #define PII pair<int,int>
     28 #define PB push_back
     29 #define MP make_pair
     30 #define ft first
     31 #define sd second
     32 #define lowbit(x) (x&(-x))
     33 #define INF (1<<30)
     34 
     35 
     36 
     37 int n,p;
     38 set<vector<int> >S;
     39 
     40 struct seq{
     41     int x,pos;
     42 }a[111];
     43 bool cmp(seq x,seq y){
     44     if(x.x != y.x)return x.x<y.x;
     45     return x.pos<y.pos;
     46 }
     47 struct node{
     48     vector<int> ss;
     49     int tail,end,endpos;
     50 };
     51 
     52 void bfs(){
     53     S.clear();
     54     queue<node>Q;
     55     node now;
     56     int cnt = 0;
     57     FOR(i,1,n){
     58         now.ss.clear();
     59         now.ss.PB(a[i].x);
     60         if(S.count(now.ss))continue;
     61         S.insert(now.ss);
     62         now.end = i;
     63         now.tail = a[i].x;
     64         now.endpos = a[i].pos;
     65         Q.push(now);
     66         cnt ++;
     67         printf("%d\n",a[i]);
     68         if(cnt>=p)return;
     69     }
     70     while(!Q.empty()){
     71         now = Q.front();
     72         Q.pop();
     73         FOR(i,now.end+1,n){
     74             if(now.tail > a[i].x)continue;
     75             if(now.endpos > a[i].pos)continue;
     76             node next;
     77             next.ss = now.ss;
     78             next.ss.PB(a[i].x);
     79             if(S.count(next.ss))continue;
     80             next.end = i;
     81             next.tail = a[i].x;
     82             next.endpos = a[i].pos;
     83             S.insert(next.ss);
     84             int sz = next.ss.size();
     85             REP(i,sz)printf("%d%c",next.ss[i],(i!=sz-1)?' ':'\n');
     86             cnt++;
     87             if(cnt>=p)return;
     88             Q.push(next);
     89         }
     90     }
     91 }
     92 
     93 
     94 int main(){
     95     //freopen("in","r",stdin);
     96     //freopen("out","w",stdout);
     97     while(~scanf("%d%d",&n,&p)){
     98         FOR(i,1,n){
     99             scanf("%d",&a[i].x);
    100             a[i].pos = i;
    101         }
    102         sort(a+1,a+n+1,cmp);
    103         bfs();
    104         puts("");
    105     }
    106     return 0;
    107 }
    by Farmer
  • 相关阅读:
    Mongodb 插入数据的方式
    vue插槽(slot)的模板与JSX写法
    vue-resource+iview上传文件取消上传
    封装全局icon组件 svg (仿造element-ui源码)
    vue 修改框架less变量
    vue webpack多页面构建
    vue2 自定义全局组件(Loading加载效果)
    制作npm插件vue-toast-m实例练习
    iview+axios实现文件取消上传
    CSS Variables
  • 原文地址:https://www.cnblogs.com/fzf123/p/3036712.html
Copyright © 2011-2022 走看看