• 个人简介

    #include<cstdio>
    #include<iostream>
    #include<ctime>
    #include<stdlib.h>
    #include<windows.h>
    #include <conio.h>
    using namespace std;
    #define frame_width 50
    #define frame_height 25
    
    typedef struct{
        int x,y;
    } Food;
    typedef struct{
        int x[100],y[100],len,state;
    } Snake;
    
    void gotoxy(int x,int y);  //最重要的一个函数,控制光标的位置
    void print_map();
    void get_newfood();//生成新食物
    bool check_foodinsnake();//检查新食物有没有在蛇身上
    void move_snake();
    void check_foodeating();
    bool check_snakealive();
    
    
    //需要用到的全局变量
    int score;
    Snake snake;
    Food food;
    bool check_eaten;
    
    int main()
    {
        system("color 0B");
        do
        {
            system("cls");
            print_map();
            score=0,check_eaten=0;
            //贪吃蛇的每回合运行控制
            while(1)
            {
                check_foodeating();//system("pause");
                move_snake();
                Sleep(max(50,300-score));//控制速度(与长度呈反比)
                if(!check_snakealive())
                    break;
            }
            printf("Game Over!\n");
            printf("1:Restart\t2:exit\n");
            char com2;
            cin>>com2;
            if(com2=='2')
                break;
        }while(1);
    }
    
    void gotoxy(int x,int y)
    {
        COORD pos;//COORD是一种自带结构体,表示一个字符在控制台屏幕上的坐标
        HANDLE han=GetStdHandle(STD_OUTPUT_HANDLE); //从标准输出设备里取出一个句柄
        pos.X=y,pos.Y=x;
        SetConsoleCursorPosition(han,pos);//定位光标的函数
    }
    
    void print_map()
    {
        //打印墙壁
        for(int i=0;i<frame_height;i++)
        {
            gotoxy(i,0);
            printf("#");
            gotoxy(i,frame_width-1);//因为这个标记是长度,从零开始所以最后要减1
            printf("#");
        }
        for(int i=0;i<frame_width;i++)
        {
            gotoxy(0,i);
            printf("#");
            gotoxy(frame_height-1,i);
            printf("#");
        }
    
        //蛇身初始化
        snake.len=3;
        snake.state='w';
        snake.x[1]=frame_height/2;
        snake.y[1]=frame_width/2;
        gotoxy(snake.x[1],snake.y[1]);
        printf("@");
        for(int i=2;i<=snake.len;i++)
        {
            snake.x[i]=snake.x[i-1]+1;
            snake.y[i]=snake.y[i-1];
            gotoxy(snake.x[i],snake.y[i]);
            printf("@");
        }
    
        //打印初始食物
        get_newfood();
    
        //打印右边状态栏
        gotoxy(2,frame_width+3);
        printf("WELCOME TO THE GAME OF RETRO SNAKE");
        gotoxy(4,frame_width+3);
        printf("UP:   w");
        gotoxy(6,frame_width+3);
        printf("DOWN: s");
        gotoxy(8,frame_width+3);
        printf("LEFT: a");
        gotoxy(10,frame_width+3);
        printf("RIGHT:d");
        gotoxy(12,frame_width+3);
        printf("Your score:%d",score);
        gotoxy(28,frame_width+3);
        printf("Made by jokersio");
    }
    
    bool check_foodinsnake()
    {
        for(int i=1;i<=snake.len;i++)
            if(snake.x[i]==food.x&&snake.y[i]==food.y)
                return 1;
        return 0;
    }
    
    void get_newfood()
    {
        do{
            srand(time(0));
            food.x=rand()%(frame_height-2)+1;
            food.y=rand()%(frame_width-2)+1;
        }while(check_foodinsnake());
        gotoxy(food.x,food.y);
        cout<<"$";
    }
    
    void move_snake()
    {
        char com;
        while(kbhit())//键盘有输入
            com=getch();//从控制台读取一个字符,但不显示在屏幕上
        //没有吃到去除蛇尾
        if(!check_eaten)
        {
            gotoxy(snake.x[snake.len],snake.y[snake.len]);
            printf(" ");
        }
        //将除蛇头外的其他部分向前移动
        for(int i=snake.len;i>1;i--)
            snake.x[i]=snake.x[i-1],
            snake.y[i]=snake.y[i-1];
        //移动蛇头
        switch(com)
        {
            case 'w':
            {
                if(snake.state=='s') //如果命令与当前方向相反不起作用
                    snake.x[1]++;
                else
                    snake.x[1]--,snake.state='w';
                break;
            }
            case 's':
            {
                if(snake.state=='w')
                    snake.x[1]--;
                else
                    snake.x[1]++,snake.state='s';
                break;
            }
            case 'a':
            {
                if(snake.state=='d')
                    snake.y[1]++;
                else
                    snake.y[1]--,snake.state='a';
                break;
            }
            case 'd':
            {
                if(snake.state=='a')
                    snake.y[1]--;
                else
                    snake.y[1]++,snake.state='d';
                break;
            }
            default: //按其余键保持状态前进
            {
                if(snake.state=='s')
                    snake.x[1]++;
                else if(snake.state=='w')
                    snake.x[1]--;
                else if(snake.state=='d')
                    snake.y[1]++;
                else if(snake.state=='a')
                    snake.y[1]--;
                break;
            }
        }
        gotoxy(snake.x[1],snake.y[1]);
        printf("@");
        check_eaten=0;
        gotoxy(frame_height,0);
    }
    
    void check_foodeating()
    {
        if(snake.x[1]==food.x&&snake.y[1]==food.y)
        {
            score+=10;
            check_eaten=1;
            gotoxy(12,frame_width+3);
            printf("Your score:%d",score);
            snake.len++;
            get_newfood();
        }
    }
    
    bool check_snakealive()
    {
        if(snake.x[1]==0||snake.x[1]==frame_height-1||snake.y[1]==0||snake.y[1]==frame_width-1)//撞墙
               return 0;
        for(int i=2;i<=snake.len;i++)
            if(snake.x[i]==snake.x[1]&&snake.y[i]==snake.y[1])
                return 0;
        return 1;
    }
    
    
    
    /*
    狼人杀代码(洛谷原创)
    */
    
    #include<bits/stdc++.h>
    #include<windows.h>
    #include<conio.h>
    using namespace std;
    const int daytime=0,night=1;
    int day=0, during_time=daytime, player_number, my_number;
    HWND hwnd=GetForegroundWindow();
    const int blue=0,yellow=1,red=2,green=3,purple=4,white=5;//颜色常量 
    void color(int c){
        switch(c){
            case red:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);break;
            case green:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);break;
            case yellow:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);break;
            case blue:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);break;
            case white:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);break;
            case purple:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);break;
        }
    }
    int idx_police=-1;
    void gotoxy(int x,int y){
        COORD position;
        position.X=x;
        position.Y=y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
    }
    void init_Show_Window(){
        system("mode con lines=60 cols=188"); 
        ShowWindow(hwnd,SW_MAXIMIZE);//窗口最大化 
        DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
        DrawMenuBar(GetConsoleWindow());//删除×字符 
    }
    
    /*玩家类*/
    const int nvwu=0,cunmin=1,yuyanjia=2,langren=3,lieren=4,shouwei=5,good=6,die=1,life=2;
    class player{
    public:
        int type;
        int die_or_life;
        int how(){
            return die_or_life;
        }
        int is_light;//是否已经公布 
        int killer;
    };
    player players[1000];
    
    /*转换白天模式*/ 
    void change_daytime(){
        during_time=daytime;
        day++;
    }
    
    /*转换黑夜模式*/
    void change_night(){
        during_time=night;
    }
    int nnvwu=0,ncunmin=0,nyuyanjia=0,nlangren=0,nlieren=0,nshouwei=0;
    int idxnvwu,idxshouwei,idxyuyanjia,idxlieren,idxlangren[4]={-1,-1,-1,-1};
    
    /*b是否在Arr中*/
    bool is_include(int arr[],int b,int l){
        for(int i=0;i<l;i++){
            if(arr[i]==b)
             return true;
        }
        return false;
    }
    
    /*初始化人数*/
    void init_players(){
        my_number=rand()%player_number;
        if(player_number==12) nlangren=4;
        else if(player_number>=10) nlangren=3;
        else nlangren=2;
        for(int i=0;i<player_number;i++)
        {
            players[i].die_or_life=life;
            players[i].is_light=0;
            players[i].type=-1;
            players[i].killer=2147483647;
        }
        for(int i=0;i<nlangren;i++)
        {
            int p=rand()%player_number;
            if(!is_include(idxlangren,p,4))
                idxlangren[i]=p,players[p].type=langren;
            else
                i--;
            Sleep(rand()%80+100);
        }
        if(player_number==12)
        {
            do{
                idxshouwei=rand()%player_number;
            }while(players[idxshouwei].type!=-1);   
            players[idxshouwei].type=shouwei;   
        }
        do{
            idxnvwu=rand()%player_number;
        }while(players[idxnvwu].type!=-1);
        players[idxnvwu].type=nvwu;
        if(player_number>=10)
        {
            do{
                idxlieren=rand()%player_number;
            }while(players[idxlieren].type!=-1);
            players[idxlieren].type=lieren;   
        }
        do{
            idxyuyanjia=rand()%player_number;
        }while(players[idxyuyanjia].type!=-1);
        players[idxyuyanjia].type=yuyanjia;
        for(int i=0;i<player_number;i++)
            if(players[i].type==-1)
                players[i].type=cunmin,
                ncunmin++;
        if(players[my_number].type==langren)
        {
            for(int i=0;i<nlangren;i++)
            {
                players[idxlangren[i]].is_light=1;
            }
        }
        players[my_number].is_light=1;
    }
    
    /*在屏幕上打印东西*/
    void print(){
        gotoxy(0,0);
        cout<<"作者:洛谷393864";
        gotoxy(90,0);
        if(during_time==night)
            color(red);
        else
            color(blue);
        printf("第%d天 | ",day);
        if(during_time==night) cout<<"黑夜";
        else cout<<"白天";
    
        gotoxy(0,3);
        color(blue);
        cout<<" 我的号位:"<<my_number+1;
        for(int i=0;i<player_number;i++){
            gotoxy(i*8+1,4);
            if(i==idx_police) color(yellow);
            else color(blue);
            cout<<i+1<<"号位"; 
            gotoxy(i*8+1,5);
            if(players[i].how()==die){
                color(red);
                cout<<"死 亡";
            }else{
                color(green);
                cout<<"存 活";
            }
            gotoxy(i*8+1,6);
            color(blue);
            if(players[i].is_light){
                if(players[i].is_light==1){
                    switch(players[i].type){
                        case nvwu: cout<<"女 巫";break;
                        case yuyanjia: cout<<"\b预言家";break;
                        case cunmin: cout<<"村 民";break;
                        case langren:cout<<"狼 人"; break;
                        case lieren:cout<<"猎 人"; break; 
                        case shouwei:cout<<"守 卫"; break;
                    }   
                }else{
                    cout<<"好人";
                }
    
            }else{
                cout<<"未知";
            }
        }
    
    } 
    
    /*判断是否结束,没结束返回0  好人胜利返回1  狼人胜利返回2   平局返回3*/
    int is_end(){
        int die_bad=0;
        int die_people=0;
        int die_god=0;
        for(int i=0;i<player_number;i++){
            if((players[i].type == nvwu || players[i].type == yuyanjia || players[i].type == shouwei)&&players[i].die_or_life==die)
                die_god++;
            else if(players[i].type == langren && players[i].die_or_life==die)
                die_bad++;
            else if(players[i].type == cunmin && players[i].die_or_life==die)
                die_people++;
        }
        if((die_bad==die_people || die_bad==die_god)&&(die_bad>=nlangren))
            return 3;
        if(die_bad>=nlangren)
            return 1;
        if(die_people>=ncunmin||die_god>=(player_number>=10 ? 3:2))
            return 2;
        return 0;
    }
    
    /*游戏开始前的骚操作*/
    void before_game(){
        srand(time(NULL));
        init_Show_Window();
        color(green);
        cout<<"欢迎来到狼人杀游戏\t\t\t为了更好的游戏体验,请右键点击上方↑↑,点击\"属性\",点击\"字体\"栏目,将字体修改为宋体或新宋体,将字号改为20\n作者:洛谷393864\n请勿私自转载,违者依法追究法律责任  注:10 11 12人局开设猎人  12人局开设守卫警长\n______________________\n";
        cout<<"请输入玩家人数(8-12人):";
        cin>>player_number;
        while(player_number<8||player_number>12)
            { cout<<"请重新输入!\n"; cin>>player_number; }
        system("cls");
        cout<<"初始化身份中,请稍等.";
        for(int i=0;i<6;i++){
            for(int j=0;j<12;j++){
                cout<<".";
                Sleep(50);
            }   
            cout<<"\b\b\b\b\b\b\b\b\b\b\b\b            \b\b\b\b\b\b\b\b\b\b\b\b";
        }
        system("cls");
    
        init_players();
        cout<<"我的号位:"<<my_number+1<<endl
            <<"我的身份:";
        switch(players[my_number].type){
            case nvwu: cout<<"女巫\n";break;
            case yuyanjia: cout<<"预言家\n";break;
            case cunmin: cout<<"村民\n";break;
            case langren:cout<<"狼人\n";break;  
            case lieren:cout<<"猎人\n"; break;  
            case shouwei:cout<<"守卫\n";break;
        }
        change_daytime();
        system("pause");
        system("cls");
        cout<<"游戏加载中.";int ppppp=rand()%3+2;
        for(int i=0;i<ppppp;i++){
            for(int j=0;j<6;j++){
                cout<<".";
                Sleep(rand()%100+150);
            }   
            cout<<"\b\b\b\b\b\b      \b\b\b\b\b\b";
        }   
        print();
    } 
    
    /*每一天开始前的操作*/
    void something_before_everyday(){
        change_night();
        system("cls");
        print();
        gotoxy(0,7);
        cout<<"________________________";
        gotoxy(0,8);
        color(white);
        cout<<"天黑~请闭眼~~~\n";
    }
    
    /*守卫操作*/
    int shouweishou=0;
    int ShouWei(){
        color(blue);
        cout<<"守卫~请睁眼~~\n";
        Sleep(1500);
        cout<<"你要守护的是?\n";
        if(players[my_number].type==shouwei&&players[my_number].die_or_life == life){
            cin>>shouweishou;
            while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
                cout<<"请重新输入!\n";
                cin>>shouweishou;
            }
            cout<<"你今晚要守护的是"<<shouweishou<<"号\n";
            Sleep(1500); 
            shouweishou--;
        }else{
            if(players[idxshouwei].die_or_life == life){
                shouweishou=rand()%10;
                while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
                    shouweishou=rand()%10;
                }
            }
        }   
        Sleep(2000);
        cout<<"守卫请闭眼"<<endl<<endl;
        return shouweishou;
    } 
    
    /*狼人操作*/
    int LangRen(){
        int langrensha=-1;
        color(red);
        cout<<"狼人~请睁眼~~~\n";
        Sleep(1500);
        cout<<"你们今晚要杀~谁~~??\n";
        if(players[my_number].type==langren&&players[my_number].die_or_life == life){
            cin>>langrensha;
            while(!(langrensha>=1&&langrensha<=player_number&&players[langrensha-1].die_or_life==life)){
                cout<<"请重新输入!\n";
                cin>>langrensha;
            }
            cout<<"你们今晚要杀的是"<<langrensha--<<"号\n";
            Sleep(3500);
        }else{
            while(langrensha==-1 || players[langrensha].die_or_life == die || players[langrensha].type==langren){
                langrensha=rand()%player_number;
            }
            Sleep(3000);
        }
        cout<<"狼人请~闭眼~~\n\n";
        return langrensha;
    }
    
    /*女巫操作*/
    int nvwujiu=0,nvwudu=0,is_nvwujiu=0,is_nvwudu=0;
    int NvWu(int langrensha){
        color(purple);
        cout<<"女巫~~请睁眼~~\n";
        Sleep(2000);
        if(players[my_number].type==nvwu&&players[my_number].die_or_life == life){
            if(is_nvwujiu) 
                cout<<"你已经用过解药\n",Sleep(1500);
            else
            {
                cout<<"今晚"<<langrensha+1<<"号死了,你想用解药吗?(1想 / 2不想)\n";
                int is_nvwujie=0;
                cin>>is_nvwujie;
                while(is_nvwujie!=1&&is_nvwujie!=2){
                    cout<<"请重新输入\n";
                    cin>>is_nvwujie;
                } 
                if(is_nvwujie==1) {
                    Sleep(1000);
                    cout<<"已经解救"<<langrensha+1<<"号\n";
                    nvwujiu=langrensha;
                }
                is_nvwujiu=1;
            }
            Sleep(1500);
            if(::is_nvwudu) cout<<"你已经用过解药\n",Sleep(1500);
            else
            {
                cout<<"你想用毒药吗?(1想 / 2不想)\n";
                Sleep(1500);
                int is_nvwudu=0;
                cin>>is_nvwudu;
                while(is_nvwudu!=1&&is_nvwudu!=2){
                    cout<<"请重新输入\n";
                    cin>>is_nvwudu;
                }   
                if(is_nvwudu==1){
                    Sleep(1500);
                    cout<<"你想毒谁?\n"; 
                    cin>>nvwudu;
                    while(!(nvwudu>=1&&nvwudu<=player_number&&players[nvwudu].die_or_life==life)){
                        cout<<"请重新输入\n";
                        cin>>nvwudu; 
                    }
                    nvwudu--;
                    Sleep(1500);
                    cout<<"已经毒死了"<<nvwudu+1<<"号\n";
                }
                ::is_nvwudu=1;
            }   
        }else{
            if(players[idxnvwu].die_or_life == life){
                if(!is_nvwujiu)
                {
                    int is_jiu=rand()%8;
                    if(is_jiu==0){
                        nvwujiu=langrensha;
                        is_nvwujiu=1;
                    }   
                }
                if(!is_nvwudu)
                {
                    int is_du=rand()%4;
                    if(is_du==0){
                        int num=rand()%player_number;
                        nvwudu=num;
                        is_nvwudu=1;
                    }
                }
            }
    
        } 
        cout<<"女巫~请闭眼~~\n\n";
        return nvwujiu*10000+nvwudu;//传回两个变量,“加密”操作 
    }
    
    int yuyanjiabixutoupiao=-1;
    /*预言家操作*/
    void YuYanJia(){
        color(green);
        cout<<"预言家~请睁眼~~\n";
        Sleep(2000);
        if(players[my_number].type==yuyanjia&&players[my_number].die_or_life == life){
            cout<<"请问你想查验谁的身份\n";
            int p;
            cin>>p;
            while(!(p>=1&&p<=player_number)){
                cout<<"请重新输入!\n";
                cin>>p;
            }
            Sleep(2000);
            cout<<p<<"号的身份是——";
            Sleep(1000);
            if(players[p-1].type == langren){
                cout<<"狼人\n";
                players[p-1].is_light = 1;
            }else{
                cout<<"好人\n";
                players[p-1].is_light = 2;
            }
        }else{
            int p=-1;
            while(p==-1||players[p].die_or_life==die||p==idxlieren)
                p=rand()%player_number;
            if(players[p].type==langren)//锁定目标! 
            {
                yuyanjiabixutoupiao=p;
            }
        }
        cout<<"预言家~~请闭眼~~\n";
    }
    
    /*黑夜操作*/
    int LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1; 
    void Night(){   
        LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1; 
    
        //如果有12人局,添加守卫 
        if(player_number==12){
            SHOUWEISHOU=ShouWei();
            Sleep(2000);
        } 
        /*狼人部分*/
        LANGRENSHA=LangRen();
        Sleep(3500);
        /*女巫部分*/ 
        int nvwu=NvWu(LANGRENSHA);
        NVWUDU=nvwu%10+nvwu/10%10;
        NVWUJIU=nvwu/10000%10+nvwu/100000%10;
        Sleep(3000);
        /*预言家部分*/
        YuYanJia();
        Sleep(2000);
    }
    
    /*猎人操作*/
    void Lieren(){
        int lierendai=-1;
        cout<<idxlieren+1<<"号是猎人\n";
    
        players[idxlieren].is_light = 1;
        Sleep(1000);
        if(idxlieren==my_number){
            cout<<"你想带走几号?\n";
            cin>>lierendai;
            while(lierendai<1||lierendai>player_number||players[lierendai].die_or_life==die){
                cout<<"请重新输入!\n";
                cin>>lierendai;
            }
            lierendai--;
        }else{
            lierendai=rand()%player_number;
            while(players[lierendai].die_or_life == die){
                lierendai=rand()%player_number;
            }
        }
        Sleep(2000);
        cout<<"猎人选择带走"<<lierendai+1<<"号\n";
        Sleep(2000);
        players[lierendai].die_or_life = die;
    }
    
    void police_die();
    /*判断谁死了*/
    void panduansiwang(){
        system("cls");
        print(); 
        gotoxy(0,7);
        cout<<"________________________\n";
        Sleep(3000);
        color(white);
        cout<<"天亮了\n";
        Sleep(2000);
        gotoxy(0,9);
        cout<<"昨晚";
        bool is_die[15]={false},is_die_lieren=false,flag=false;
        for(int i=0;i<player_number;i++)
        {
            if(players[i].die_or_life==life)
            {
                if(i==LANGRENSHA||i==NVWUDU) {
                    if(players[i].type==lieren) is_die_lieren=true;
                    players[i].killer= (i==LANGRENSHA ? langren:nvwu);
                    players[i].die_or_life=die;
                    is_die[i]=true;
                }
                if(i==SHOUWEISHOU||i==NVWUJIU) {
                    if(players[i].type==lieren) is_die_lieren=false;
                    players[i].killer=-1;
                    players[i].die_or_life=life;
                    is_die[i]=false;
                }   
            }
        }
        bool is_police_die=false;
        for(int i=0;i<player_number;i++)
        {
            if(is_die[i])
            {
                if(flag) cout<<"和"<<i+1<<"号";
                else cout<<i+1<<"号",flag=true;
                if(i==idx_police) 
                    is_police_die=true;
            }
        }
        if(flag) cout<<"死了\n";
        else cout<<"是平安夜\n";
    
        if(is_die_lieren) Lieren();
        if(is_police_die) police_die();
    }
    
    /*选警长*/
    void choose_police(){
        system("cls");
        print();
        color(blue);
        gotoxy(0,7);
        cout<<"________________________\n";
        color(yellow);
        cout<<"下面开始选举警长,各位不能选举自己~\n";
        int tong[100]={0},cannot[100],must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        memset(cannot,-1,sizeof(cannot));
        CHOOSE:
        color(yellow);
        Sleep(1500);
        for(int i=0;i<player_number;i++)
        {
            if(players[i].die_or_life==life&&!is_include(cannot,i,player_number))
            {
                if(i==my_number)
                {
                    cout<<"你要选举几号?\n";
                    int n;
                    cin>>n;
                    while(n<1||n>player_number||n==i+1||players[n-1].die_or_life==die||!is_include(must,n-1,player_number))
                    {
                        cout<<"请重新输入!\n";
                        cin>>n;
                    }
                    cout<<i+1<<"号选举"<<n--<<"号\n";
                    tong[n]++;
                }
                else
                {
                    int n=rand()%player_number;
                    while(n==i||players[n].die_or_life==die||!is_include(must,n,player_number))
                        n=rand()%player_number;
                    cout<<i+1<<"号选举"<<n+1<<"号\n";
                    tong[n]++;
                }
                Sleep(1500);
            }
        }
        int idx_max=-1,maxn=-1,len=0;
        for(int i=0;i<player_number;i++)
            if(maxn<tong[i])
            {
                maxn=tong[i];
                idx_max=i;
            }
        int maxn_arr[15]={0};
        for(int i=0;i<player_number;i++)
        {
            if(tong[i]==maxn)
            {
                maxn_arr[len++]=i;
            }
        }
        color(blue);
        if(len>1)
        {
            for(int i=0;i<len;i++)
            {
                if(i==len-1)
                {
                    cout<<maxn_arr[i]+1<<"号平票\n"; 
                }
                else
                {
                    cout<<maxn_arr[i]+1<<"号,";
                }
            }
            for(int i=0;i<len;i++)
                cannot[i]=maxn_arr[i];
            for(int i=0;i<player_number;i++)
            {
                if(is_include(cannot,i,len))
                    must[i]=i;
                else
                    must[i]=-1;
            }
            color(white);
            goto CHOOSE;
        }
        cout<<"恭喜"<<idx_max+1<<"号当选警长\n";
        Sleep(3000);
        idx_police=idx_max;
        return;
    }
    
    /*投票*/
    int toupiao(){
        int tong[100]={0},cannot[100]={},must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
        memset(cannot,-1,sizeof(cannot));
        gotoxy(0,7);
        color(blue);
        cout<<"________________________\n";
        color(white);
        cout<<"下面进入投票环节\n";
        memset(tong,0,sizeof(tong));
        Sleep(2000);
        TOUPIAO:
        for(int i=0;i<player_number;i++){
            if(players[i].die_or_life == life&&!is_include(cannot,i,player_number)){
                if(i==my_number){
                    color(white);
                    cout<<"你要投几号?\n";
                    int n;
                    cin>>n;
                    while(!(n>=1&&n<=player_number&&is_include(must,n-1,player_number))){
                        cout<<"请重新输入!\n";
                        cin>>n;
                    }
                    Sleep(2000);
                    cout<<setw(2)<<my_number+1<<"号投了"<<setw(2)<<n<<"号";
                    if(my_number==n-1) color(red),cout<<"快来看!这有个疯子投自己!"; 
                    if(i==idx_police) color(yellow),cout<<"(警长)\n"; else cout<<"\n";
                    if(i==idx_police) tong[n-1]++;
                    tong[n-1]++;
                }else{
                    color(white);
                    int t=-1;
                    while(t==-1 || players[t].die_or_life == die || t==i || !is_include(must,t,player_number)){
                        if(i==idxyuyanjia&&yuyanjiabixutoupiao!=-1)
                        {
                            t=yuyanjiabixutoupiao;
                            yuyanjiabixutoupiao=-1;
                            continue;
                        }
                        t=rand()%player_number;
                        if(is_include(idxlangren,i,nlangren))
                        {
                            if(players[t].type == langren)
                                t=-1;
                        }
                    }
                    cout<<setw(2)<<i+1<<"号"<<"投了"<<setw(2)<<t+1<<"号";
                    if(i==idx_police) cout<<"(警长2票)\n"; else cout<<"\n";
                    if(i==idx_police) tong[t]++;
                    tong[t]++;  
                }
    
                Sleep(rand()%1000+1000);
            }
        }
        int idx_max=-1,maxn=-1,len=0;
        for(int i=0;i<player_number;i++)
            if(maxn<tong[i])
            {
                maxn=tong[i];
                idx_max=i;
            }
        int maxn_arr[15]={0};
        for(int i=0;i<player_number;i++)
        {
            if(tong[i]==maxn)
            {
                maxn_arr[len++]=i;
            }
        }
        color(blue);
        if(len>1)
        {
            for(int i=0;i<len;i++)
            {
                if(i==len-1)
                {
                    cout<<maxn_arr[i]+1<<"号平票\n"; 
                }
                else
                {
                    cout<<maxn_arr[i]+1<<"号,";
                }
            }
            for(int i=0;i<len;i++)
                cannot[i]=maxn_arr[i];
            for(int i=0;i<player_number;i++)
            {
                if(is_include(cannot,i,len))
                    must[i]=i;
                else
                    must[i]=-1;
            }
            color(white);
            goto TOUPIAO;
    
        }
    
        cout<<idx_max+1<<"号"<<"出局\n";
        Sleep(4000);
        players[idx_max].die_or_life = die;
        players[idx_max].killer = good;
        return idx_max;
    }
    
    /*警长死亡*/
    void police_die(){
        color(yellow);
        int type;
        if(idx_police==my_number)
        {
            Sleep(1550);
            cout<<"你是想撕毁警徽还是移交警徽?(撕毁输入1,移交输入2)";
    
            cin>>type;
            while(!(type==1||type==2))
            {
                cout<<"请重新输入!\n";
                cin>>type;
            }
        }
        else{
            type=rand()%3+1;
        }
        if(type==1)
        {
            cout<<"警长选择撕毁警徽\n";
            Sleep(1000);
            idx_police=-1;
        }
        else
        {
            int lucky=-1;
            while(lucky==-1||players[lucky].die_or_life==die)
                lucky=rand()%player_number;
            cout<<"警长选择把警徽移交给"<<lucky+1<<"号\n";
            Sleep(1500);
            idx_police=lucky; 
        }
    }
    
    /*故事的最后*/
    void the_end(){
        system("cls");
        switch(is_end()){
            case 1:cout<<"好人胜利\n\n"; break;
            case 2:cout<<"狼人胜利\n\n"; break;
            case 3:cout<<"本局平局\n\n"; break;
        }
        for(int i=0;i<player_number;i++){
            cout<<i+1<<"号位:\t";
            switch(players[i].type){
                case nvwu: cout<<"女巫\t";break;
                case yuyanjia: cout<<"预言家\t";break;
                case cunmin: cout<<"村民\t";break;
                case langren:cout<<"狼人\t";break;
                case lieren:cout<<"猎人\t"; break;  
                case shouwei:cout<<"守卫\t";break;  
            } 
            cout<<"最终";
            switch(players[i].killer){
                case nvwu:cout<<"被女巫毒死\n"; break;
                case langren:cout<<"被狼人杀死\n"; break;
                case good:cout<<"被投票出局\n"; break;
                case lieren:cout<<"被猎人带走\n";break;
                default :cout<<"存活\n";
            }
            cout<<endl;
        }
    }
    
    /*主函数*/
    int main(){
        int wheel=0; 
        before_game();
        while(!is_end()){
            //黑夜准备 
            something_before_everyday();
            Sleep(1500); 
    
            //黑夜部分 
            Night(); //进入黑夜! 
            change_daytime(); //换天 
    
            //天亮了 
            panduansiwang();//判断谁死了 
            Sleep(2000);
            system("cls");
            print();
            if(is_end()) break;
    
            //选警长 
            if(!wheel&&player_number==12)
            {
                choose_police();
                system("cls");
                print();
            }
    
            //投票环节 
            int idx_max=toupiao();//票数最多的人 
            if(idx_max==idx_police){
                police_die();
            }
            if(players[idx_max].type==lieren){//启动猎人程序 
                Lieren();
                if(is_end()) break;
            }
            system("cls");
            print(); 
            wheel++;
        }
    
        the_end();
        system("pause");
        return 0;
    }
    
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<conio.h>
    #include<windows.h>
    #include<cstdlib>
    #include<ctime>
    using namespace std;
    #define MAXN 35
    #define MIDX 10
    #define MIDY 40
    #define CG 25
    #define CK 80
    int G,K,Lnum,Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数
    int nx,ny;//现在光标所在的位置
    bool QR=0,Lose=0,is_flag_true[MAXN][MAXN];//QR为确认模式是否打开,Lose为是否输,第三个是这个位置上的旗是否放对
    char map[MAXN][MAXN],tmap[MAXN][MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图
    int map1[MAXN][MAXN],mapc[MAXN][MAXN];//map1为数字的地图,其中0代表空地,-1为雷,1-8为周围雷的个数
    //mapc为当前格子的颜色
    int col[10]={240,249,242,252,241,244,243,240,248};//col[i]表示windows扫雷中i的颜色,col[0]为空格的颜色
    int d[10][4]={{0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//8个方向
    bool ZB;//作弊是否打开
    /*各种函数*/
    void color(int);//颜色
    void gto(int,int);//光标位置
    void make();//制作随机地图
    void print();//打印地图等
    bool check(int,int);//判断坐标是否合法
    bool is_win();//判断是否赢
    bool is_lose();//是否输
    void dfs(int,int);//用深搜来打开方块
    void st(int,int);//试探,即windows扫雷中的左右键同时按
    void flag(int,int);//小旗
    void bj(int,int);//标记
    void swt();//确认模式
    void again();//重新开始
    void zb();//作弊模式
    void mainmain();//主函数
    void print_real_map();//打印最终的地图
    void begin();//各种操作
    int main()
    {
    mainmain();
    }
    void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
    void gto(int x,int y)
    {
    COORD pos;pos.X=y;pos.Y=x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    void make()
    {
    for(int i=1;i<=G;i++)
    for(int j=1;j<=K;j++)
    map[i][j]='#';//初始化
    for(int i=1;i<=Lnum;i++)
    {
    int x=rand()%G+1,y=rand()%K+1;
    while(map[x][y]=='O')
    x=rand()%G+1,y=rand()%K+1;
    map[x][y]='O';
    }//随机放雷
    for(int i=1;i<=G;i++)
    for(int j=1;j<=K;j++)
    {
    if(map[i][j]=='O')map1[i][j]=-1,mapc[i][j]=240;//如果是雷
    else
    {
    for(int k=1;k<=8;k++)
    if(map[i+d[k][0]][j+d[k][1]]=='O')
    map1[i][j]++;//计算周围雷的个数
    mapc[i][j]=col[map1[i][j]];//根据格子上的数设置颜色
    }
    }
    for(int i=1;i<=G;i++)
    for(int j=1;j<=K;j++)
    if(mapc[i][j]==0)//空地
    mapc[i][j]=240;
    }
    void print()
    {
    system("cls");
    gto(0,MIDY-4); color(233); printf("扫雷");
    color(240);
    gto(1,MIDY);
    for(int i=2;i<=G+1;i++)
    {
    gto(i,0);
    for(int j=1;j<=K;j++)
    printf("#"),tmap[i-1][j]='#';//初始化玩家所看到的地图
    }
    gto(2,0);
    nx=2,ny=0;
    color(15);
    printf("@");
    color(15);
    gto(2,2*K+5);printf("-----规则-----");
    gto(3,2*K+5);printf("wasd:选择位置");
    gto(4,2*K+5);printf("空格:打开");
    gto(5,2*K+5);printf("1键:试探周围8个方块,如果其中有雷则不会打开,无");
    gto(6,2*K+5);printf(" 雷或旗帜标对了则会将周围无雷的位置打开,");
    gto(7,2*K+5);printf(" 如果试探时周围有标错的旗帜,则会游戏失败");
    gto(8,2*K+5);printf(" 必须额外确认一次,以便查看周围被试探的区域");
    gto(9,2*K+5);printf("2键:放置/取消小旗(F)");
    gto(10,2*K+5);printf("3键:放置/取消标记(?)");
    gto(11,2*K+5);printf("4键:打开/关闭确认模式,即每次操作需再按一次确认");
    gto(12,2*K+5);printf("5键:打开/关闭作弊模式,即显示原本地图");
    gto(13,2*K+5);printf("0键:重新开始");//打印规则
    gto(G+4,0);printf("-----操作提示-----\n");
    printf("请选择方块进行操作");
    gto(1,2*K+10);color(12);printf("剩余小旗数:%d",Wnum=Lnum);
    }
    bool check(int x,int y){return y>=0&&y<K&&x>=2&&x<G+2;}
    //因为地图是从2行0列开始打的,而地图是从1行1列开始存的,所以gto(x,y)走到的是map[x-1][y+1]
    bool is_win()
    {
    int cnt=0;
    for(int i=1;i<=G;i++)
    for(int j=1;j<=K;j++)
    if(map[i][j]=='#'&&map1[i][j]==-1)
    cnt++;
    if(cnt==Lnum) return 1;
    //所有没被打开的方块都是雷=>胜利
    for(int i=1;i<=G;i++)
    for(int j=1;j<=K;j++)
    if((tmap[i][j]!='F'&&map1[i][j]==-1)||(tmap[i][j]=='F'&&map1[i][j]!=-1))
    return 0;
    return 1;
    //所有雷都标有旗
    }
    bool is_lose(){return Lose;}
    void dfs(int x,int y)
    {
    if(map1[x-1][y+1]>0)//只要边界全部是数字就return
    {
    gto(x,y),color(mapc[x-1][y+1]),printf("%d",map1[x-1][y+1]);
    tmap[x-1][y+1]=map1[x-1][y+1]+'0';
    return;
    }
    gto(x,y);color(255);
    tmap[x-1][y+1]=' ';
    printf(" ");//因为下面判断了雷,上面判断了数字,这里就一定是空地
    for(int i=1;i<=8;i++)
    {
    int xx=x+d[i][0]-1,yy=y+d[i][1]+1;//这里的xx和yy是在map中的,而不是gto中的
    if(check(xx+1,yy-1)&&tmap[xx][yy]=='#'&&map1[xx][yy]!=-1)//所以check和dfs的参数要变化
    dfs(xx+1,yy-1);
    }
    }
    void st(int x,int y)
    {
    for(int i=1;i<=8;i++)
    {
    int xx=x+d[i][0],yy=y+d[i][1];
    if(check(xx,yy))
    {
    gto(xx,yy);
    if(tmap[xx-1][yy+1]!='#')
    color(mapc[xx-1][yy+1]-128);//减去128使周围的8个格子的背景颜色变为灰色
    else
    color(112);//这里特判一下'#',应该可以不用
    printf("%c",tmap[xx-1][yy+1]);
    }
    }
    gto(G+5,0),color(15),printf("请确认 ");
    //试探必须额外确认一次,规则上有说
    char c=getch();
    if(c=='1')
    {
    for(int i=1;i<=8;i++)
    {
    int xx=x+d[i][0],yy=y+d[i][1];
    if(check(xx,yy))
    if(tmap[xx-1][yy+1]=='F'&&map1[xx-1][yy+1]!=-1)//试探时有格子的小旗标错了=>失败
    {
    Lose=1;
    return;
    }
    }
    for(int i=1;i<=8;i++)
    {
    int xx=x+d[i][0],yy=y+d[i][1];
    if(check(xx,yy))
    if(map1[xx-1][yy+1]==-1&&tmap[xx-1][yy+1]!='F')//试探是有格子为雷=>取消打开
    return;
    }
    for(int i=1;i<=8;i++)
    {
    int xx=x+d[i][0],yy=y+d[i][1];
    if(check(xx,yy)&&tmap[xx-1][yy+1]=='#')//打开周围8个格子
    dfs(xx,yy);
    }
    }
    }
    void flag(int x,int y)
    {
    x-=1,y+=1;
    if(tmap[x][y]=='F')//原本为小旗=>取消小旗
    {
    tmap[x][y]='#';mapc[x][y]=240;
    gto(x+1,y-1),color(240),printf("#");
    Wnum++;//更新小旗数
    }
    else//否则就放置小旗
    {
    is_flag_true[x][y]=map1[x][y]==-1;//判断小旗是否放对
    tmap[x][y]='F';mapc[x][y]=253;
    gto(x+1,y-1),color(253),printf("F");
    Wnum--;//更新小旗数
    }
    gto(1,2*K+10);color(12);printf("剩余小旗数: ");
    gto(1,2*K+22);printf("%d",Wnum);//更新小旗数
    }
    void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true
    {
    x-=1,y+=1;
    if(tmap[x][y]=='?')
    {
    gto(x+1,y-1),color(240),printf("#");
    tmap[x][y]='#';mapc[x][y]=240;
    }
    else
    {
    if(tmap[x][y]=='F')//如果原本这个位置上是小旗,而你把它变为了标记,就要更新小旗数
    {
    Wnum++;
    gto(1,2*K+10);color(12);printf("剩余小旗数: ");
    gto(1,2*K+22);printf("%d",Wnum);
    }
    gto(x+1,y-1),color(240),printf("?");
    tmap[x][y]='?';mapc[x][y]=240;
    }
    }
    void swt(){QR=!QR;}
    void zb()
    {
    if(ZB)//如果本来作弊打开了就把作弊地图清除
    {
    for(int i=1;i<=G;i++)
    {
    gto(i+1,K+2);
    for(int j=1;j<=K;j++)
    color(15),printf(" ");
    }
    ZB=0;
    }
    else//否则打印作弊地图
    {
    for(int i=1;i<=G;i++)
    {
    gto(i+1,K+2);
    for(int j=1;j<=K;j++)
    {
    color(mapc[i][j]);
    if(map1[i][j]==-1) printf("O");
    else if(map1[i][j]>0) printf("%d",map1[i][j]);
    else printf(" ");
    }
    }
    ZB=1;
    }
    }
    void again()
    {
    G=K=Lnum=nx=ny=Lose=ZB=0;
    QR=0;
    memset(is_flag_true,0,sizeof(is_flag_true));
    memset(map,0,sizeof(map));
    memset(tmap,0,sizeof(tmap));
    memset(map1,0,sizeof(map1));
    memset(mapc,0,sizeof(mapc));
    color(15);
    system("cls");//初始化
    mainmain();
    }
    void begin()//各种操作
    {
    char c=getch(); 
    gto(G+5,0),color(15),printf("请选择方块进行操作");
    color(240);
    if(c=='w'&&check(nx-1,ny))
    {
    gto(nx,ny);
    if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')
    color(mapc[nx-1][ny+1]);
    printf("%c",tmap[nx-1][ny+1]);
    gto(nx-=1,ny);color(15);printf("@");
    }
    else if(c=='s'&&check(nx+1,ny))
    {
    gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
    gto(nx+=1,ny);color(15);printf("@");
    }
    else if(c=='a'&&check(nx,ny-1))
    {
    gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
    gto(nx,ny-=1);color(15);printf("@");
    }
    else if(c=='d'&&check(nx,ny+1))
    {
    gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
    gto(nx,ny+=1);color(15);printf("@");
    }
    //上下左右移动
    else
    {
    if(c==' '&&(!(tmap[nx-1][ny+1]<='9'&&tmap[nx-1][ny+1]>='0'))&&tmap[nx-1][ny+1]!='F')
    {
    mapc[nx-1][ny+1]=col[map1[nx-1][ny+1]];//如果本来放了标记,mapc[nx-1][ny+1]的颜色为黑色,在打开时里面的颜色却不一定是黑色
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()==' ')
    {
    if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
    dfs(nx,ny);
    }
    }
    else
    {
    if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
    dfs(nx,ny);
    }
    }
    else if(c=='1')
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='1') st(nx,ny);
    }
    else st(nx,ny);
    for(int i=1;i<=8;i++)
    {
    int xx=nx+d[i][0],yy=ny+d[i][1];
    if(check(xx,yy))
    {
    gto(xx,yy);
    if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]);
    else color(240);
    printf("%c",tmap[xx-1][yy+1]);
    }
    }
    }
    else if(c=='2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='2') flag(nx,ny);
    }
    else flag(nx,ny);
    }
    else if(c=='3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='3') bj(nx,ny);
    }
    else bj(nx,ny);
    }
    else if(c=='4')
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='4') swt();
    }
    else swt();
    }
    else if(c=='5')
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='5') zb();
    }
    else zb();
    }
    else if(c=='0')
    {
    if(QR)
    {
    gto(G+5,0),color(15),printf("请确认 ");
    if(getch()=='0') again();
    }
    else again();
    }
    }
    }
    void mainmain()
    {
    system("mode con cols=120 lines=35");//设置窗口大小
    srand((unsigned)time(NULL));
    int mode;
    printf("1.初级\n2.中级\n3.高级\n4.自定义\n");
    scanf("%d",&mode);if(mode>4) mode=4;
    if(mode==1) G=9,K=9,Lnum=10;
    else if(mode==2) G=16,K=16,Lnum=40;
    else if(mode==3) G=16,K=30,Lnum=99;//三种等级的参数
    else
    {
    printf("请输入雷区高度:");scanf("%d",&G);
    printf("请输入雷区宽度:");scanf("%d",&K);
    printf("请输入雷个数(建议不超过总大小的三分之一):");scanf("%d",&Lnum);
    if(G>24) G=24;if(K>30) K=30;
    if(G<9) G=9;if(K<9) K=9;
    if(Lnum<10) Lnum=10;if(Lnum>G*K*9/10) Lnum=G*K*9/10;
    //控制参数的范围,最后一个if是雷的数量不超过地图大小的9/10
    }
    make();
    print();
    while(1)
    {
    begin();
    bool f1=is_win(),f2=is_lose();
    if(f1||f2)
    {
    gto(0,0);
    if(f1)
    color(202),gto(0,0),printf("你 赢 了!!是否重来?(y/n)");
    if(f2)
    color(137),gto(0,0),printf("你 输 了!!是否重来?(y/n)");//输赢
    print_real_map();
    char c=getch();
    if(c=='y'||c=='Y') again();
    else
    {
    color(15);
    system("cls");
    gto(MIDX,MIDY-5);
    printf("欢迎下次再来");
    return;
    }
    }
    }
    }
    void print_real_map()
    {
    color(240);
    for(int i=1;i<=G;i++)
    {
    gto(i+1,0);
    for(int j=1;j<=K;j++)
    {
    if(tmap[i][j]=='F'&&is_flag_true[i][j]==0)//如果旗标错了显示红色的X
    color(252),printf("X");
    else if(map1[i][j]==-1)//雷为黑色O
    color(240),printf("O");
    else if(map1[i][j]==0)//空
    color(240),printf(" ");
    else//数字
    color(mapc[i][j]),printf("%d",map1[i][j]);
    }
    }}
    
    

    下面,请听我吟诗几首

    ————————————————————————————————————————————————————

    其一:

    言用武真非策,

    日庭闱盼树柯。

    场实事膏兼血,

    奈书生薄命何。

    间名种鸡群鹤,

    恨家仇奈若何。

    欲满堂阴有乐,

    境目前皆了了。 ———————————————————————————————————————————————————— 其二:

    刷题是一种出路,枚举是一种思想

    打表是一种勇气,搜索是一种信仰

    剪枝是一种精神,骗分是一种日常

    爆零是一种宿命,W A是一种绝望

    T L E是一种痛苦,R E 是一种放弃

    U K E是一种无奈,AC是一种原谅

    A K 是一种幻想,弃赛是一种颓废

    吊打是一种必然,进队是一种奢望

    模拟只会猜题意,贪心只能过样例

    数学上来先打表,DP一般看规律

    组合数学靠运气,计算几何瞎暴力

    图论强行套模板,数论只会GCD

    递归递推伤不起,搜索茫然TLE

    分治做得像枚举,暴力枚举数第一

    数据结构干瞪眼,怒刷水题找信心

    涨姿势也不容易,考试一来全懵逼

    ————————————————————————————————————————————————————

    其三:

    暴力出奇迹,骗分过样例。

    数学先打表,DP看运气。

    穷举TLE,递推UKE。

    模拟MLE,贪心还CE。

    想要骗到分,就要有方法。

    图论背模板,数论背公式。

    动规背方程,高精背代码。

    如果都没背,干脆输样例。

    模拟定想全,动规定找对。

    贪心定证明,二分L M+1。

    宜考N O I P , 小心别爆零。

    ————————————————————————————————————————————————————

    其四:

    山重水复疑无路,make后面不加to。

    秦时明月汉时关,高价氧化低价还。

    君问归期未有期,点裂加倍匀两极。

    酒酣胸胆尚开张,G M = g R 方。

    碧云天,黄叶地,高温高压催化剂。

    横看成岭侧成峰,洛伦兹力不做功。

    草树知春不久归,b 方减去 4 a c。

    瀚海阑干百丈冰,酸脱羟基醇脱氢。

    ————————————————————————————————————————————————————

    其五:

    明月 A C 惊鹊, R E 半夜鸣蝉。

    稻花香里说丰年,听取W A声一片。

    七八个 T L E,两三点 M L E。

    旧时茅店社林边,路转 C E 忽见。

    ————————————————————————————————————————————————————

    满级评测标准:

    Waiting 评测:评测请求正在等待被评测机抓取

    Fetched 评测:评测请求已被评测机抓取,正在准备开始评测

    Compiling 评测:正在编译中

    Judging 评测:编译成功,正在评测中

    Accepted 通过:程序输出完全正确

    Wrong Answer 通过:好答案

    Time Limit Exceeded通过:时间充裕

    Memory Limit Exceeded 通过:内存充裕

    Runtime Error 通过:完美运行

    Compile Error 通过:轻松通过编译

    System Error 正常:系统正常

    Unknown Error程序太好:被称赞

    Canceled 非常棒:评测没问题

    Ignored 其他:被关注

    ————————————————————————————————————————————————————

  • 最近活动

  • Stat

  • Rating