程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> BZOJ2241 [SDOI2011]打地鼠 題解&代碼

BZOJ2241 [SDOI2011]打地鼠 題解&代碼

編輯:關於C

題意:給你一個m*n的方格(初始每個位置都大於0),你可以選擇一個固定大小不可旋轉的方塊(例如大小為x*y),使每次這個方塊在方格上某個所有位置都非0的區域覆蓋一次時區域內每個位置的值減一,問覆蓋多少次後這個方格內部的值全部為0(因為有1*1的方塊,所以一定有解)
題解:看起來亂七八糟的,但其實就是個暴力搜索,內部測試的時候因為一些問題看錯了m和n,不然就1A了…

/**************************************************************
    Problem: 2241
    User: Rainbow6174
    Language: C++
    Result: Accepted
    Time:116 ms
    Memory:1680 kb
****************************************************************/

#include
#include
#include
using namespace std;
pair  q[10005];
int n,m,x,sum,ans,flag=1,tans,map[205][205];
int tot,tmap[205][205];
bool work(int tx,int ty)
{
    int val = 0,temp,flag;
    for(int i = 1; i <= m; i++)
        for(int j = 1; j <= n; j++)
        {
            tmap[i][j]=map[i][j];
            //cout< a,pair b)
{
    return (a.first)*(a.second)>(b.first)*(b.second);
}
void slove(void)
{
    for(int i = 1; i <= m; i++)
        for(int j = 1; j <= n; j++)
            q[tot++] = make_pair(i,j);
    sort(q,q+tot,cmp);
    for(int i = 0; i < tot; i++)
        if(sum%((q[i].first)*(q[i].second)) == 0)
        {
            tans = sum/((q[i].first)*(q[i].second));
            //cout<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved