竹園論壇

標題: a886 - A. 挑食的大胃王 [打印本頁]

作者: jd3    時間: 2014-5-4 17:27
標題: a886 - A. 挑食的大胃王

NPSC題


解法:暴力

注意事項(我是為了注意事項才發的~所以題目敘述省略):挖掉白飯時並非整個挖掉,只挖三層而以



CODE:
[C++] 純文本查看 復制代碼
#include<iostream>
#include<cstdio>
#include<cstring>


using namespace std;


int t;
int x,y,z;
int list[100][100];
bool eat[100][100];


int main()
{
        scanf("%d",&t);
        while(t--)
        {
                //init
                memset(eat,0,sizeof(eat));
               
                //inputs
                scanf("%d%d%d", &x, &y,&z);
               
                for(int i = 0 ; i < x ; i++)
                        for(int j = 0 ; j < y ; j++)
                                scanf("%d",&list[j]);
               
                for(int i = 0 ; i < x ; i++)
                        for(int j = 0 ; j < y ; j++)
                                if(list[j] == 1)
                                {
                                        eat[j] = true;
                                        if(i > 0)
                                                eat[i-1][j] = true;
                                        if(j > 0)
                                                eat[j-1] = true;
                                        if(i < x-1)
                                                eat[i+1][j] = true;
                                        if(j < y-1)
                                                eat[j+1] = true;
                                }
        
               
                int cost = 0;
                for(int i = 0 ; i < x ; i++)
                        for(int j = 0 ; j < y ; j++)
                                if(eat[j])
                                        cost++;
               
                printf("%d\n",x*y*z-cost*3);
        }
        
        return 0;
}



作者: Sylveon    時間: 2014-8-25 17:53
判斷上下左右,可以透過陣列定義變量的方式,用迴圈輕鬆解決。

[C++] 純文本查看 復制代碼
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int map[52][52];
int dx[4]={0,0,1,-1};
int dy[4]={-1,1,0,0};
int main()
{
        int T;
        int N,M,K,ans;
        cin>>T;
        while(T--)
        {
                memset(map,0,sizeof(map));
                ans=0;
                 
                cin>>N>>M>>K;
                for(int i=1;i<=N;++i)
                        for(int j=1;j<=M;++j)
                                cin>>map[j];

                for(int i=1;i<=N;++i)
                {
                        for(int j=1;j<=M;++j)
                        {
                                if(map[j]==1)ans++;
                                else
                                {
                                        bool f=false;
                                        for(int k=0;k<4;++k)
                                                if(map[i+dx[k]][j+dy[k]]==1)
                                                        f=true;
                                        if(f)ans++;
                                }
                                 
                        }
                        cout<<endl;
                }
                cout<<N*M*K-ans*min(ans,3)<<endl;
        }
}





歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2