zoukankan      html  css  js  c++  java
  • Codeforces Round #292 (Div. 2)

    换了新ID,以前的ID 运气不好

    D:题目隐藏的很深啊!如果说拓扑排序肯定会写,模型转换。

    计算每个点'.'的度,度:周围4个点为'.'的数目。

    然后BFS 枚举度为1的点 ,一遍构造,链接的点就度--;

    再压入队列中

    当枚举的点数不够'.'数目时,答案就是'unique';

    题目没要你输出any 这本身有蹊跷。

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    #include<string>
    using namespace std;
    #define N 2222
    #define pii pair<int,int>
    #define mp make_pair
    
    int du[N][N];
    char f[2][5]={"^<v>","v>^<"};
    
    int dx[4]={1,0,-1,0};
    int dy[4]={0,1,0,-1};
    char s[N][N];
    
    int cal(int i,int j)
    {
        int ans=0;
        ans+=(s[i][j-1]=='.');
        ans+=(s[i][j+1]=='.');
        ans+=(s[i+1][j]=='.');
        ans+=(s[i-1][j]=='.');
        return ans;
    }
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        for (int i=1;i<=n;i++)
        scanf("%s",s[i]+1);
        queue<pii> Q;
        int cnt=0;
        for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
        if (s[i][j]=='.')
        {
            cnt++;
            du[i][j]=cal(i,j);
            if (du[i][j]==1) Q.push(mp(i,j));
        }
    
        if (cnt&1)
        {
            puts("Not unique");
            return 0;
        }
    
        while (!Q.empty())
        {
            pii cur=Q.front();
            Q.pop();
            int x=cur.first;
            int y=cur.second;
            if (s[x][y]=='.')
            {
                int i;
                int xx,yy;
                for (i=0;i<4;i++)
                {
                    xx=x+dx[i];
                    yy=y+dy[i];
                    if (s[xx][yy]=='.') break;
                }
                if (i==4)
                {
                     puts("Not unique");
                     return 0;
                }
    
                s[x][y]=f[0][i];
                s[xx][yy]=f[1][i];
                du[x][y]=du[xx][yy]=0;
                cnt-=2;
                for (int i=0;i<4;i++)
                {
                    int nx=xx+dx[i];
                    int ny=yy+dy[i];
                    if (s[nx][ny]=='.')
                    {
                        du[nx][ny]--;
                        if (du[nx][ny]==1) Q.push(mp(nx,ny));
                    }
                }
            }
        }
    
        if (cnt!=0) puts("Not unique");
        else for (int i=1;i<=n;i++)
            printf("%s
    ",s[i]+1);
    
        return 0;
    }

    C:一眼贪心题;

    做法就是拆数,比如8的话就拆成2*2*2;

    9的话是9!,也就是3*3*2^4;

    然后比如有一个7 那么6,5,4,3,2,1的数目依次-1;

      1 #include<stdio.h>
      2 #include<string>
      3 #include<iostream>
      4 #include<queue>
      5 #include<cmath>
      6 #include<string.h>
      7 #include <vector>
      8 #include<map>
      9 #include<stack>
     10 using namespace std;
     11 typedef long long ll;
     12 
     13 string s;
     14 int b[33333];
     15 int c[333333];
     16 
     17 int main()
     18 {
     19      int n;
     20      cin>>n;
     21      cin>>s;
     22      int p=0;
     23      while (s[p]=='0'&&p<s.size()) p++;
     24      for (p;p<n;p++)
     25      {
     26          if (s[p]=='9') {
     27                       b[3]+=2;
     28                       b[2]+=3;
     29          for (int i=7;i>=2;i--) b[i]++;
     30          }
     31          else if (s[p]=='8')
     32          {
     33              b[2]+=3;
     34              for (int i=7;i>=2;i--) b[i]++;
     35          }
     36 
     37          else if (s[p]=='7')
     38          {
     39              for (int i=7;i>=2;i--) b[i]++;
     40          }
     41          else if (s[p]=='6') for (int i=6;i>=2;i--) b[i]++;
     42          else if (s[p]=='5') for (int i=5;i>=2;i--) b[i]++;
     43          else if (s[p]=='4') for (int i=4;i>=2;i--) b[i]++;
     44          else if (s[p]=='3') for (int i=3;i>=2;i--) b[i]++;
     45          else if (s[p]=='2') b[2]++;
     46      }
     47 
     48      while (b[7])
     49      {
     50          c[7]++;
     51          b[7]--;
     52 
     53          for (int i=6;i>=2;i--)
     54          {
     55              //c[i]++;
     56              b[i]--;
     57          }
     58      }
     59      while (b[6])
     60      {
     61          b[6]--;
     62          b[2]++;
     63          b[3]++;
     64      }
     65 
     66      while (b[5])
     67      {
     68          c[5]++;
     69          b[5]--;
     70          for (int i=4;i>=2;i--)
     71          {
     72              //c[i]++;
     73              b[i]--;
     74          }
     75      }
     76 
     77      while (b[4])
     78      {
     79          b[4]--;
     80          b[2]+=2;
     81      }
     82 
     83     while (b[3])
     84      {
     85          c[3]++;
     86          b[3]--;
     87         // c[2]++;
     88          b[2]--;
     89      }
     90 
     91      while (b[2])
     92      {
     93          c[2]++;
     94          b[2]--;
     95 
     96      }
     97      for (int i=9;i>=2;i--)
     98      while (c[i])
     99      {
    100          cout<<i;
    101          c[i]--;
    102      }
    103      return 0;
    104 }

    B:无限暴力下就好了

     1 #include<stdio.h>
     2 #include<string>
     3 #include<iostream>
     4 #include<queue>
     5 #include<cmath>
     6 #include<string.h>
     7 #include <vector>
     8 #include<map>
     9 #include<stack>
    10 using namespace std;
    11 typedef long long ll;
    12 
    13 int a[123],b[123];
    14 int main()
    15 {
    16 
    17     int n,m;
    18     cin>>n>>m;
    19     int nn;
    20     int mm;
    21     cin>>nn;
    22     int x;
    23     for (int i=1;i<=nn;i++) cin>>x,a[x]=1;
    24     cin>>mm;
    25     for (int i=1;i<=mm;i++) cin>>x,b[x]=1;
    26 
    27     int ans=nn+mm;
    28     int t=0;
    29     while (t<3000000)
    30     {
    31         t++;
    32         if (ans==n+m)
    33         {
    34             cout<<"Yes";
    35             return 0;
    36         }
    37         if (!a[t%n]&&b[t%m])
    38         {
    39             ans++;
    40             a[t%n]=1;
    41         }
    42         else if (a[t%n]&&!b[t%m])
    43         {
    44             ans++;
    45             b[t%m]=1;
    46         }
    47     }
    48      cout<<"No";
    49      return 0;
    50 }

    20

  • 相关阅读:
    jqeuery $.ajax 与后台jsone交互
    SpringMVC3.2+JPA使用注解的方式环境搭建
    SpringMVC+JPA使用注入的方式环境搭建
    EasyUI_tree根据数据库数据生成树形结构JSON格式
    ACM竞赛高手比其他程序员水平高很多吗?
    hdu 1028 Ignatius and the Princess III(DP)
    9513 防空洞
    hdu 1398 Square Coins(简单dp)
    FZU 1608 Huge Mission(线段树)
    poj2528 Mayor's posters(线段树之成段更新)
  • 原文地址:https://www.cnblogs.com/forgot93/p/4296322.html
Copyright © 2011-2022 走看看