zoukankan      html  css  js  c++  java
  • Codeforces_723

    A.取中间那个点即可。

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[3];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> a[0] >> a[1] >> a[2];
        sort(a,a+3);
        cout << a[2]-a[0] << endl;
        return 0;
     }
    View Code

    B.模拟,注意判断是否在括号内。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    string s;
    
    int main()
    {
        cin >> n;
        getchar();
        getline(cin,s);
        int maxx = 0,cnt = 0,now = 0,flag = 0;
        for(int i = 0;i < n;i++)
        {
            if(s[i] == '(')
            {
                flag = 1;
                now = 0;
            }
            else if(s[i] == ')')
            {
                flag = 0;
                if(now) cnt++;
                now = 0;
            }
            else if(s[i] == '_')
            {
                if(flag == 1 && now)    cnt++;
                now = 0;
            }
            else
            {
                now++;
                if(flag == 0)   maxx = max(maxx,now);
            }
        }
        cout << maxx << " " << cnt << endl;
        return 0;
     }
    View Code

    C.先算出ans,再把个数不到ans的数填满。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m,a[2005],b[2005] = {0};
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> n >> m;
        for(int i = 1;i <= n;i++)
        {
            cin >> a[i];
            if(a[i] <= m)   b[a[i]]++;
        }
        int ans = n/m,cnt = 0,now = 1;
        for(int i = 1;i <= n;i++)
        {
            if(a[i] <= m && b[a[i]] <= ans) continue;
            while(b[now] >= ans)    now++;
            if(now == m+1)  break;
            if(a[i] <= m)   b[a[i]]--;
            a[i] = now;
            b[now]++;
            cnt++;
        }
        cout << ans << " " << cnt << endl;
        for(int i = 1;i <= n;i++)   cout << a[i] << " ";
        cout << endl;
        return 0;
     }
    View Code

    D.dfs找出每一个湖泊,按面积排序,把cnt-k个小的填满。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m,k,vis[55][55] = {0},ok,sum;
    int dx[4] = {0,0,-1,1};
    int dy[4] = {-1,1,0,0};
    string s[55];
    struct xxx
    {
        int x,y,sum;
        friend bool operator <(xxx a,xxx b)
        {
            return a.sum < b.sum;
        }
    }a[2505];
    
    void dfs1(int x,int y)
    {
        if(vis[x][y])   return;
        vis[x][y] = 1;
        sum++;
        for(int i = 0;i < 4;i++)
        {
            int xx = x+dx[i],yy = y+dy[i];
            if(xx < 1 || xx > n || yy < 1 || yy > m)
            {
                ok = 0;
                continue;
            }
            if(s[xx][yy] == '*')    continue;
            dfs1(xx,yy);
        }
    }
    
    void dfs2(int x,int y)
    {
        s[x][y] = '*';
        for(int i = 0;i < 4;i++)
        {
            int xx = x+dx[i],yy = y+dy[i];
            if(xx < 1 || xx > n || yy < 1 || yy > m || s[xx][yy] == '*')    continue;
            dfs2(xx,yy);
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> n >> m >> k;
        int cnt = 0;
        for(int i = 1;i <= n;i++)
        {
            cin >> s[i];
            s[i] = " "+s[i];
        }
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= m;j++)
            {
                if(s[i][j] == '*' || vis[i][j])   continue;
                ok = 1;
                sum = 0;
                dfs1(i,j);
                if(ok)
                {
                    a[++cnt].x = i;
                    a[cnt].y = j;
                    a[cnt].sum = sum;
                }
            }
        }
        sort(a+1,a+1+cnt);
        cnt -= k;
        int ans = 0;
        for(int i = 1;i <= cnt;i++)
        {
            ans += a[i].sum;
            dfs2(a[i].x,a[i].y);
        }
        cout << ans << endl;
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= m;j++)   cout << s[i][j];
            cout << endl;
        }
        return 0;
     }
    View Code

     E.因为是无向图,所以有偶数个度为奇数的点,我们把他们与第n+1个点相连,则所有点的度都是偶数个,存在欧拉回路,输出这个回路的路径(不包括第n+1个点),符合要求。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m,d[205];
    set<int> s[205];
    
    void dfs(int now)
    {
        while(s[now].size())
        {
            int t = *s[now].begin();
            s[now].erase(t);
            s[t].erase(now);
            if(now != n+1 && t != n+1)  cout << now << " " << t << endl;
            dfs(t);
        }
    }
    
    int main()
    {
        int T;
        cin >> T;
        while(T--)
        {
            cin >> n >> m;
            memset(d,0,sizeof(d));
            while(m--)
            {
                int x,y;
                cin >> x >> y;
                s[x].insert(y);
                s[y].insert(x);
                d[x]++;
                d[y]++;
            }
            int ans = 0;
            for(int i = 1;i <= n;i++)
            {
                if(d[i]%2)
                {
                    s[i].insert(n+1);
                    s[n+1].insert(i);
                }
                else    ans++;
            }
            cout << ans << endl;
            for(int i = 1;i <= n;i++)   dfs(i);
        }
        return 0;
    }
    View Code

    F.原图无向连通,可以把原图的除s,t外的点分为三类团。

    ①与s相连。②与t相连。③与s,t相连。

    若不存在第③类团,则把相应团与s或t相连,最后把s与t相连。

    若存在第③类团,则s与t不必相连,可以通过第③类团来把他们相连,这样其中某个点的度就少了1,为最优情况。

    #include<bits/stdc++.h>
    using namespace std;
    
    struct xx
    {
        int x,y;
        xx(int a,int b):x(a),y(b){};
    };
    int n,m,x,y,dx,dy,cnt = 0,a[200005] = {0},b[200005] = {0},vis[200005] = {0};
    vector<int> v[200005];
    vector<xx> ans;
    
    void dfs(int now)
    {
        vis[now] = 1;
        for(int i = 0;i < v[now].size();i++)
        {
            int t = v[now][i];
            if(t == x)  a[cnt] = now;
            else if(t == y) b[cnt] = now;
            else if(!vis[t])
            {
                ans.push_back(xx(now,t));
                dfs(t);
            }
        }
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> n >> m;
        for(int i = 1;i <= m;i++)
        {
            cin >> x >> y;
            v[x].push_back(y);
            v[y].push_back(x);
        }
        cin >> x >> y >> dx >> dy;
        for(int i = 1;i <= n;i++)
        {
            if(vis[i] || i == x || i == y)  continue;
            ++cnt;
            dfs(i);
        }
        int z = 0;
        for(int i = 1;i <= cnt;i++)
        {
            if(a[i] == 0)
            {
                ans.push_back(xx(b[i],y));
                dy--;
            }
            else if(b[i] == 0)
            {
                ans.push_back(xx(a[i],x));
                dx--;
            }
            else z++;
        }
        if(dx < 1 || dy < 1 || dx+dy-1 < z)
        {
            cout << "No" << endl;
            return 0;
        }
        if(z == 0)  ans.push_back(xx(x,y));
        else
        {
            int flag = 0;
            for(int i = 1;i <= cnt;i++)
            {
                if(a[i] == 0 || b[i] == 0)  continue;
                if(flag)
                {
                    if(dx)
                    {
                        ans.push_back(xx(a[i],x));
                        dx--;
                    }
                    else
                    {
                        ans.push_back(xx(b[i],y));
                        dy--;
                    }
                }
                else
                {
                    flag = 1;
                    ans.push_back(xx(a[i],x));
                    dx--;
                    ans.push_back(xx(b[i],y));
                    dy--;
                }
            }
        }
        cout << "Yes" << endl;
        for(int i = 0;i < ans.size();i++) cout << ans[i].x << " " << ans[i].y << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    linux 命令学习
    反编译学习一:Mac下使用dex2jar
    如何删除你的MacOS上的旧版本Java
    使用screen 遇到的多窗口
    dede简略标题调用标签
    JQ实现导航滚动到指定位置变色,并置顶
    JQ实现当前页面导航加效果(栏目页有效)
    wordpress首页调用指定分类下的文章
    作业1#python用列表实现多用户登录,并有三次机会
    python数据类型之间的转换
  • 原文地址:https://www.cnblogs.com/zhurb/p/6746195.html
Copyright © 2011-2022 走看看