給出思路就好了,謝謝!
uj5u.com熱心網友回復:
把區域行列轉成網格行列,即2x2的區域就是3x3的網格,然后選則網格中的點,它的上下左右,左上左下,右上右下表示它能訪問到的區域(比如例子中的中心點,四面八方都能訪問,訪問區域最多),遍歷整個網格,找到網格中的點能訪問到的區域最多,且點數最少就可以了。uj5u.com熱心網友回復:
這個問題就是nxm矩形用2x2矩形覆寫,最少要多少片uj5u.com熱心網友回復:
2樓正解,附上自己的碼供參考
#include<iostream>
using namespace std;
void fun(int n,int m)
{
int a1, a2=0, a3=0;
a1 = (n / 2) * (m / 2);
if (n % 2)
a2 = (m + 1) / 2;
if (m % 2)
a3 = (n + 1) / 2;
if (a2 && a3)
a2--;
cout << a1 + a2 + a3 << endl;
}
int main()
{
int n, m;
cin >> n >> m;
fun(n, m);
system("pause");
return 0;
}
uj5u.com熱心網友回復:
int main()
{
int n, m;
cin >> n >> m;
if (n % 2)
n++;
if (m % 2)
m++;
cout << (n / 2) * (m / 2) << endl;
system("pause");
return 0;
}
uj5u.com熱心網友回復:
這個問題就是nxm矩形用2x2矩形覆寫,最少要多少片
2樓正解,附上自己的碼供參考
#include<iostream>
using namespace std;
void fun(int n,int m)
{
int a1, a2=0, a3=0;
a1 = (n / 2) * (m / 2);
if (n % 2)
a2 = (m + 1) / 2;
if (m % 2)
a3 = (n + 1) / 2;
if (a2 && a3)
a2--;
cout << a1 + a2 + a3 << endl;
}
int main()
{
int n, m;
cin >> n >> m;
fun(n, m);
system("pause");
return 0;
}
int main()
{
int n, m;
cin >> n >> m;
if (n % 2)
n++;
if (m % 2)
m++;
cout << (n / 2) * (m / 2) << endl;
system("pause");
return 0;
}
只用這個main函式就可以了嗎?
uj5u.com熱心網友回復:
這個問題就是nxm矩形用2x2矩形覆寫,最少要多少片
2樓正解,附上自己的碼供參考
#include<iostream>
using namespace std;
void fun(int n,int m)
{
int a1, a2=0, a3=0;
a1 = (n / 2) * (m / 2);
if (n % 2)
a2 = (m + 1) / 2;
if (m % 2)
a3 = (n + 1) / 2;
if (a2 && a3)
a2--;
cout << a1 + a2 + a3 << endl;
}
int main()
{
int n, m;
cin >> n >> m;
fun(n, m);
system("pause");
return 0;
}
int main()
{
int n, m;
cin >> n >> m;
if (n % 2)
n++;
if (m % 2)
m++;
cout << (n / 2) * (m / 2) << endl;
system("pause");
return 0;
}
只用這個main函式就可以了嗎?
是的,上面那個是我腦子沒轉過來,寫的很復雜,二樓大佬的思路真的強,只用這個main函式就行了,
相當于如果原區域的行數,列數不是偶數,就把它加1補成偶數,然后用2x2矩形填充就行
uj5u.com熱心網友回復:
這個問題就是nxm矩形用2x2矩形覆寫,最少要多少片
2樓正解,附上自己的碼供參考
#include<iostream>
using namespace std;
void fun(int n,int m)
{
int a1, a2=0, a3=0;
a1 = (n / 2) * (m / 2);
if (n % 2)
a2 = (m + 1) / 2;
if (m % 2)
a3 = (n + 1) / 2;
if (a2 && a3)
a2--;
cout << a1 + a2 + a3 << endl;
}
int main()
{
int n, m;
cin >> n >> m;
fun(n, m);
system("pause");
return 0;
}
int main()
{
int n, m;
cin >> n >> m;
if (n % 2)
n++;
if (m % 2)
m++;
cout << (n / 2) * (m / 2) << endl;
system("pause");
return 0;
}
只用這個main函式就可以了嗎?
是的,上面那個是我腦子沒轉過來,寫的很復雜,二樓大佬的思路真的強,只用這個main函式就行了,
相當于如果原區域的行數,列數不是偶數,就把它加1補成偶數,然后用2x2矩形填充就行
我昨天也是這么寫的 不知為啥case0%....懷疑他出故障了
uj5u.com熱心網友回復:
不知道,反正我沒看出錯誤
uj5u.com熱心網友回復:
不知道,反正我沒看出錯誤
恩恩,我也覺得挺對,謝謝了(^~^)
uj5u.com熱心網友回復:
int func(int m,int n)
{
return (m+1)*(n+1)/4;
}
uj5u.com熱心網友回復:
int func(int m,int n)
{
return (m+1)*(n+1)/4;
}
寫錯了,改一下
int func(int m,int n)
{
return ((m+1)/2)*((n+1)/2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104452.html
標籤:C++ 語言
上一篇:求解這個公式的證明程序
