zoukankan      html  css  js  c++  java
  • 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)

    这场比赛可以说是灰常的水了,涨信心场??

    今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~

    之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小时连题解都出来了···

    A-烤肉拌饭 ( uva 572

    就是求联通块的数量啊,刚学dfs的时候做的那种!

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <queue>
     6 
     7 using namespace std;
     8 const int maxn=100+5;
     9 const int dx[]={1,-1,1,-1,1,-1,0,0};
    10 const int dy[]={0,0,1,1,-1,-1,1,-1};
    11 char G[maxn][maxn];
    12 int vis[maxn][maxn];
    13 int n,m;
    14 int ans;
    15 void dfs(int x,int y){
    16     vis[x][y]=1;
    17     for(int i=0;i<8;i++){
    18         int nx=x+dx[i];
    19         int ny=y+dy[i];
    20         if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&G[nx][ny]=='@'&&!vis[nx][ny]){
    21             dfs(nx,ny);
    22         }
    23     }
    24     return ;
    25 }
    26 int main(){
    27     while(scanf("%d%d",&n,&m)&&n&&m){
    28         memset(vis,0,sizeof(vis));
    29         ans=0;
    30         for(int i=1;i<=n;i++){
    31             for(int j=1;j<=m;j++){
    32                 scanf(" %c",&G[i][j]);
    33             }
    34         }
    35         for(int i=1;i<=n;i++){
    36             for(int j=1;j<=m;j++){
    37                 if(!vis[i][j]&&G[i][j]=='@'){
    38                     ans++;
    39                     dfs(i,j);
    40                 }
    41             }
    42         }
    43         cout<<ans<<endl;
    44     }
    45 return 0;
    46 }
    View Code
     
     

    B-麻辣香锅 HihoCoder - 1632

    模拟,emmm模拟可以提高代码能力??

    C-啵啵鱼 poj2387

    是个很裸的最短路,一个spfa或者dijsktra就可以

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <queue>
     6 
     7 using namespace std;
     8 const int maxn=2000+10;
     9 const int maxm=4000+10;
    10 const int INF=2147483600;
    11 typedef long long LL;
    12 int head[maxn],Next[maxm],to[maxm];
    13 LL val[maxm];
    14 int sz;
    15 int n,m;
    16 void add_edge(int a,int b,LL w){
    17     ++sz;
    18     val[sz]=w;
    19     to[sz]=b;
    20     Next[sz]=head[a];
    21     head[a]=sz;
    22 }
    23 LL d[maxn];
    24 int spfa(int s){
    25     for(int i=1;i<=n;i++)d[i]=INF;
    26     int vis[maxn];
    27     memset(vis,0,sizeof(vis));
    28     queue<int>q;
    29     q.push(s);
    30     vis[s]=1;
    31     d[s]=0;
    32     while(!q.empty()){
    33         int u=q.front();q.pop();vis[u]=0;
    34         for(int i=head[u];i;i=Next[i]){
    35             int v=to[i];
    36             if(d[v]>d[u]+val[i]){
    37                 d[v]=d[u]+val[i];
    38                 if(!vis[v]){
    39                     vis[v]=1;
    40                     q.push(v);
    41                 }
    42             }
    43         }
    44     }
    45     return d[1];
    46 }
    47 int main(){
    48     sz=0;
    49     memset(head,0,sizeof(head));
    50     scanf("%d%d",&m,&n);
    51     int a,b;LL c;
    52     for(int i=1;i<=m;i++){
    53         scanf("%d %d%lld",&a,&b,&c);
    54       //  cout<<a<<" "<<b<<" "<<c<<endl;
    55         add_edge(a,b,c);
    56         add_edge(b,a,c);
    57     }
    58     cout<<spfa(n);
    59 return 0;
    60 }
    View Code

    D-海底捞 POJ2236

    卢老师一句话点醒梦中人,直接并查集就可以~

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstring>
     5 using namespace std;
     6 const int maxn=1000+10;
     7 int n,d;
     8 int a,b;
     9 char c;
    10 int p[maxn],vis[maxn];
    11 struct Node{
    12     int x,y;
    13 }node[maxn];
    14 int find(int x){
    15     return p[x]==x?x:p[x]=find(p[x]);
    16 }
    17 bool dist(Node A,Node B){
    18     if((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)<=d*d)
    19         return true;
    20     return false;
    21 }
    22 int main(){
    23     scanf("%d%d",&n,&d);
    24     for(int i=1;i<=n;i++){
    25         scanf("%d%d",&node[i].x,&node[i].y);
    26     }
    27     for(int i=0;i<=n;i++)p[i]=i;
    28     while(scanf(" %c",&c)!=EOF){
    29         if(c=='O'){
    30             scanf("%d",&a);
    31             vis[a]=1;
    32             for(int i=1;i<=n;i++){
    33                 if(vis[i]&&i!=a&&dist(node[a],node[i])){
    34                    // cout<<a<<"-->"<<i<<endl;
    35                     int x=find(a),y=find(i);
    36                     if(x!=y)p[x]=y;
    37                 }
    38             }
    39         }
    40         if(c=='S'){
    41             scanf("%d%d",&a,&b);
    42             int x=find(a),y=find(b);
    43             //cout<<":"<<x<<y<<endl;
    44             if(x==y){
    45                 printf("SUCCESS
    ");
    46             }else{
    47                 printf("FAIL
    ");
    48             }
    49         }
    50     }
    51     return 0;
    52 }
    View Code

    E-黄焖鸡 uva10054

    这个题以前做过,欧拉回路,注意打印的时候逆序输出

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <queue>
     6 
     7 using namespace std;
     8 const int maxn=1000+20;
     9 
    10 int T;
    11 int G[maxn][maxn];
    12 int n;
    13 int deg[maxn];
    14 int a,b;
    15 int M;
    16 int p[maxn];
    17 int find(int x){
    18     return p[x]==x?x:find(p[x]);
    19 }
    20 void dfs(int u){
    21     for(int i=1;i<=M;i++){
    22         if(G[u][i]){
    23             G[u][i]--;
    24             G[i][u]--;
    25             dfs(i);
    26             cout<<i<<" "<<u<<endl;
    27         }
    28     }
    29     return;
    30 }
    31 int main(){
    32     scanf("%d",&T);
    33     for(int t=1;t<=T;t++){
    34         if(t!=1)cout<<""<<endl;
    35         memset(G,0,sizeof(G));
    36         memset(deg,0,sizeof(deg));
    37         printf("Case #%d
    ",t);
    38         M=-1;
    39         scanf("%d",&n);
    40         for(int i=1;i<=55;i++)p[i]=i;
    41         for(int i=1;i<=n;i++){
    42             scanf("%d%d",&a,&b);
    43             M=max(M,max(a,b));
    44             G[a][b]++;
    45             G[b][a]++;
    46             deg[a]++;
    47             deg[b]++;
    48             int x=find(a),y=find(b);
    49             if(x!=y)p[x]=y;
    50 
    51         }
    52         bool judge=1;
    53         for(int i=1;i<=M;i++){
    54             if(deg[i]){
    55                 if(find(i)!=find(M)||deg[i]%2){
    56                     judge=0;
    57                     break;
    58                 }
    59             }
    60         }
    61         if(!judge){
    62             cout<<"some beads may be lost"<<endl;
    63         }else{
    64         for(int i=1;i<=M;i++)
    65             dfs(i);
    66         }
    67 
    68     }
    69 return 0;
    70 }
    View Code

    F- 减肥成功指日可待 hdu2141

    用set或者二分。但是set再G++下会MLE必须要选择C++才能AC,雾···

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <set>
     6 #include <vector>
     7 using namespace std;
     8 const int maxn=500+10;
     9 typedef long long LL;
    10 int A,B,C,s,x;
    11 LL a[maxn],b[maxn],c[maxn];
    12 int kase;
    13 int main(){
    14     while(scanf("%d%d%d",&A,&B,&C)!=EOF){
    15     kase++;
    16     set<LL>S;
    17     printf("Case %d:
    ",kase);
    18     for(int i=1;i<=A;i++){
    19         scanf("%lld",&a[i]);
    20     }
    21     for(int i=1;i<=B;i++){
    22         scanf("%lld",&b[i]);
    23     }
    24     for(int i=1;i<=C;i++){
    25         scanf("%lld",&c[i]);
    26     }
    27     for(int i=1;i<=A;i++){
    28         for(int j=1;j<=B;j++){
    29             //for(int l=1;l<=C;l++){
    30                 LL X=a[i]+b[j];
    31                 if(!S.count(X))
    32                     S.insert(X);
    33            // }
    34         }
    35     }
    36     scanf("%d",&s);
    37     LL x;
    38     for(int i=1;i<=s;i++){
    39         scanf("%lld",&x);
    40         bool ok=0;
    41         for(int i=1;i<=C;i++){
    42             LL pos=x-c[i];
    43             //if(pos<0)continue;
    44             if(S.count(pos)){
    45                 ok=1;
    46                 break;
    47             }
    48         }
    49         //if(S.count(x))cout<<"YES"<<endl;
    50         if(ok)cout<<"YES"<<endl;
    51         else
    52             cout<<"NO"<<endl;
    53     }
    54     }
    55 return 0;
    56 }
    View Code
  • 相关阅读:
    Educational Codeforces Round 83 --- F. AND Segments
    Educational Codeforces Round 83 --- G. Autocompletion
    SEERC 2019 A.Max or Min
    2019-2020 ICPC Southwestern European Regional Programming Contest(Gym 102501)
    Educational Codeforces Round 78 --- F. Cards
    今天我学习了一门全新的语言
    codeforces 1323D 题解(数学)
    Educational Codeforces Round 80 (Div. 2) 题解 1288A 1288B 1288C 1288D 1288E
    Educational Codeforces Round 81 (Div. 2) 题解 1295A 1295B 1295C 1295D 1295E 1295F
    Codeforces Round #617 (Div. 3) 题解 1296C 1296D 1296E 1296F
  • 原文地址:https://www.cnblogs.com/LQLlulu/p/8810035.html
Copyright © 2011-2022 走看看