邊喝酒邊寫的,有點亂抱歉QQ # [P1 特技表演](https://zerojudge.tw/ShowProblem?problemid=o076) ## 解析 整體題目要求的是尋找最長長度的遞減數列大小,只需要左右比較,累加求最大值即可。 ## 程式碼 ```cpp= #include <bits/stdc++.h> using namespace std; #define SIZE 105 int main() { int n; cin>>n; int a[SIZE]; for(int i=0;i<n;i++) cin>>a[i]; int sum=1,maxs=-1; for(int i=1;i<n;i++) { if(a[i-1]>a[i]) sum++; else sum=1; maxs=max(maxs,sum); } cout<<maxs; return 0; } ``` # [P2 電子畫布](https://zerojudge.tw/ShowProblem?problemid=o077) ## 解析 我的解法跟別人蠻不一樣的,我選擇以噴射的點為橫軸,砍半,分成上下兩半來做,不太直覺,我會附上按照題目所提的曼哈頓距離版本。 ## 程式碼 分上下半做法 ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int h,w,n; cin>>h>>w>>n; int a[105][105]; memset(a,0,sizeof(a)); while(n--) { int r,c,t,x; cin>>r>>c>>t>>x; for(int i=t;i>0;i--) { a[r+i][c]+=x; for(int j=1;j<=t-i;j++) { if(r+i>=0&&c+j>=0) a[r+i][c+j]+=x; if(r+i>=0&&c-j>=0) a[r+i][c-j]+=x; } } for(int i=0;i<=t;i++) { a[r-i][c]+=x; for(int j=1;j<=t-i;j++) { if(r-i>=0&&c+j>=0) a[r-i][c+j]+=x; if(r-i>=0&&c-j>=0) a[r-i][c-j]+=x; } } } for(int i=0;i<h;i++) { for(int j=0;j<w;j++) cout<<a[i][j]<<' '; cout<<endl; } } ``` 曼哈頓距離做法 ```cpp= #include <bits/stdc++.h> using namespace std; int main() { int h,w,n; cin>>h>>w>>n; int a[105][105]; memset(a,0,sizeof(a)); while(n--) { int r,c,t,x; cin>>r>>c>>t>>x; for(int i=0; i<h; i++){ for(int j=0; j<w; j++){ if(abs(i-r) + abs(j-c) <= t){ a[i][j] += x; } } } } for(int i=0;i<h;i++) { for(int j=0;j<w;j++) cout<<a[i][j]<<' '; cout<<endl; } } ``` # [o078. 3. 缺字問題](https://zerojudge.tw/ShowProblem?problemid=o078) ## 解析 按照他給的資料量下去分析時間複雜度,只需要直接枚舉所有組合後線性搜即可。 ## 程式碼 ```cpp= #include <bits/stdc++.h> using namespace std; string k; int n; vector<string> v; void p(string str) { if(str.size()>=n) { v.push_back(str); return; } for(int i=0;i<k.size();i++) p(str+k[i]); return; } int main() { string s; cin>>k>>n>>s; for(int i=0;i<k.size();i++) p(k.substr(i,1)); vector<string> vv; for(int i=0;i<s.size()-n+1;i++) vv.push_back(s.substr(i,n)); sort(v.begin(),v.end()); for(auto e:v) { if(find(vv.begin(),vv.end(),e)==vv.end()) { cout<<e<<endl; break; } } } ```