• 【模拟试题2】【20150520】


    模拟+堆+链表+贪心+最小生成树+倍增LCA


    这次题目简单了许多……然而蒟蒻还是傻逼了……sad连NOIP题都做这么烂……没救了

    File

      给定一些目录&文件,让按给定格式输出一个文件列表

      其实直接排序一下,就可以满足字典序的条件了,顺便还能使在同一目录下的文件顺序连在一起,然后模拟一下“dfs”的过程即可:

      记录当前在第几层目录,以及当前的目录名称,然后比较一下,如果相同则输出“|    | ....  |",否则更新当前目录,并清空后面的目录。

      唉我就是没加清空后面目录的操作,导致【root/A/abc 和root/B/abc】的两个abc当成是一个目录了……挂了20分……sad。。。

      其实蛮好写的……

     1 //20150520 file
     2 #include<string>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<iostream>
     7 #include<algorithm>
     8 #define rep(i,n) for(int i=0;i<n;++i)
     9 #define F(i,j,n) for(int i=j;i<=n;++i)
    10 #define D(i,j,n) for(int i=j;i>=n;--i)
    11 #define pb push_back
    12 using namespace std;
    13 typedef long long LL;
    14 inline int getint(){
    15     int r=1,v=0; char ch=getchar();
    16     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    17     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    18     return r*v;
    19 }
    20 const int N=55;
    21 /*******************template********************/
    22 int n;
    23 string s[N],r[N];
    24 int st[N];
    25 int main(){
    26 #ifndef ONLINE_JUDGE
    27     freopen("file.in","r",stdin);
    28     freopen("file.out","w",stdout);
    29 #endif
    30     n=getint();
    31     F(i,1,n) cin >> s[i];
    32     sort(s+1,s+n+1);
    33     int ceng=0,now=0,ed=0;
    34     string ss="";
    35     rep(i,s[1].length()){
    36         if (s[1][i]=='/') break;
    37         ss+=s[1][i];
    38     }
    39     cout <<ss<<endl;
    40     ceng=0; r[0]=ss;
    41 
    42     F(i,1,n){
    43         string tmp="";
    44         int now=0;
    45         rep(j,s[i].length()){
    46             if (j==s[i].length()-1) tmp+=s[i][j];
    47             if (s[i][j]=='/'||j==s[i].length()-1){
    48                 if (tmp!=r[now]){
    49                     F(i,1,now-1) printf("|    ");
    50                     printf("|----");
    51                     cout <<tmp<<endl;
    52                     r[now]=tmp;
    53                     F(k,now+1,6) r[k]="";
    54                 }
    55                 tmp=""; now++;
    56             }else tmp+=s[i][j];
    57         }
    58     }
    59     return 0;
    60 }
    View Code

    Compile

      其实这题跟【BZOJ】【1150】【CTSC2007】数据备份Backup 差不多……反而还更简单了……因为这题不用特判首尾

      一开始还在想DP,然而N和M是同阶的……那么……根据自古流传的规律:DP不行想贪心!

      然后就很流畅地写出来了……

      上次写1150的时候还是看的lyd神犇的代码= =这次居然自己yy出来了,好评

     1 //20150520 compile
     2 #include<queue>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<iostream>
     7 #include<algorithm>
     8 #define rep(i,n) for(int i=0;i<n;++i)
     9 #define F(i,j,n) for(int i=j;i<=n;++i)
    10 #define D(i,j,n) for(int i=j;i>=n;--i)
    11 #define pb push_back
    12 using namespace std;
    13 typedef long long LL;
    14 inline int getint(){
    15     int r=1,v=0; char ch=getchar();
    16     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    17     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    18     return r*v;
    19 }
    20 const int N=200010;
    21 /*******************template********************/
    22 int n,m,a[N<<2],pre[N<<2],nex[N<<2],cnt;
    23 bool vis[N<<2];
    24 typedef pair<int,int> pii;
    25 priority_queue<pii>Q;
    26 #define mp make_pair
    27 #define X first
    28 #define Y second
    29 int main(){
    30 #ifndef ONLINE_JUDGE
    31     freopen("compile.in","r",stdin);
    32     freopen("compile.out","w",stdout);
    33 #endif
    34     n=getint(); m=getint();
    35     if (m>(n>>1)){puts("Error!"); return 0;}
    36     F(i,1,n){
    37         a[i]=getint();
    38         pre[i]=i-1;
    39         nex[i]=i+1;
    40         vis[i]=0;
    41         Q.push(mp(a[i],i));
    42     }
    43     pre[1]=n; nex[n]=1;
    44     int ans=0,num=0;
    45     while(num<m && !Q.empty()){
    46         int x=Q.top().Y; Q.pop();
    47         if (vis[x]||vis[pre[x]]||vis[nex[x]]) continue;
    48 //        printf("%d %d 
    ",x,a[x]);
    49         num++;
    50         ans+=a[x];
    51         vis[x]=vis[pre[x]]=vis[nex[x]]=1;
    52 /*        a[x]=a[pre[x]]+a[nex[x]]-a[x];
    53         vis[x]=0;
    54         pre[x]=pre[pre[x]]; nex[pre[x]]=x;
    55         nex[x]=nex[nex[x]]; pre[nex[x]]=x;
    56         Q.push(mp(a[x],x));
    57 */        a[++n]=a[pre[x]]+a[nex[x]]-a[x];
    58         pre[n]=pre[pre[x]]; nex[pre[n]]=n;
    59         nex[n]=nex[nex[x]]; pre[nex[n]]=n;
    60         Q.push(mp(a[n],n));
    61 //        F(i,1,n) printf("%d ",pre[i]); puts("");
    62 //        F(i,1,n) printf("%d ",nex[i]); puts("");
    63 //        F(i,1,n) printf("%d ",vis[i]); puts("");
    64     }
    65     if (num<m) puts("Error!");
    66     else printf("%d
    ",ans);
    67     return 0;
    68 }
    View Code

    Cost

      尼玛这样的题要不要考这么多遍,前两天tyvj刚做……又来……

     1 //20150520 cost
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define rep(i,n) for(int i=0;i<n;++i)
     8 #define F(i,j,n) for(int i=j;i<=n;++i)
     9 #define D(i,j,n) for(int i=j;i>=n;--i)
    10 #define pb push_back
    11 using namespace std;
    12 typedef long long LL;
    13 inline int getint(){
    14     int r=1,v=0; char ch=getchar();
    15     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    16     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    17     return r*v;
    18 }
    19 const int N=10010,M=1e5+10;
    20 /*******************template********************/
    21 int to[N<<1],next[N<<1],len[N<<1],head[N],cnt;
    22 void add(int x,int y,int z){
    23     to[++cnt]=y; next[cnt]=head[x]; head[x]=cnt; len[cnt]=z;
    24     to[++cnt]=x; next[cnt]=head[y]; head[y]=cnt; len[cnt]=z;
    25 }
    26 struct edge{
    27     int x,y,z;
    28     inline bool operator < (const edge &b)const {return z<b.z;}
    29 }E[M];
    30 int n,m,fa[N][20],mx[N][20],dep[N],f[N],size[N];
    31 int Find(int x){return f[x]==x ? x : Find(f[x]);}
    32 
    33 void dfs(int x){
    34     F(i,1,14)
    35         if (dep[x]>=(1<<i)){
    36             fa[x][i]=fa[fa[x][i-1]][i-1];
    37             mx[x][i]=max(mx[fa[x][i-1]][i-1],mx[x][i-1]);
    38         }
    39         else break;
    40     for(int i=head[x];i;i=next[i])
    41         if (to[i]!=fa[x][0]){
    42             dep[to[i]]=dep[x]+1;
    43             fa[to[i]][0]=x;
    44             mx[to[i]][0]=len[i];
    45             dfs(to[i]);
    46         }
    47 }
    48 int query(int x,int y){
    49     int ans=0;
    50     if (dep[x]<dep[y]) swap(x,y);
    51     int t=dep[x]-dep[y];
    52     F(i,0,14) if (t&(1<<i)){
    53         ans=max(ans,mx[x][i]);
    54         x=fa[x][i];
    55     }
    56     D(i,14,0) if (fa[x][i]!=fa[y][i]){
    57         ans=max(ans,max(mx[x][i],mx[y][i]));
    58         x=fa[x][i]; y=fa[y][i];
    59     }
    60     if (x!=y)
    61         ans=max(ans,max(mx[x][0],mx[y][0]));
    62     return ans;
    63 }
    64 int main(){
    65 #ifndef ONLINE_JUDGE
    66     freopen("cost.in","r",stdin);
    67     freopen("cost.out","w",stdout);
    68 #endif
    69     n=getint(); m=getint();
    70     F(i,1,m){
    71         int x=getint(),y=getint(),z=getint();
    72         E[i]=(edge){x,y,z};
    73     }
    74     sort(E+1,E+m+1);
    75     F(i,1,n) f[i]=i,size[i]=1;
    76     F(i,1,m){
    77         int f1=Find(E[i].x),f2=Find(E[i].y);
    78         if (f1!=f2){
    79             if (size[f1]>size[f2]) swap(f1,f2);
    80             f[f1]=f2;
    81             size[f2]+=size[f1];
    82             add(E[i].x,E[i].y,E[i].z);
    83         }
    84     }
    85     dfs(1);
    86     int T=getint();
    87     while(T--){
    88         int x=getint(),y=getint();
    89         printf("%d
    ",query(x,y));
    90     }
    91     return 0;
    92 }
    View Code
  • 相关阅读:
    hdu 2544 单源最短路问题 dijkstra+堆优化模板
    CImg、libjpeg--介绍、配置(操作JPEG)
    【Android归纳】开发中应该注意的事项
    iOS測试——置换測试: Mock, Stub 和其它
    <html>
    系统吞吐量、TPS(QPS)、用户并发量、性能測试概念和公式
    hdu 1038 Biker&#39;s Trip Odometer(水题)
    java泛型
    从头认识Spring-2.1 自己主动装配(2)-byType(2)
    11.2.0.3 RAC(VCS)节点crash以及hang的问题分析
  • 原文地址:https://www.cnblogs.com/Tunix/p/4516783.html
Copyright © 2020-2023  润新知