月考核总结
考核过后感觉自己的学习方式有很多问题。平时周任务不能看着博客就模仿着写出来,或者照搬别人的思路,应该有充分的理解,保证自己不看别人的博客时,自己也可以独立写出来。平时要提高效率。比赛时要加快速度,理清思路。注意细节!
三道原题。
网线切割
二分查找经典题目
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #define inf 0x3f3f3f3f 6 using namespace std; 7 const int maxn=100; 8 int n, k ; 9 double a[maxn]; 10 bool check(double x){//检查是否达到需要的数量 11 int ans=0; 12 for(int i=0; i<n; i++){ 13 ans+=a[i]/x; 14 } 15 if(ans>=k) return true; 16 else return false; 17 } 18 int main(){ 19 cin >> n >> k ; 20 for(int i=0; i<n; i++) 21 cin >> a[i]; 22 int l=0, r=inf; 23 for(int i=0; i<100; i++){//进行二分,100是次数,从而保证精度 24 double mid=(l+r)/2.0; 25 if(check(mid)) l=mid; 26 else r=mid; 27 } 28 printf("%.2f",floor(r*100)/100);//要小于0.01m; floor向下取整函数 29 //头文件#include<cmath> 30 return 0; 31 } 32 /* 33 4 11 34 5.39 35 8.02 36 7.43 37 4.57 38 */
View Code
八皇后(复刻)
dfs经典题目
1 #include<cstdio> 2 #include<iostream> 3 #define inf 0x3f3f3f3f 4 using namespace std; 5 const int maxn=105;//注意范围要足够大 6 int a[maxn], b[maxn],c[maxn],d[maxn]; 7 int n,ans=0; 8 void print(){ 9 ans++; 10 if(ans<=3)//保证输出三个解 11 { 12 for(int k=1; k<=n; k++) 13 cout << a[k] << " " ; 14 cout << endl ; 15 } 16 } 17 void dfs(int i){ 18 if(i==n+1) //寻找完所有皇后输出其纵坐标 19 { 20 print();//自定义输出函数 21 return ; 22 } 23 else 24 { 25 for(int j=1; j<=n; j++)//寻找可放置位置 26 { 27 if(b[j]==0&&c[i+j]==0&&d[i-j+n]==0)// 是否符合条件 28 { 29 a[i]=j;//占领位置 30 b[j]=1;//占领纵列 31 c[i+j]=1;//占领对角线(左下-右上) 32 d[i-j+n]=1;//占领对角线(左上-右下) 33 dfs(i+1);//寻找下一个皇后坐标 34 b[j]=0;//回溯 35 c[i+j]=0; 36 d[i-j+n]=0; 37 } 38 } 39 } 40 return ; 41 } 42 int main(){ 43 cin >> n ; 44 dfs(1);//从第一个皇后 开始寻找坐标 45 cout << ans ;//输出 46 return 0; 47 } 48 //八皇后问题 仅输出前三个解的坐标以及总共解的个数
View Code
迷宫
经典bfs题目(+拐弯限制问题)
1 //注意题目陷阱 例:输入时的 行/列 2 //拐弯问题可以在确定一个方向后一直走下去直到不能走或到终点 3 4 #include<cstdio> 5 #include<cstring> 6 #include<iostream> 7 #include<queue> 8 #define inf 0x3f3f3f3f 9 using namespace std; 10 const int maxn=105; 11 int t, m, n; 12 struct node{ 13 int x, y; 14 int dir; 15 }st,ed,ss,tt; 16 int turn,fx,fy,sx,sy; 17 int dx[]={-1,1,0,0},dy[]={0,0,-1,1}; 18 bool vis[maxn][maxn]; 19 char maps[maxn][maxn]; 20 int bfs(){ 21 queue <node> que; 22 st.dir=-1; 23 vis[ss.x][ss.y]=true; 24 que.push(st); 25 while(!que.empty()) 26 { 27 ss=que.front(); 28 que.pop(); 29 30 if(ss.x==ed.x&&ss.y==ed.y&&ss.dir<=turn) return 1;//起点即终点进行判断 31 for(int i=0; i<4; i++) 32 { 33 tt.x=ss.x+dx[i]; 34 tt.y=ss.y+dy[i]; 35 tt.dir=ss.dir+1;//已经确定了第一次的方向将-1变0 36 if(tt.dir>turn) continue; 37 while(tt.x>=1&&tt.x<=m&&tt.y>=1&&tt.y<=n&&maps[tt.x][tt.y]!='*') 38 {//符合基本条件 39 if(!vis[tt.x][tt.y])//? 40 { 41 que.push(tt); 42 vis[tt.x][tt.y]=true; 43 } 44 tt.x+=dx[i]; 45 tt.y+=dy[i];//继续走下去 46 if(tt.x==ed.x&&tt.y==ed.y&&tt.dir<=turn) return 1; 47 } 48 } 49 } 50 return 0; 51 } 52 int main(){ 53 cin >> t ; 54 while(t--) 55 { 56 cin >> m >> n ; 57 for(int i=1; i<=m; i++) 58 for(int j=1; j<=n; j++) 59 scanf(" %c", &maps[i][j]); 60 cin>>turn>>st.y>>st.x>>ed.y>>ed.x;//!!!注意细节 注意哪个是行哪个是列 61 if(bfs()) printf("yes\n"); 62 else printf("no\n"); 63 memset(vis,0,sizeof(vis)); 64 } 65 66 return 0; 67 } 68 /* 69 2 70 5 5 71 ...** 72 *.**. 73 ..... 74 ..... 75 *.... 76 1 1 1 1 3 77 5 5 78 ...** 79 *.**. 80 ..... 81 ..... 82 *.... 83 2 1 1 1 3 84 */
no
yes
2020-12-19 21:09:31
有错误的地方1请大佬们多多指点!
版权声明:本文为whd1696187220原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。