现在的位置: 首页 > 综合 > 正文

Codeforces Round #222 (Div. 2)

2018年04月03日 ⁄ 综合 ⁄ 共 3020字 ⁄ 字号 评论关闭

500pt:

链接:http://codeforces.com/contest/378/problem/A

分析:太水了。。。

代码:

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;

 int a,b;
int main()
{
    while(cin>>a>>b)
    {
        int r1 = 0;
        int r2 = 0;
        int r3 = 0;
        for(int i=1;i<=6;i++)
        {
            if(abs(i-a)<abs(i-b))
                r1++;
            else if(abs(i-a)==abs(i-b))
                r2++;
            else
                r3++;
        }
        cout<<r1<<" "<<r2<<" "<<r3<<endl;
    }
    return 0;
}

1000pt:

链接:http://codeforces.com/contest/378/problem/B

分析:其实不用枚举k的值,只要k=0或者n/2两者就行,分别代表了2种极端情况,覆盖了所有可能的取值

代码:

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
const int N=100010;
int arra[N];
int arrb[N];
bool proa[N];
bool prob[N];
int n;
int main()
{
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            cin>>arra[i]>>arrb[i];
        }
        memset(proa,0,sizeof(proa));
        memset(prob,0,sizeof(prob));
        int k = n/2;
        vector<int > v;
        v.push_back(0);
        v.push_back(k);
        for(int i=0;i<v.size();i++)
        {
            for(int j=0;j<v[i];j++)
            {
                proa[j]=true;
                prob[j]=true;
            }
            int aStart = i;
            int bStart = i;
            int temp = n-2*v[i];
            while(temp--)
            {
                if(arra[aStart]<=arrb[bStart])
                {
                    proa[aStart]=true;
                    aStart++;
                }
                else
                {
                    prob[bStart]=true;
                    bStart++;
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            cout<<(proa[i]==true)?"1":"0";
        }
        cout<<endl;
        for(int i=0;i<n;i++)
        {
            cout<<(prob[i]==true)?"1":"0";
        }
        cout<<endl;
    }
    return 0;
}

1500pt:

链接:http://codeforces.com/contest/378/problem/C

分析:其实很简单,dfs或者bfs找到连通的对应个数 ‘.' 就行

代码:

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
const int N=550;
char maps[N][N];
bool changed[N][N];
bool visited[N][N];
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int n,m,k;
struct node
{
    node(int _x,int _y){x=_x;y=_y;}
    int x;
    int y;
};
int main()
{
    while(cin>>n>>m>>k)
    {
        memset(changed,0,sizeof(changed));
        memset(visited,0,sizeof(visited));
        int curx= 0;
        int cury = 0;
        int cnt = 0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>maps[i][j];
                if(maps[i][j]=='.')
                {
                    curx = i;
                    cury=j;
                    cnt++;
                }
            }
        }
        int target = cnt-k;
        queue<node> q;
        q.push(node(curx,cury));
        while(target>0)
        {
            node d = q.front();
            q.pop();
            changed[d.x][d.y]=true;
            visited[d.x][d.y]=true;
            target--;
            if(target<=0)
                break;
            for(int i=0;i<4;i++)
            {
                int nextx = d.x+dir[i][0];
                int nexty = d.y+dir[i][1];
                if(nextx>=0&&nextx<n&&nexty>=0&&nexty<m&&!visited[nextx][nexty]&&maps[nextx][nexty]=='.')
                {
                    q.push(node(nextx,nexty));
                    visited[nextx][nexty]=true;
                }
            }

        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(maps[i][j]!='.')
                    cout<<maps[i][j];
                else if(changed[i][j]==false)
                    cout<<'X';
                else
                    cout<<maps[i][j];
            }
            cout<<endl;
        }
    }
    return 0;
}

然后就12:30了。。。。果断睡觉。。。

抱歉!评论已关闭.