查看: 2060|回復: 1
打印 上一主題 下一主題

[ZJ] a886 - A. 挑食的大胃王

[複製鏈接]
  • TA的每日心情
    鬱悶
    2015-5-15 22:38
  • 簽到天數: 33 天

    [LV.5]常住居民I

    75

    主題

    302

    帖子

    766

    積分

    版主

    TFcis - 105 附設監工官

    Rank: 7Rank: 7Rank: 7

    積分
    766

    台南一中資訊社程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-5-4 17:27:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x

    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[i][j]);
                    
                    for(int i = 0 ; i < x ; i++)
                            for(int j = 0 ; j < y ; j++)
                                    if(list[i][j] == 1)
                                    {
                                            eat[i][j] = true;
                                            if(i > 0)
                                                    eat[i-1][j] = true;
                                            if(j > 0)
                                                    eat[i][j-1] = true;
                                            if(i < x-1)
                                                    eat[i+1][j] = true;
                                            if(j < y-1)
                                                    eat[i][j+1] = true;
                                    }
            
                    
                    int cost = 0;
                    for(int i = 0 ; i < x ; i++)
                            for(int j = 0 ; j < y ; j++)
                                    if(eat[i][j])
                                            cost++;
                    
                    printf("%d\n",x*y*z-cost*3);
            }
            
            return 0;
    }
    


    評分

    參與人數 1金幣 +1 收起 理由
    Sylveon + 1 ??

    查看全部評分

    <這是個人簽名欄位>
    回復

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    推薦
    發表於 2014-8-25 17:53:36 | 只看該作者
    判斷上下左右,可以透過陣列定義變量的方式,用迴圈輕鬆解決。

    [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[i][j];
     
    		for(int i=1;i<=N;++i)
    		{
    			for(int j=1;j<=M;++j)
    			{
    				if(map[i][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;
    	}
    }
    回復 支持 1 反對 0

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表