zoukankan      html  css  js  c++  java
  • 第五周 9.27-10.3

    9.27

    合肥OL。((运气好会有名额?

    9.28

    补了一个线段树。

    9.29-9.30

    什么都没干?

    10.1

    弱联D1。心累不补。

    10.2

    弱联D2。

    AIZU 2447 A Two Floors Dungeon

    暴搜。地图要预处理好。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <queue>
      5 using namespace std;
      6 int d[][2]={{0,1},{0,-1},{1,0},{-1,0}};
      7 bool vis[2][51][51][1<<10];
      8 char G[1<<10][2][51][51];
      9 char GS[10][51][51];
     10 bool on[10];
     11 int W,H,S;
     12 
     13 struct node
     14 {
     15     int f,x,y,pos,step;
     16     node(int F,int X,int Y,int POS,int STEP){f=F;x=X;y=Y;pos=POS;step=STEP;}
     17 };
     18 queue<node> q;
     19 
     20 bool in(int i,int j)
     21 {
     22     return i&&i<=H&&j&&j<=W;
     23 }
     24 
     25 void update(int pos)
     26 {
     27     for(int i=S-1;i>=0;i--)
     28     {
     29         on[i]=pos/(1<<i);
     30         pos%=(1<<i);
     31     }
     32     return;
     33 }
     34 
     35 void Switch(int x,int s)
     36 {
     37     for(int i=1;i<=H;i++)
     38         for(int j=1;j<=W;j++)
     39             if(GS[s][i][j]=='*')
     40                 swap(G[x][0][i][j],G[x][1][i][j]);
     41     return;
     42 }
     43 
     44 int main(void)
     45 {
     46     while(~scanf("%d%d",&W,&H))
     47     {
     48         int xs,ys,xt,yt;
     49         for(int i=1;i<=H;i++)
     50         {
     51             char s[100];
     52             scanf("%s",s+1);
     53             for(int j=1;j<=W;j++)
     54             {
     55                 if(s[j]=='#'||s[j]=='|') G[0][0][i][j]=G[0][1][i][j]=s[j];
     56                 else if(s[j]=='_') G[0][0][i][j]='0',G[0][1][i][j]='#';
     57                 else if(s[j]=='^') G[0][0][i][j]='#',G[0][1][i][j]='0';
     58                 else if(s[j]=='%')
     59                 {
     60                     G[0][0][i][j]='0',G[0][1][i][j]='#';
     61                     xs=i; ys=j;
     62                 }
     63                 else if(s[j]=='&')
     64                 {
     65                     G[0][0][i][j]='0',G[0][1][i][j]='#';
     66                     xt=i; yt=j;
     67                 }
     68                 else if(s[j]>='a'&&s[j]<='z') G[0][0][i][j]=s[j],G[0][1][i][j]='#';
     69                 else if(s[j]>='A'&&s[j]<='Z') G[0][0][i][j]='#',G[0][1][i][j]=s[j]+32;
     70             }
     71         }
     72         scanf("%d",&S);
     73         for(int i=0;i<S;i++)
     74             for(int j=1;j<=H;j++)
     75                 scanf("%s",GS[i][j]+1);
     76         for(int i=1;i<(1<<S);i++)
     77         {
     78             memcpy(G[i],G[0],sizeof(G[i]));
     79             for(int j=0;j<S;j++)
     80                 if((1<<j)&i) Switch(i,j);
     81         }
     82         while(!q.empty()) q.pop();
     83         memset(vis,0,sizeof(vis));
     84         q.push(node(0,xs,ys,0,0));
     85         vis[0][xs][ys][0]=1;
     86         int ans=-1;
     87         while(!q.empty())
     88         {
     89             node tmp=q.front(); q.pop();
     90             int f=tmp.f,x=tmp.x,y=tmp.y,pos=tmp.pos,step=tmp.step;
     91             if(x==xt&&y==yt) {ans=step; break;}
     92             update(pos);
     93             for(int i=0;i<4;i++)
     94             {
     95                 int xx=x+d[i][0],yy=y+d[i][1];
     96                 if(!in(xx,yy)||vis[f][xx][yy][pos]||G[pos][f][xx][yy]=='#') continue;
     97                 vis[f][xx][yy][pos]=1;
     98                 q.push(node(f,xx,yy,pos,step+1));
     99             }
    100             if(G[pos][f][x][y]=='|'&&!vis[1-f][x][y][pos])
    101             {
    102                 vis[1-f][x][y][pos]=1;
    103                 q.push(node(1-f,x,y,pos,step+1));
    104             }
    105             if(G[pos][f][x][y]>='a'&&G[pos][f][x][y]<='z')
    106             {
    107                 int p=G[pos][f][x][y]-'a',t=1<<p;
    108                 if(on[p])
    109                 {
    110                     if(!(GS[p][x][y]=='*'&&vis[1-f][x][y][pos-t])&&!(GS[p][x][y]!='*'&&vis[f][x][y][pos-t]))
    111                     {
    112                         if(GS[p][x][y]=='*') f=1-f;
    113                         vis[f][x][y][pos-t]=1;
    114                         q.push(node(f,x,y,pos-t,step+1));
    115                     }
    116                 }
    117                 else
    118                 {
    119                     if(!(GS[p][x][y]=='*'&&vis[1-f][x][y][pos+t])&&!(GS[p][x][y]!='*'&&vis[f][x][y][pos+t]))
    120                     {
    121                         if(GS[p][x][y]=='*') f=1-f;
    122                         vis[f][x][y][pos+t]=1;
    123                         q.push(node(f,x,y,pos+t,step+1));
    124                     }
    125                 }
    126             }
    127         }
    128         printf("%d
    ",ans);
    129     }
    130     return 0;
    131 }
    Aguin

    10.3

    打个BC。

    再接再厉阿。

    HDU 5496 Beauty of Sequence

    每个a[i]有贡献的区间数是所有区间数【2^(n-1)】减去前面已经出现过a[i]的区间数。

    还是dp死。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 typedef long long LL;
     7 const int maxn=1e5+10;
     8 const LL mod=1e9+7;
     9 LL a[maxn],b[maxn],f[maxn];
    10 LL cnt[maxn],Hash[maxn];
    11 
    12 int main(void)
    13 {
    14     f[0]=1LL;
    15     for(int i=1;i<maxn;i++) f[i]=(f[i-1]*2LL)%mod;
    16     int T; cin>>T;
    17     while(T--)
    18     {
    19         int n;
    20         scanf("%d",&n);
    21         for(int i=0;i<n;i++)
    22         {
    23             scanf("%I64d",a+i);
    24             Hash[i]=a[i];
    25         }
    26         sort(Hash,Hash+n);
    27         int num=unique(Hash,Hash+n)-Hash;
    28         for(int i=0;i<n;i++) b[i]=lower_bound(Hash,Hash+num,a[i])-Hash;
    29         memset(cnt,0,sizeof(cnt));
    30         LL ans=0LL;
    31         for(int i=0;i<n;i++)
    32         {
    33             ans=(ans+a[i]*f[n-1]%mod)%mod;
    34             ans=(ans-a[i]*(LL)cnt[b[i]]%mod*f[n-i-1]%mod+mod)%mod;
    35             cnt[b[i]]=(cnt[b[i]]+f[i])%mod;
    36         }
    37         printf("%I64d
    ",ans);
    38     }
    39     return 0;
    40 }
    Aguin
  • 相关阅读:
    C#语言 循环语句
    C#语言基础语句
    抛出异常不会终止程序:
    Giew与checkBox的结合
    js去掉空格
    转:label标签的特殊用法
    LINQ Operators之过滤(Filtering)
    转:设置session过期时间
    转:Bat命令学习
    收藏:锁(待阅)
  • 原文地址:https://www.cnblogs.com/Aguin/p/4841835.html
Copyright © 2011-2022 走看看