日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HAPPY2020暑假训练前复习

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HAPPY2020暑假训练前复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A.計蒜客 - T1381

輸出hello world
萬惡之源

B.51Nod - 2060

全排列輸出
不要用STL的next_permutation,會超時

#include <bits/stdc++.h> using namespace std; const int maxn=14; int dt[maxn]; int vis[maxn];int n; void dfs(int depth) {if(depth==n){for(int i=0;; ++i){if(i==n)break;if(i==0)cout<<dt[i];else cout<<" "<<dt[i];}cout<<endl;return ;}for(int i=1; i<=n; ++i){if(vis[i]==0){vis[i]=1;dt[depth]=i;dfs(depth+1);vis[i]=0;}} } int main() {cin>>n;dfs(0);return 0; }

C HDU - 1715

求斐波那契數列(不過比較大到1000)
用數組來存每一位,模擬進制運算

#include<iostream> #include<cstdio> #include<cstring>typedef long long LL; using namespace std; int f[1005][605];void init() {f[1][0] = f[2][0] = 1;f[1][1] = f[2][1] = 1;int len = 1;for(int i = 3;i <= 1000;i ++){for(int j = 1;j <= len;j ++){f[i][j] += f[i-1][j] + f[i-2][j];if(f[i][j] >= 10){f[i][j+1] += f[i][j] / 10;f[i][j] %= 10;}}while(f[i][len+1]) len ++;f[i][0] = len;} }int main() {int n, t;init();scanf("%d",&t);while(t --){scanf("%d",&n);for(int i = f[n][0];i >= 1;i --)printf("%d", f[n][i]);printf("\n");}return 0; } #include <iostream> #include <algorithm> #include <string> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> using namespace std; typedef long long ll; int main(){int n,q,i,j,temp=0;cin>>q;while(q--){cin>>n;char a[10010]="1",b[10010]="1",c[10010]={0};for(i=0;i<n-2;i++){int len=max(strlen(a),strlen(b));for(j=0;j<len;j++){ //模擬加法temp=0;if(a[j]>='0'){ //短的數不加temp+=a[j]-'0';}if(b[j]>='0'){temp+=b[j]-'0';}if(temp>=10){ //判斷進位if(c[j]>='0'){c[j]+=temp-10;}else{c[j]+=temp-10+'0';}c[j+1]=1+'0';}else{if(c[j]>='0'){if(temp==9){ //若前位進位了,而且加上的數字是9,那么還要進位!!!c[j]='0';c[j+1]='1';}else{c[j]+=temp;}}else{c[j]+=temp+'0';}}}strcpy(a, b);strcpy(b, c);memset(c, 0, sizeof(c));}int len=strlen(b);for(i=len-1;i>=0;i--){ //倒著輸出printf("%c",b[i]);}printf("\n");}return 0; }

D POJ - 2251

三維迷宮BFS搜就完事了

#include<iostream> #include<stdio.h> #include<algorithm> #include<queue> #include<string.h> using namespace std; const int maxn=32; struct node {int x;int y;int z;int step; } start,fin; char a[maxn][maxn][maxn]; bool vis[maxn][maxn][maxn];int dx[]={0,0,1,-1,0,0}; int dy[]={1,-1,0,0,0,0}; int dz[]={0,0,0,0,1,-1};int l,r,c;bool flag=false; queue<node> q;void bfs() {while(q.size()) q.pop();memset(vis,false,sizeof(vis));q.push(start);vis[start.x][start.y][start.z]=true;while(!q.empty()){node temp=q.front();q.pop(); if(temp.x==fin.x && temp.y==fin.y && temp.z==fin.z){flag=1;printf("Escaped in %d minute(s).\n",temp.step);return ;}for(int i=0;i<6;i++){node next;next.x=temp.x+dx[i];next.y=temp.y+dy[i];next.z=temp.z+dz[i];if( next.x>=0&&next.x<l && next.y>=0&&next.y<r && next.z>=0&&next.z<c &&!vis[next.x][next.y][next.z] && a[next.x][next.y][next.z]!='#'){vis[next.x][next.y][next.z]=true;next.step=temp.step+1;q.push(next); } } } } int main() {while(cin>>l>>r>>c){if(l==0&&r==0&&c==0){break;}for(int i=0;i<l;i++){for(int j=0;j<r;j++){for(int k=0;k<c;k++){cin>>a[i][j][k];if(a[i][j][k]=='S'){start.x=i;start.y=j;start.z=k;start.step=0;}if(a[i][j][k]=='E'){fin.x=i;fin.y=j;fin.z=k;fin.step=0;}}}} flag=0;bfs(); if(!flag){cout<<"Trapped!"<<endl; } }return 0; }

E 計蒜客 - T2028

跳石頭,經典二分題目, noip原題

#include<bits/stdc++.h> using namespace std; long long int a[50004];long long int d,n,m; bool judge(int x){int tot=0;int i=0;int now=0;while(i<n+1){i++;if(a[i]-a[now]<x)tot++;else now=i;}if(tot>m)return 0;else return 1; } int main() {cin>>d>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];} a[n+1]=d;int l=1;int r=d;int ans;while(l<=r){int mid=(l+r)>>1;if(judge(mid)){l=mid+1;ans=mid;}else r=mid-1;}cout<<ans<<endl; }

F HDU - 1702

#include<iostream> #include<cstdio> #include<queue> #include<stack> using namespace std; void cnd(int sum,bool f) {if(f==1){//先進先出 queue<int>q;string a;int b;for(int i=1;i<=sum;i++){cin>>a;if(a[0]=='I'){cin>>b;q.push(b);}else {if(q.empty()){cout<<"None"<<endl;}else {cout<<q.front()<<endl;q.pop();}}}while(!q.empty())q.pop();}else{stack<int>s;string a;int b;for(int i=1;i<=sum;i++){cin>>a;if(a[0]=='I'){cin>>b;s.push(b);}else {if(s.empty()){cout<<"None"<<endl;}else {cout<<s.top()<<endl;s.pop();}}}while(!s.empty())s.pop();}} int main() {int n;cin>>n;int a;string s;for(int i=1;i<=n;i++){cin>>a>>s; // cout<<s[0]<<endl;bool f;if(s[2]=='F')f=1;//先進先出 else f=0;cnd(a,f); }return 0; }

G POJ - 1011

詳細題解

H POJ - 3494

求最大全1子矩陣的面積
題解

#include <stdio.h> #include <string.h> #include <algorithm> using namespace std;const int MAXN = 2007; int n,m; int h[MAXN],s[MAXN],L[MAXN],R[MAXN];int solve() {int t = 0;for(int i = 0; i < m; ++i){while(t > 0 && h[s[t-1]] >= h[i])t--;if(t == 0) L[i] = 0;else L[i] = s[t-1]+1;s[t++] = i;}//找最左邊 t = 0;for(int i = m-1; i >= 0; --i)//最右邊 {while(t > 0 && h[s[t-1]] >= h[i])t--;if(t == 0) R[i] = m-1;else R[i] = s[t-1]-1;s[t++] = i;}int ret = 0;for(int i = 0; i < m; ++i)ret = max(ret,h[i]*(R[i]-L[i]+1));return ret; }int main() {int num;while(~scanf("%d %d",&n,&m)){memset(h,0,sizeof(h));int res = 0;for(int i = 0; i < n; ++i){for(int j = 0; j < m; ++j){scanf("%d",&num);if(num==1)h[j]++;else h[j]=0;}res = max(res,solve());}printf("%d\n",res);}return 0; } /* 4 5 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 0 1 1 1 */ #include <iostream>#include <cstdio>#include <algorithm>#include <cstring> int n,m,ans;int map[2333][2333];int h[2333][2333],sta[2333],L[2333],R[2333];//h[i][j]:第i行第j列元素往上最長的連續1長度//維護單調非遞減棧void init(int row){int top = 0,tmp;h[row][m+1] = 0;for(int j = 1;j <= m + 1;j ++) {while(1) {tmp = sta[top];if(h[row][tmp] <= h[row][j]) break;//以j作為延伸點,確定邊界,保證單調性。 R[tmp] = j;-- top;}L[j] = tmp;sta[++top] = j;}for(int j = 1;j <= m;j ++) {if(map[row][j] == 0) continue;int len = R[j] - L[j] - 1;ans = max(ans,h[row][j] * len);}}int main(){while(scanf("%d%d",&n,&m) != EOF) {for(int i = 1;i <= n;i ++) {for(int j = 1;j <= m;j ++) scanf("%d",&map[i][j]);}memset(h,0,sizeof(h));for(int j = 1;j <= m;j ++) {for(int i = 1;i <= n;i ++) {if(map[i][j] == 1) {h[i][j] = 1;while(map[++i][j] == 1) h[i][j] = h[i-1][j] + 1;-- i;}}}ans = 0;for(int i = 1;i <= n;i ++) init(i);printf("%d\n",ans);}return 0;}

總結

以上是生活随笔為你收集整理的HAPPY2020暑假训练前复习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。