题目目录:1008 1010 1003
1008题 Smzzl with Greedy Snake
题目大意:贪吃蛇游戏在xOy二维空间上进行,地图上没有障碍物。蛇需要1个单位的时间向前移动一个单位的长度。蛇旋转90度也需要1个单位的时间。其他按照贪吃蛇规则,蛇不变长。要输出最快吃到食物的走法。
思路:我是枚举了0123每种方向,向左上、左下、右上、右下共16种移动的操作方法,然后每移动到目的地一次就改变一次蛇头方向。
#include <bits/stdc++.h> using namespace std; struct node{ int x,y,d,n; }; int main(){ std::ios::sync_with_stdio(false); int n,t,x,y; cin>>t; while(t--){ node st;//start cin>>st.x>>st.y>>st.d; cin>>st.n; for(int i=1;i<=st.n;i++){ int nx,ny;//nest cin>>nx>>ny; int dx=nx-st.x,dy=ny-st.y; if(st.d==0){ if(dx>0){ if(dy>0){ x=dx,y=dy; while(y--) cout<<"f"; cout<<"c"; while(x--) cout<<"f"; st.d=(st.d+1)%4; }else{ x=dx,y=-dy; cout<<"c"; while(x--) cout<<"f"; cout<<"c"; while(y--) cout<<"f"; st.d=(st.d+2)%4; } }else{ if(dy>0){ x=-dx,y=dy; while(y--) cout<<"f"; cout<<"u"; while(x--) cout<<"f"; st.d=(st.d+3)%4; }else{ x=-dx,y=-dy; cout<<"u"; while(x--) cout<<"f"; cout<<"u"; while(y--) cout<<"f"; st.d=(st.d+6)%4; } } }else if(st.d==1){ if(dx>0){ if(dy>0){ x=dx,y=dy; while(x--) cout<<"f"; cout<<"u"; while(y--) cout<<"f"; st.d=(st.d+3)%4; }else{ x=dx,y=-dy; while(x--) cout<<"f"; cout<<"c"; while(y--) cout<<"f"; st.d=(st.d+1)%4; } }else{ if(dy>0){ x=-dx,y=dy; cout<<"u"; while(y--) cout<<"f"; cout<<"u"; while(x--) cout<<"f"; st.d=(st.d+6)%4; }else{ x=-dx,y=-dy; cout<<"c"; while(y--) cout<<"f"; cout<<"c"; while(x--) cout<<"f"; st.d=(st.d+2)%4; } } }else if(st.d==2){ if(dx>0){ if(dy>0){ x=dx,y=dy; cout<<"u"; while(x--) cout<<"f"; cout<<"u"; while(y--) cout<<"f"; st.d=(st.d+6)%4; }else{ x=dx,y=-dy; while(y--) cout<<"f"; cout<<"u"; while(x--) cout<<"f"; st.d=(st.d+3)%4; } }else{ if(dy>0){ x=-dx,y=dy; cout<<"c"; while(x--) cout<<"f"; cout<<"c"; while(y--) cout<<"f"; st.d=(st.d+2)%4; }else{ x=-dx,y=-dy; while(y--) cout<<"f"; cout<<"c"; while(x--) cout<<"f"; st.d=(st.d+1)%4; } } }else if(st.d==3){ if(dx>0){ if(dy>0){ x=dx,y=dy; cout<<"c"; while(y--) cout<<"f"; cout<<"c"; while(x--) cout<<"f"; st.d=(st.d+2)%4; }else{ x=dx,y=-dy; cout<<"u"; while(y--) cout<<"f"; cout<<"u"; while(x--) cout<<"f"; st.d=(st.d+6)%4; } }else{ if(dy>0){ x=-dx,y=dy; while(x--) cout<<"f"; cout<<"c"; while(y--) cout<<"f"; st.d=(st.d+1)%4; }else{ x=-dx,y=-dy; while(x--) cout<<"f"; cout<<"u"; while(y--) cout<<"f"; st.d=(st.d+3)%4; } } } st.x=nx,st.y=ny; } cout<<endl; } return 0; }
1010题 Smzzl with Tropical Taste
题目大意:泳池里男孩一边以速度p喝冰红茶的同时,店主一边往里以速度q倒冰红茶。现在想知道冰红茶是否有被喝完的时候。
思路:只要满足倒入的多余喝掉的即可。注意输出有坑。
#include<bits/stdc++.h> using namespace std; int t; double p,q; int main(){ cin>>t; while(t--){ cin>>p>>q; if(p<=q) cout<<"N0 M0R3 BL4CK 1CE TEA!"<<endl; else cout<<"ENJ0Y YOURS3LF!"<<endl; } }
1003题 Fall with Trees
题目大意:Fall想画一棵完美的二叉树。规定树中所有深度相同的节点在平面上也有相同的y坐标。将深度相同的节点定义为同一级别的节点,那么完美二叉树有四个性质:
-这是一个完整的二叉树。
-每个相邻级别的两个节点的y坐标之差是一个常数。
-同一级别的两个相邻节点的x坐标之差是恒定的。
-每个节点的x坐标是其子节点x坐标的平均值。
Fall绘制了这个二叉树的根节点及其左右子节点。现在Fall打算一共画k级,把二叉树剪下来,事后贴在墙上,所以他想知道这个完美二叉树所有节点的凸包面积是多少。
思路: