题目目录: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级,把二叉树剪下来,事后贴在墙上,所以他想知道这个完美二叉树所有节点的凸包面积是多少。

思路: