問題一:
p5461 赦免戰俘
題目走這
錯誤**:
分析了幾個小時壓根不會,想從右下角開始遞迴但是不知道怎麼給左上角清0,然後又想從左上角矩陣的右下角開始清零,但還是不知道如何操作(本質就是不會遞迴。
看了大佬的正確**後,自己仿造寫了乙個
#include
#include
#include
#include
#include
#include
using
namespace std;
int a[
1050][
1050];
//新知識:memset不能賦值1
//只能0或-1
void
get0
(int n,
int x,
int y)
//遞迴的邊長,遞迴起始座標
for(
int i=x;i<=n/
2+x-
1;i++
)//左上角清零
}get0
(n/2
,x,n/
2+y)
;//再將剩餘正方形左上角清零
get0
(n/2
,n/2
+x,y)
;get0
(n/2
,n/2
+x,n/
2+y);}
intmain()
//cout<}
get0
(len,1,
1);//遞迴思路,把左上角清零,再遞迴其他正方形,從左上角開始
//邊界條件是邊長=2
for(
int i=
1;i<=len;i++)
cout<}}
這個方法就是按照題目意思遞迴,先將左上角清零,再對剩下的三個矩陣的左上角清零,然後不斷往復
這裡有幾個重要的知識點
memset只能用來清零或者全部賦值-1,因為它是乙個位元組乙個位元組的賦值,而int型別佔了四個位元組,四個1在int型別裡壓根不是1,但0和-1是特殊情況
遞迴是要找到中止情況,這裡的中止情況是正方形邊長為1就停止左上角,再找到遞迴的操作
但這裡也能通過上面乙個數字和右上角的數字異或得到規律,這也是利用遞推求解吧
問題2:
p2415 集合求和題目
錯誤**:
#include
#include
#include
using
namespace std;
intf
(int a,
int b)
vector<
int> v;
intmain()
int sum=0;
while
(v.size()
>1)
for(vector<
int>
::iterator it = v.
begin()
;it!=v.
end(
);it++
)}
問題分析:
我真的太菜了,想法是先求兩個數的子集的和,與另乙個數求子集的和,但這樣會漏算數字,所以是錯誤的,看了大佬**發現有規律可循
正確**
include
#include
#include
#include
#include
#include
using
namespace std;
vector<
long
long
> v;
//注意long long
intmain()
long
long sum =
(long
long
)accumulate
(v.begin()
,v.end()
,0);
long
long counts =
pow(
2,v.
size()
-1);
printf
("%ld"
,sum*counts)
;}
規律是楊輝三角每層的和*集合個數即為子集和
accumulate返回的是int的和,所以需要強制型別轉換
注意資料範圍,int型別會超出範圍
洛谷入門1(順序結構)
p5704 深基2.例6 字母轉換 p5705 深基2.例7 數字反轉 p5706 深基2.例8 再分肥宅水 p1425 小魚的游泳時間 p5708 深基2.習2 三角形面積 p2181 對角線 題解 多行字串寫法 includeint main include int main void prin...
入門1 順序結構 洛谷 總結
問題1 p5704 深基2.例6 字母轉換 題目描述 輸入乙個小寫字母,輸出其對應的大寫字母。例如輸入 q 回車 時,會輸出 q。輸入格式 無輸出格式 無輸入輸出樣例 輸入 q輸出 q include include using namespace std intmain 很簡單的題目,但我基礎過於...
stat函式與結構體
stat 取得檔案狀態 相關函式 fstat,lstat,chmod,chown,readlink,utime 表頭檔案 include include 定義函式 int stat const char file name,struct stat buf 函式說明 stat 用來將引數file na...