130720CF

A - Cakeminator

就是直接找能通到底的直線,然後標記一下就計數。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    int n,m,i,j,v[11][11],f,w=0;
    char a[11][11];
    cin>>n>>m;
    for(i=0; i<n; ++i)
    {
        for(j=0; j<m; ++j)
        {
            cin>>a[i][j];
        }
    }
    memset(v,0,sizeof(v));
    for(i=0; i<n; ++i)
    {
        f=0;
        for(j=0; j<m; ++j)
        {
            if(a[i][j]=='S')
            {
                f=1;
            }
        }
        if(f==0)
        {
            //cout<<1<<endl;
            for(j=0; j<m; ++j)//標記
            {
                v[i][j]=1;
            }
        }
    }
    for(j=0; j<m; ++j)
    {
        f=0;
        for(i=0; i<n; ++i)
        {
            if(a[i][j]=='S')
            {
                f=1;
            }
        }
        if(f==0)
        {

            for(i=0; i<n; ++i)
            {
                v[i][j]=1;
            }
        }
    }
    for(i=0; i<n; ++i)
    {
        for(j=0; j<m; ++j)
        {
            if(v[i][j]==1)//計數
            {
                w++;
            }
        }
    }
    cout<<w<<endl;
    return 0;
}

B - Road Construction

由於0<=m<n/2,所以必然存在至少一個點可以和所有點連接。special judge直接YY。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int map[1001];
int main()
{
    int n,m,i,j,k,f;
    int x,y;
    cin>>n>>m;
    cout<<n-1<<endl;
    for(i=0; i<m; ++i)
    {
        cin>>x>>y;
        map[x]=map[y]=1;
    }
    for(i=1;i<=n;++i)
    {
        if(map[i]==0)//找特殊點
        {
            f=i;
            break;
        }
    }
    for(i=1;i<=n;++i)
    {
        if(i==f)
        {
            continue;
        }
        cout<<i<<' '<<f<<endl;//直接連接所有
    }
    return 0;
}

C - Purification

看起來是很深的算法搜索題,其實它所求的最小值就是n。然後只要判斷有1到多行和1到多列全是‘E’,這兩個條件必須同時滿足才輸出-1,其它情況只要遍歷每行,輸出第一個空點座標就行。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
char Map[1111][1111] ;
int r[1111] ;
int l[1111] ;
int main()
{

    int n,i,j;
    scanf("%d",&n);
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++ )
        {
            scanf("%c",&Map[i][j]);
            if(Map[i][j] == 'E')
            {
                r[i] ++ ;
                l[j] ++ ;
            }
        }
    }
    int f= 0 ;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            if(r[i]==n&&l[j]==n)
            {
                f=1;
            }
        }
    }
    if(flag)
    {
        printf("-1\n");
    }
    else
    {
        int num1=0;
        int num2=0 ;
        for(i=1; i<=n; i++)
        {
            if(r[i]!=n)
            {
                num1++;
            }
            if(l[i]!=n)
            {
                num2 ++ ;
            }
        }
        if(num1==n)
        {
            for(i=1; i<=n; i++)
            {
                int ff=0;
                for (j=1; j<=n; j++)
                {
                    if(Map[i][j] == '.')
                    {
                        cout<<i<<" "<<j<<endl;
                        ff = 1 ;
                    }
                    if(ff)
                    {
                        break;
                    }
                }
            }
        }
        else if(num2 == n)
        {
            for (i=1; i<=n; i++)
            {
                int ff=0;
                for (j=1; j<=n; j++)
                {
                    if(Map[j][i]=='.')
                    {
                        cout<<j<<" "<<i<<endl;
                        ff=1;
                    }
                    if(ff)
                    {
                        break;
                    }
                }
            }
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章