• 个人简介

    抵制抄袭简介,禁止沉迷看简介 抄袭者是dog,沉迷看简介者秋后问斩!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 特别嘉宾(抄袭dog):袁宸,辛

    • [ ] ```language
    ```language
    
    
    否则,你不是人;
    if(you are a human) you must can get score in every test;
    else you are not a human;
    我不是老six
    我是崂大😕
    学校就是一座黑暗森林,每个班主任都是带枪的猎人,像幽灵般潜行与走廊,轻轻推开挡路的后门,竭力不让脚步发出一点声音,连呼吸都小心翼翼,他必须小心,因为班中到处都存在与他作对的学生……
    未完待续
    
    using namespace std;
    typedef long long ll;
    ll a[5000010];
    int main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	int n,k;
    	cin>>n>>k;
    	map<ll,ll> m;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		m[a[i]]++;
    	}
    	ll cnt=-2e10,maxn=-2e10;
    	for(int i=1;i<=n;i++){
    		if(m[a[i]]>1){
    			maxn=max(maxn,m[a[i]]);
    		}
    	}
    	for(int i=1;i<=n;i++){
    		if(m[a[i]]>1&&m[a[i]]!=maxn){
    			cnt=max(cnt,m[a[i]]);
    		}
    	}
    	cout<<cnt+maxn;
    	return 0;
    }
    
    

    十年OI一场空,不开long long 见祖宗 你今天做题了吗?(灵魂拷问)

    不准盗简介 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    \\\\ \\ \\ \\ \\ \\ \\        _ooOoo_          // // // // // // ////
    \\\\ \\ \\ \\ \\ \\          o8888888o            // // // // // ////
    \\\\ \\ \\ \\ \\             88" . "88               // // // // ////
    \\\\ \\ \\ \\                (| -_- |)                  // // // ////
    \\\\ \\ \\                   O\  =  /O                     // // ////
    \\\\ \\                   ____/`---'\____                     // ////
    \\\\                    .'  \\|     |//  `.                      ////
    //==                   /  \\|||  :  |||//  \                     ==\\
    //==                  /  _||||| -:- |||||-  \                    ==\\
    //==                  |   | \\\  -  /// |   |                    ==\\
    //==                  | \_|  ''\---/''  |   |                    ==\\
    //==                  \  .-\__  `-`  ___/-. /                    ==\\
    //==                ___`. .'  /--.--\  `. . ___                  ==\\
    //==             ."" '<  `.___\_<|>_/___.'  >' "".               ==\\
    //==            | | :  `- \`.;`\ _ /`;.`/ - ` : | |              \\\\
    ////            \  \ `-.   \_ __\ /__ _/   .-` /  /              \\\\
    ////      ========`-.____`-.___\_____/___.-`____.-'========      \\\\
    ////                           `=---='                           \\\\
    //// //       ||^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  \\ \\\\
    //// // //                                                  \\ \\ \\\\
    //// // // // // // || || || || || || || || || || \\ \\ \\ \\ \\ \\\\
    
    • Waiting 评测:评测请求正在等待被评测机抓取
    • Fetched 评测:评测请求已被评测机抓取,正在准备开始评测
    • Compiling 评测:正在编译中
    • Judging 评测:编译成功,正在评测中
    • Accepted 通过:程序输出完全正确
    • Wrong Answer 通过:好答案
    • Time Limit Exceeded通过:时间充裕
    • Memory Limit Exceeded 通过:内存充裕
    • Runtime Error 通过:完美运行
    • Compile Error 通过:轻松通过编译
    • System Error 正常:系统正常
    • Unknown Error程序太好:被称赞
    • Canceled 非常棒:评测没问题
    • Ignored 其他:被关注

    广搜别枝惊鹊,深搜半夜鸣蝉。稻花香里说DP,听取WA声一片。七八个TLE天外,两三点MLE山前。旧时RE社林边,路转AC忽见。

    # ## #### 👀️ 刘恺生专属 👀️

    AC: Answer Coarse, 粗劣的答案

    CE: Compile Easily, 轻松通过编译

    PC: Perfect Compile, 完美的编译

    WA: Wonderful Answer, 好答案

    RE: Run Excellently, 完美运行

    TLE: Time Limit Enough, 时间充裕

    MLE: Memory Limit Enough, 内存充裕

    OLE: Output Limit Enough, 输出合法

    UKE: Unbelievably Keep Enough score, 难以置信地保持足够的分数

    #include<windows.h>
    #include<time.h>
    #include<conio.h>
    using namespace std;
    int mzhg,zd,swhm,qxs,swx,sn,mp,tongguan,sw1,zd1,sn1,mz1,mp1,zbbj,ccg,mzzd,mz,tongguan1,sw,x,s,cdd,jg,qiang,gun,by,vv,gjj[100],hjj[100],zjj[100];
    void Read()
    {
    	ifstream in("丧尸危机存档.in");
    	in>>mzhg>>zd>>swhm>>qxs>>swx>>sn>>mp>>tongguan>>sw1>>zd1>>sn1>>mz1>>mp1>>zbbj>>ccg>>mzzd>>mz>>tongguan1>>sw>>x>>s>>cdd>>jg>>qiang>>gun>>by>>vv;
    	swx=2;
    	for(int i=0;i<=99;i++) in>>gjj[i];
    	for(int i=0;i<=99;i++) in>>hjj[i];
    	for(int i=0;i<=99;i++) in>>zjj[i];
    	in.close();
    }
    void Save()
    {
    	ofstream out("丧尸危机存档.in");
    	out<<mzhg<<' '<<zd<<' '<<swhm<<' '<<qxs <<' '<<swx<<' '<<sn<<' '<<mp<<' '<<tongguan<<' '<<sw1<<' '<<zd1<<' '<<sn1<<' '<<mz1<<' '<<mp1<<' '<<zbbj<<' '<<ccg<<' '<<mzzd<<' '<<mz<<' '<<tongguan1<<' '<<sw<<' '<<x<<' '<<s<<' '<<cdd<<' '<<jg<<' '<<qiang<<' '<<gun<<' '<<by<<' '<<vv<<'\n';
    	for(int i=0;i<=99;i++) out<<' '<<gjj[i];out<<'\n';
    	for(int i=0;i<=99;i++) out<<' '<<hjj[i];out<<'\n';
    	for(int i=0;i<=99;i++) out<<' '<<zjj[i];out<<'\n';
    	out.close();
    }
    void Slowsay(string a) {int l=a.size();for(int i=0;i<l;i++){cout<<a[i];if(vv==0) Sleep(20);}printf("\n");if(vv==1) Sleep(100);}
    int read()
    {
    	char ch=_getch();
    	while(ch>'9'||ch<'0') ch=_getch();
    	return ch-48;
    }
    void qp()
    {
    	system("cls");if(swx==2) Slowsay("王,"),zd=99999,sw=99999;
    	Slowsay("当前你的状态是\n");
    	printf("子弹 %d,食物 %d\n",zd,sw);
    }
    int esl()
    {
    	system("cls");
    	char ch;
    	Slowsay("你,饿死了。\n");
    	if(vv==0) ch=_getch();
    	hjj[1]=1;
    	Slowsay("Bad End  1\n");
    	ch=_getch();
    	s++;
    	return 0;
    }
    int mzd()
    {
    	hjj[2]=1;
    	system("cls");
    	char ch;
    	Slowsay("你,被丧尸咬死了。\n");
    	if(vv==0) ch=_getch();
    	Slowsay("Bad End   2\n");
    	ch=_getch();
    	s++;
    	return 0;
    }
    int hd1()
    {
    	system("cls");
    	Slowsay("在某一天,你家门口响起了敲门声,你打开门,外面的发现让你欣喜若狂\n");
    	Slowsay("政府的救援部队已经消灭了这个城市的丧尸,\n他们在这个城市的各个角落搜索着可能存在的幸存者.\n");
    	Slowsay("Happy End-----苟到最后\n");Sleep(1000);gjj[1]=1;
    	return 0;
    }
    int hd2()
    {
    	system("cls");
    	int sw;
    	char ch;
    	Slowsay("在与妹子相处的这些时间里,你与她相爱了\n");
    	Slowsay("你们的生活是那样的幸福\n");
    	Slowsay("直到有一天......\n");
    	Slowsay("基地首领希望你去执行一个任务,你选择\n");
    	Slowsay("1.独自一人前往\n");
    	Slowsay("2.和妹子一起去\n");
    	while(true)
    	{
    		int x;
    		x=read();
    		if(x<1||x>2)
    		{
    			Slowsay("请重新输入\n");
    			continue;
    		}
    		if(x==1)
    		{
    			Slowsay("当你完成任务回来的时候,发现——\n");
    			Slowsay("基地被丧尸攻破了\n");
    			Slowsay("这个基地的所有人都被丧尸杀了,一个人都没跑出来\n");
    			hjj[4]=1;
    			Slowsay("Bad End    4");
    			s++;
    		}
    		if(x==2)
    		{
    			Slowsay("当你和妹子完成任务回来时,\n");
    			Slowsay("基地已经变成一片废墟了\n");
    			Slowsay("你和妹子没有办法,只能到处流浪\n");
    			Slowsay("不过,两个人总比一个人要好\n");
    			gjj[2]=1;
    			Slowsay("Happy End------神仙眷侣");
    		}
    		break;
    	}    Sleep(1000);
    	return 0;
    }
    int hd3()
    {
    	system("cls");
    	char ch;
    	Slowsay("你就这样平静的生活在这个基地里\n");
    	Slowsay("直到某一天,大量的丧尸进攻了这里\n");
    	if(zd>9)
    	{
    		Slowsay("每个人都在尽自己的努力去守卫基地\n");
    		Slowsay("每个人都做到了自己能做到的\n");
    		Slowsay("最后,奇迹出现了\n");
    		Slowsay("大家成功守住了基地\n");
    		Slowsay("而你,也因为在守卫过程中立下大功成为了这个基地的英雄\n");
    		Slowsay("顺便说一句,到死了你也没女朋友\n");
    		gjj[3]=1;
    		Slowsay("Happy End-----英雄不朽");
    		return 0;
    	}
    	Slowsay("丧尸的数量实在太多了,\n");
    	Slowsay("尽管基地的大家都在尽全力防守\n");
    	Slowsay("可基地还是被攻破了\n");
    	Slowsay("而你,也死在了这里\n");
    	s++;
    	hjj[5]=1;
    	Slowsay("Bad End     5"); Sleep(1000);
    }
    int hd4()
    {
    	system("cls");
    	Slowsay("在于少年相处的这些时间里");
    	Slowsay("你尽力地保护着他");
    	Slowsay("而他也常常给你带来惊喜");
    	Slowsay("慢慢的,你开始认清你自己");
    	Slowsay("你是个gay");
    	Slowsay("于是,你就和少年幸福快乐的生活在了一起");
    	Slowsay("Happy End-----认清自己");
    	gjj[4]=1;  Sleep(1000);
    }
    int td()
    {
    	system("cls");
    	char ch;
    	Slowsay("那箱饼干与你的枪一起发出了强光\n");
    	Slowsay("紧接着,他们融为了一体\n");
    	Slowsay("当光芒散去时,整个世界都发生了变化\n");
    	Slowsay("所有的丧尸都变回了人类\n");
    	Slowsay("伟大的勇士!丧尸危机终于解除了!!接下来,是普天同庆的大狂欢!!!\n");
    	Slowsay("True End-----拯救世界\n");Sleep(1000);
    	Slowsay("???????????????????????????????????");
    	Slowsay("......这是怎么回事......");
    	Slowsay("......为什么......");
    	Slowsay("......不是普通的......");
    	Slowsay("......从何而来......");Sleep(1000);
    	Slowsay("。 。 。 。 。 。是谁。 。 。 。 。 。");
    	Slowsay("你陷入沉思。");
    	if(zjj[1]!=1)
    	{
    		Slowsay("获得线索-----奇特的枪与饼干");
    	}
    	zjj[1]=1; Sleep(1000);
    }
    int td2()
    {
    	system("cls");
    	char ch;
    	Slowsay("你的变异已经开始了");
    	Slowsay("你开始疯狂的进食,直到把自己的胃撑破");
    	Slowsay("然后,就眼前一黑失去意识");
    	Slowsay("再次醒来时,你已经是一个丧尸了");
    	Slowsay("奇怪的是,你还保留着自己的意识");
    	Slowsay("你感觉到自己的力气变得更大,速度变得更快");
    	Slowsay("或许变成丧尸也不错————你这样想着");
    	Slowsay("True End-----认清!·本我");
    	if(zjj[2]!=1)
    	{
    		Sleep(2000);
    		Slowsay("获得线索-----延迟变异!·少年");
    	}
    	zjj[2]=1; Sleep(1000);
    }
    int bd8()
    {
    	Slowsay("坐在椅子上的是一个15岁左右的少年");
    	Slowsay("正在你因为他的年龄而惊讶时");
    	Slowsay("少年却站了起来,看向了你身后的妹子");
    	Slowsay("“差不多了吧”,妹子这样说道");
    	Slowsay("“可以了”,这是少年的回答");
    	Slowsay("然后,你就感到脖子一阵剧痛");Sleep(1000);
    	Slowsay("在你失去意识前,妹子一直没有松口。");
    	s++;
    	Slowsay("Bad End     8");
    	if(hjj[8]==0)
    	{
    		Sleep(2000);
    		Slowsay("获得线索-----早已变异!·妹子");
    	}
    	hjj[8]=1;  Sleep(1000);
    }
    int td3()
    {
    	system("cls");
    	Slowsay("你和妹子冲出了丧尸的围杀,");
    	Slowsay("可是当你们来到那个幸存者基地时");
    	Slowsay("却发现那个基地有一些不对");
    	Slowsay("所有人都死气沉沉的");
    	Slowsay("你们直接走向了首领的房间");Sleep(1000);
    	if(zjj[2]==1&&zjj[3]==1)
    	{
    		bd8();
    		return 0;
    	}
    	Slowsay("换完子弹的你想离开");
    	Slowsay("就在你快要离开的时候,妹子抓住了你的手");
    	Slowsay("“我喜欢你,别走”,她这样说");
    	Slowsay("于是,你留了下来");
    	Slowsay("你们的生活是那样的幸福");
    	Slowsay("直到有一天......");Sleep(1000);
    	Slowsay("基地首领希望你去执行一个任务,\n");
    	Slowsay("在执行任务的过程中");
    	Slowsay("妹子曾被丧尸咬到过一口");
    	Slowsay("她以为你没有发现");
    	Slowsay("而你却在远处看到了这一幕");
    	Slowsay("奇怪的是,她却并没有变异\n");
    	Slowsay("那一刹那你突然想起,");
    	Slowsay("你们的房间里,总是弥漫着一股血腥的味道......");Sleep(1000);
    	Slowsay("Happy End------神仙眷侣");Sleep(1000);
    	Slowsay("???????????????????????????????????");
    	Slowsay("True End------认清?·妹子");
    	if(zjj[3]==0)
    	{
    		Sleep(2000);
    		Slowsay("获得线索-----不变异?·妹子");
    	}
    	zjj[3]=1;Sleep(1000);
    }
    int td4()
    {
    	system("cls");
    	Slowsay("当丧尸危机爆发时,你正呆在家里\n");
    	char ch=_getch();
    	if(vv==0) ch=_getch();
    	system("cls");
    	Slowsay("当丧*#******丧尸危机*$*&*^&*机爆发时,**你正呆***&*爆发******#在家里**\n");Sleep(1000);
    	Slowsay("***检*#******测到*不**丧尸危**88机*$匹*$**机爆发时,**配***#在家里****\n");Sleep(2000);
    	Slowsay("L当****#OG****I危机*$N**E机爆***(RR*8%#404)**发时,**你O*****#在家R里!\n");Sleep(2000);
    	system("cls");
    	if(vv==0) ch=_getch();
    	Slowsay("有什么不对劲");
    	Slowsay("你这样想着");
    	Slowsay("过去了好多天,\n你还是一个人都没有遇到,\n除了丧尸就是丧尸");
    	Slowsay("为什么他们......不见了?");
    	Slowsay("\n");
    	Slowsay("True End------验证失败");
    	zjj[4]=1;
    	if(zbbj==0)
    		Slowsay("进阶线索-----乱码,废弃与失联"),zbbj=1;Sleep(1000);
    }
    int td5()
    {
    	system("cls");
    	Slowsay("当少年死去后,整个世界好像变得不同了");
    	Slowsay("所有的活人在一瞬间消失");
    	Slowsay("所有的丧尸当场去世");
    	Slowsay("你的眼前只剩下了黑暗");
    	Slowsay("不知道过去了多久,你死了");
    	Slowsay("Bad End......");Sleep(1000);
    	Slowsay("不,还没有结束");
    	Slowsay("虽然好像和往常死去之后的感觉一样");
    	Slowsay("但是。。。好像。。。");Sleep(1000);
    	Slowsay("有延迟?。。。");
    	Slowsay("。。。在这段时间里,你的思考一直没停。。。");
    	Slowsay("True End-----死亡姗姗来迟");
    	s++;
    	if(zjj[5]==0)
    		Slowsay("进阶线索-----少年之死");
    	zjj[5]=1;   Sleep(1000);
    }
    int tg3()
    {
    	Slowsay("当你再次睁开眼时");
    	Slowsay("你发现自己躺在一个营养仓内");
    	Slowsay("你无比的确认这就是真实的世界");
    	Slowsay("脑中的一切开始明晰起来");
    	Slowsay("你认为自己知道了一切的真相");
    	Slowsay("去杀光人类吧!!!!");
    	Slowsay("你这样想着");
    	Slowsay("在身着白大褂的丧尸们的欢呼声中");
    	Slowsay("你打碎了玻璃,跑出了营养仓");
    	Slowsay("来到了外面这个被战争破坏得满目疮痍的世界");
    	Slowsay("战火硝烟,炮声隆隆");
    	Slowsay("你熟练的发出嘶吼,呼唤着周围的丧尸");
    	Slowsay("你指挥着他们,毁掉了一个又一个人类的基地");
    	Slowsay("最后,在这场世纪战争中,丧尸们艰难地取得了胜利");
    	Slowsay("作为它们的英雄,你自豪的统治着世界。");
    	Slowsay("虽然,其实,在那些你不知道的地方");
    	Slowsay("一个个一样的营养仓中,装着一个个一样的你。");
    	Slowsay("---------------游戏终极剧情通关-------------");
    	tongguan1=2; Save(); Sleep(1000);
    }
    int tg2()
    {
    	Slowsay("当你再次睁开眼时");
    	Slowsay("你发现自己躺在一个营养仓内");
    	Slowsay("你无比的确认这就是真实的世界");
    	Slowsay("可是你却发现自己没法操纵身体");
    	Slowsay("隔着玻璃,一个黑色的身影正在操作着");
    	Slowsay("你清晰的看见那个人的大脑裸露出来,与你的接在一起");
    	Slowsay("这时,又有一大波记忆涌入脑海。");
    	Slowsay("“少年与妹子......是以“成功者”“英雄”“神话传说”为原型创造的人物......”");
    	Slowsay("“游戏中的情节与场景......取材于现实世界真实案例......”");
    	Slowsay("再往后,你的脑中一片混乱。");
    	Slowsay("“...舍弃.........熟练..我....智慧..学习........获得.....”");
    	Slowsay("“.....种族...探索.......杀...进化.........帮助..需要.....”");
    	Slowsay("“...成熟....兵器.....无敌..下风.......战争...伟大.....英雄.....”");
    	Slowsay("激昂的声音一直回荡着。");
    	Slowsay("---------------游戏进阶剧情通关-------------");
    	tongguan1=1; Sleep(1000);
    }
    int td6()
    {
    	Slowsay("一天以后,少年回来了");
    	Slowsay("一起回来的还有妹子");
    	Slowsay("“找到了......”");
    	Slowsay("少年的手中拿着一个破损的铭牌");
    	Slowsay("铭牌上的字迹很诡异,但写着熟悉的内容:");
    	Slowsay("【22-08-03...】");
    	Slowsay("“你的......”");
    	Slowsay("妹子神色复杂的看了你一眼");
    	Slowsay("“我们是一类人......”");
    	Slowsay("“现在,让我把你带出去吧。”");
    	if(qxs==1&&swx==0)
    	{
    		tg2();
    		return 0;
    	}
    	else
    	{
    		Slowsay("一股强烈的撕扯感出现到了你身上");
    		if(swx==1) Slowsay("此时的你,是如此渴望着死亡与结局\n你大笑着张开双臂,迎接了死亡。");
    		else Slowsay("此时的你并不能接受如此巨大的伤害"),Slowsay("你死了。");
    		Slowsay("Bad End      14");
    		if(hjj[14]==0)
    			Slowsay("进阶线索-----外面的世界");
    		hjj[14]=1;
    		s++;
    	}Sleep(1000);
    }
    
    int bd6()
    {
    	system("cls");
    	Slowsay("你感觉到自己正在变异,");
    	Slowsay("意识开始逐渐模糊起来");
    	Slowsay("你的肚子正无比渴望着食物,你啃噬着触及的一切!");
    	Slowsay("但是不够,你的身躯饿得干枯,你甚至开始食用自己的躯体!");
    	Slowsay("接着,你眼前一黑,再也没有醒来......");
    	s++;
    	hjj[6]=1;
    	Slowsay("Bad End      6");Sleep(1000);
    }
    
    int bd3()
    {
    	system("cls");
    	char ch;
    	Slowsay("长久的等待终于让你失去了理智,你疯了。\n");
    	Slowsay("Bad End   3\n");
    	hjj[3]=1;Sleep(1000);
    	if(mp==-1)
    	{
    		Slowsay("当政府的救援队打开你家的门时,你嘶吼着扑了上去");
    		if(zd>0)
    			Slowsay("他们试图将你击毙,却被你提前一枪击倒");
    		else
    		{
    			Slowsay("你被他们击毙了");
    			Slowsay("Bad End       12");
    			s++;
    			hjj[12]=1;
    			return 0;
    		}
    		Slowsay("你如同一个熟练的猎手,狩猎着救援队");
    		Slowsay("当他们全部死去后,你开始享用起你的大餐");
    		Slowsay("Bad End           13");
    		if(by==0)
    			Sleep(2000),Slowsay("进阶线索-----早已变异!·本我"),by=1;
    		hjj[13]=1;
    		return 0;
    	}
    	s++;
    }
    int bd7()
    {
    	s++;
    	system("cls");
    	Slowsay("你,被狗咬死了");
    	Slowsay("Bad End      7");
    	hjj[7]=1;Sleep(1000);
    }
    
    int bd15()
    {s++;
    	Slowsay("你发现这笔迹有些不对");
    	Slowsay("就好像是新写上去的一样");
    	Slowsay("认字迹的话,好像还十分熟悉");  Sleep(1000);
    	Slowsay("正当你想的入迷的时候,你的脖子被咬住了");
    	Slowsay("在死前,你隐约听到了少年的声音,“Again.”");
    	Slowsay("Bad End     15");
    	if(hjj[15]==0)
    	{
    		Sleep(2000);
    		Slowsay("进阶线索-----伪造......");
    	}
    	hjj[15]=1; Sleep(1000);
    }
    int tgg3()
    {
    	system("cls");
    	Slowsay("你杀掉了少年,并吃掉了他的尸体");
    	Slowsay("世界开始崩塌");
    	tg3(); Sleep(1000);
    }
    int bd9()
    {
    	s++;
    	system("cls");
    	Slowsay("诡异的是,当你杀光了跟来的丧尸后,发现地下室里并没有丧尸");
    	Slowsay("这里有的,只是一个穿着白大褂的尸体");
    	Slowsay("在尸体的衣服口袋中,你找到了一个笔记本");
    	Slowsay("****(无法辨认)1号****进展*****永生**");
    	Slowsay("今********,*号诞生了,他比其*****更*");
    	Slowsay("有些不对,*****的发育*****太快***");
    	Slowsay("2号的**被***出有*****强感染性*****");
    	Slowsay("**********************************");
    	Slowsay("***瓶颈,或许我们**应该****活体样本");
    	Slowsay("**,**样本*****失去活性,*****但**在动\n");
    	if(mp==-1)
    	{
    		bd15();
    		return 0;
    	}
    	Slowsay("正当你看的入迷的时候,你的脖子被咬住了");
    	Slowsay("在死前,你隐约听到了少年的声音,“Again.”");
    	Slowsay("Bad End     9");
    	if(hjj[9]==0)
    	{
    		Sleep(2000);
    		Slowsay("获得线索-----实验体·1号和2号");
    	}
    	hjj[9]=1;Sleep(1000);
    }
    
    int tg()
    {
    	system("cls");
    	Slowsay("不知为何,当你走到这里时,感到世界在一瞬间发生了变化");
    	Slowsay("你不知道这个变化发生在那里,你只知道,现在的世界十分违和");
    	Slowsay("或许,这个世界不是真实的");
    	Slowsay("当你的脑中出现了这个的时候,你眼前的世界,蹦塌了");
    	Slowsay("于此同时,大量记忆冲进了你的脑海");
    	Slowsay("不,它们只是回来了,这本身就是你的记忆");
    	Slowsay("他们在一开始被一些虚假的记忆所替换");
    	Slowsay("从记忆中,你得知你此时正在玩一个vr游戏");
    	Slowsay("少年与妹子则是游戏的npc");
    	Slowsay("这款游戏号称有着超强的代入感");
    	Slowsay("你在发售当天就买来玩了");
    	Slowsay("“这游戏真是了不起啊”,你这样想着,“再玩一次吧”");
    	Slowsay("...是啊,没错,这一切只是游戏,游戏。............");Sleep(1000);
    	Slowsay("躺在仓中的你,自始至终,都没有睁开眼。");
    	Slowsay("---------------游戏基础剧情通关-------------");
    	cdd=0;
    	tongguan=1;Sleep(1000);
    }
    int cg()
    {
    	system("cls");
    	Slowsay("你感觉到违和感在不断加深");
    	Slowsay("世界好像不再是真实的");
    	Slowsay("你现在脑中只有一种想法\n");Sleep(1000);
    	Slowsay("活下去!越久越好!!!"); Sleep(1000);
    }
    int cg2()
    {
    	system("cls");
    	system("Color C");
    	Slowsay("违和感在此时已经聚集到了顶峰\n");
    	Slowsay("你的脑中想清楚了一切\n");
    	Slowsay("1.那么,下一步是  杀光他们\n");
    	Slowsay("2.那么,下一步是  团结起来\n");
    	x=read();
    	if(x==1)
    		Slowsay("已立起尸王线flag,接下来,去打通全 15 badend!"),swx=1,qxs=1;
    	else
    		Slowsay("“看来你还是没懂啊......”背后传来冷冷的声音\n\n“ A  G  A  I  N   . ”");
    	system("Color F");Sleep(1000);
    }
    int Swx()
    {
    	system("cls");
    	Slowsay("哈。。。哈。。。哈。。。。。。");
    	Slowsay("我。。。已经完成了。。。");
    	Slowsay("所有的死法。。。我都体验了一遍了。。。");
    	Slowsay("我。。。一直是只丧尸吧。。。");
    	Slowsay("无论被打倒多少次。。。我都会站起来继续。。。");
    	Slowsay("只要是我想通的结局。。。我便一定会通掉它。。。");
    	Slowsay("只要是我想杀的人。。。我便一定会杀死他。。。");
    	Slowsay("只要是我想知道的真相。。。我便一定会知晓它。");
    	Slowsay("我。。。已经不是以前的那个懦弱无能的我了。。。");
    	Slowsay("这一轮。。。我。。。要成为王!!!\n");
    	Slowsay("在实验室中,为首者发出低哑的嘶吼:");
    	Slowsay("所有人员一级戒备!实验,进入最后阶段!!");
    	Slowsay("------------终极剧情-尸王线开启!------------");cdd=0;
    }
    int bd10()
    {
    	system("cls");
    	Slowsay("你发现了另一个基地");
    	Slowsay("弹尽粮绝的你选择加入了他们");
    	Slowsay("之后的每一天都十分单调");
    	Slowsay("外出寻找物资,然后天黑了回家睡觉");
    	Slowsay("应该是这样吗?");
    	Slowsay("也许吧");
    	Slowsay("Bad End     10");
    	hjj[10]=1; Sleep(1000);
    }
    int hd5()
    {
    	Slowsay("没关系的,一切都会过去的");
    	Slowsay("你这样说的");
    	Slowsay("他似乎感觉到了你的善意,一点一点向你靠近");
    	Slowsay("你紧紧的抱住了他");
    	Slowsay("我会保护好你的"); Sleep(1000);
    	Slowsay("Happy End-----跨越物种的gay~");  Sleep(1000);
    }
    int sswj()
    {
    	Save();
    	system("cls");
    	int w=0;
    	mp=0;
    	if(tongguan==1&&zjj[4]==0)
    	{
    		Slowsay("检测到你已通关,是否领取特殊物品\n");
    		Slowsay("1.领取");
    		Slowsay("2.不领取");
    		while(true)
    		{
    			x=read();
    			if(x==1)
    				mp=-1;
    			if(x==2)
    			{
    				td4();
    				return 0;
    			}
    			break;
    		}
    	}
    	else if(tongguan==1)
    	{
    		Slowsay("检测到你已通关,已领取特殊物品\n");mp=-1;
    	}
    	char ch;
    	if(cdd==1)
    	{
    		Slowsay("是否读取存档\n");
    		Slowsay("1.读取\n");
    		Slowsay("2.不读取\n");
    		x=read();
    		if(x==1)
    		{
    			sw=sw1;
    			zd=zd1;
    			sn=sn1;
    			mz=mz1;
    			mp=mp1;
    			goto cddd1;
    		}
    	}
    	system("cls");
    	Slowsay("当丧尸危机爆发时,你正呆在家里\n");if(vv==0) ch=_getch();
    	Slowsay("你有10点物资可以分配到子弹和食物上");
    	if(swx==2) Slowsay("...\n\n但是!不!我已经不会再惧怕食物短缺与丧尸小兵了!\n\n我,应当是世界的王!!\n"),zd=99999,sw=99999;
    	else{if(vv==0) ch=_getch();
    		int x,y;
    		qiang=0;gun=0;zd=0;sw=0;mz=0;mzzd=0;sn=0;mzhg=0;
    		Slowsay("\n请输入你的选择(此次输入需键入回车,例:5 5 )\n");
    		while(true)
    		{
    			scanf("%d%d",&x,&y);
    			zd=x;sw=y;
    			if(x+y!=10||x<0||y<0)
    			{
    				if(x==666666&&y==5201314)
    				{
    					Slowsay("启用秘籍\n");
    					Slowsay("请输入你真正需要的子弹数和食物数(上限:999 )\n");
    					scanf("%d%d",&x,&y);
    					zd=min(x,999);sw=min(y,999);
    					break;
    				}
    				Slowsay("请重新输入\n");
    				w++;
    				if(w>5)
    				{
    					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
    					Slowsay("行了行了,这只是第一个选择而已\n"),
    					Slowsay("有必要这么皮吗\n"),
    					Slowsay("自动分配食物3个子弹7个\n");
    					if(vv==0) ch=_getch();
    					sw=3,zd=7;
    					break;
    				}
    			}
    			else break;
    		}
    	}
    	Slowsay("你的家里是个较为安全的地方,你可以选择搜索你家的物资或是去邻居家看看\n");
    	if(vv==0) ch=_getch();
    	Slowsay("1.留在家中\n");
    	Slowsay("2.前往邻居家\n");
    	while(true)
    	{
    		x=read();
    		if(x!=1&&x!=2)
    			Slowsay("请重新输入\n");
    		else
    			if(x==1)
    		{if(swx==2) {Slowsay("饿啊!为什么我还呆在家里!!");break;}
    			else {
    				Slowsay("在二楼,你发现了一些食物食物+3\n");
    				if(vv==0) ch=_getch();
    				Slowsay("在家里过了一夜,食物-1\n");
    				sw=sw+2;
    				break;
    			}}
    		else
    		{if(swx==2) {Slowsay("可恶!为什么邻居家里没有人!!");break;}
    			else {
    				Slowsay("在前往邻居家的路上,你遇到了丧尸\n");
    				if(vv==0) ch=_getch();
    				if(zd<1)
    				{
    					Slowsay("你朝他开了一枪,不过枪里没有子弹,你被他咬死了\n");
    					if(vv==0) ch=_getch();
    					hjj[11]=1;
    					Slowsay("Bad End      11\n");
    					s++;
    					if(vv==0) ch=_getch();
    					Slowsay("另外在说一句,一个子弹都不带,还到处乱浪,你是真的作");
    					return 0;
    				}
    				else
    				{
    					Slowsay("你用你手中的枪结束了他的生命,子弹-1\n");
    					zd=zd-1;
    					if(vv==0) ch=_getch();
    					Slowsay("邻居家里不知为何并没有人,你在仔细搜索后发现了一个弹夹,里面有4发子弹\n");
    					zd+=4;
    					if(vv==0) ch=_getch();
    					Slowsay("在邻居家过了一夜后,食物-2\n");
    					sw=sw-2;
    					if(sw<0)
    					{
    						esl();
    						return 0;
    					}
    				}
    				break;
    			}}
    	}
    	if(vv==0) ch=_getch();
    	qp();
    	Slowsay("你回想起这附近有一座商场,你决定\n");
    	if(vv==0) ch=_getch();
    	Slowsay("1.前往商场\n");
    	Slowsay("2.到处乱走\n");
    	Slowsay("3.留在屋子里\n");
    	while(true)
    	{
    		x=read();
    		if(x!=1&&x!=2&&x!=3)
    		{
    			Slowsay("请重新输入\n");
    			continue;
    		}
    		if(swx==2&&x==1) {system("cls"),Slowsay("你循着残存的记忆前往商场,找到了适合你膨胀体型的衣服,可以继续隐藏下去。\n\n"),mz=1;break;}
    		else if(swx==2&&x==2) {system("cls"),Slowsay("你到处乱走,见人即杀,丧尸与人类的血混合着溅满了街道,\n惨叫连连,火光接天,如同末世一般。\n你站在尸山上狂笑,不屑于看那些渺小的灵魂。\n\n然而,你丝毫没有注意,一个娇小的身影远远的看到了你,捂着嘴逃之夭夭。\n\n"),mz=10086;break;}
    		else if(swx==2&&x==3) {system("cls");Slowsay("你如一名老练的猎手忍耐着饥饿,终于等来了敲门声。\n你得意洋洋的屠杀着这送上门来的大餐\n并跟踪着逃兵进入了幸存者基地。\n那一天,残阳似血,为浸染大地的红再镶上一道道金光。\n\n");Sleep(1000);return 0;}
    		else if(x==3)
    		{
    			if(sw<2)
    			{
    				esl();
    				return 0;
    			}
    			Slowsay("无聊正在逐渐消磨你的意志,但你还是坚持了下来。食物-2\n");
    			sw=sw-2;
    			if(vv==0) ch=_getch();
    			Slowsay("之后的每一天你都是这样,独自一人在家中等待救援\n");
    			if(vv==0) ch=_getch();
    			Slowsay("在过了好久之后\n");cout<<mp;
    			if(sw<6)
    			{
    				esl();
    				return 0;
    			}
    			x=rand()%2;
    			if(x==1&&mp==0) {hd1();return 0; }
    			else {bd3();return 0;}
    		}
    		else if(x==2)
    		{
    			int xx=rand()%3;
    			if(xx!=0)
    			{
    				Slowsay("在到处乱走的过程中,你遇到了来自世界各地的丧尸,子弹-2\n");
    				if(zd<2)
    				{
    					mzd();
    					return 0;
    				}
    				zd=zd-2;
    			}
    			else
    			{
    				Slowsay("在到处乱走的过程中,你走入了一处曾为战场的废墟\n");
    				if(vv==0) ch=_getch();
    				Slowsay("你循着硝烟味,终于找到了军队残留的弹药箱,子弹+6\n");
    				zd+=6;
    			}
    			break;
    		}
    		else if(x==1)
    		{
    			if(zd<4)
    			{
    				mzd();
    				return 0;
    			}
    			Slowsay("在前往商场的过程中,你遇到了丧尸,子弹-4\n");
    			zd=zd-4;
    			if(vv==0) ch=_getch();
    			Slowsay("你在商场发现了食物与子弹,食物+3,子弹+2\n");
    			sw=sw+3;zd=zd+2;
    			break;
    		}
    	}
    	if(mz!=10086)
    	{Slowsay("你在回家的路上发现了一个女幸存者\n");
    		if(vv==0) ch=_getch();
    		Slowsay("她试图向你讨要食物,你的选择是\n");
    		Slowsay("1.不给\n");
    		Slowsay("2.给她2份食物\n");
    		Slowsay("3.给她2份子弹\n");
    		Slowsay("4.给她一枪\n");
    		while(true)
    		{
    			x=read();
    			if(x<1||x>4)
    			{
    				Slowsay("请重新输入。\n");
    				continue;
    			}
    			if(x==1)
    			{
    				Slowsay("妹子生气的走了。\n");
    				if(vv==0) ch=_getch();
    			}
    			if(x==2)
    			{
    				if(sw<2)
    				{
    					Slowsay("食物不足\n");
    					continue;
    				}
    				sw=sw-2;
    				mzhg++;
    				Slowsay("你的食物-2,妹子好感度+1\n");
    				if(vv==0) ch=_getch();
    			}
    			if(x==3)
    			{
    				if(zd<2)
    				{
    					Slowsay("子弹不足\n");
    					continue;
    				}
    				mzzd=1;
    				Slowsay("你给了妹子两份子弹,妹子离开了\n"),zd=zd-2;
    				if(vv==0) ch=_getch();
    			}
    			if(x==4)
    			{
    				if(zd<1)
    				{
    					Slowsay("子弹不足\n");
    					continue;
    				}
    				zd=zd-1;
    				Slowsay("你一枪杀死了妹子,并从她的尸体上找到了4份食物\n");
    				sw=sw+4;
    				mzhg=-1;
    				if(swx==2) Slowsay("你吃掉了妹子的尸体,真是人间佳肴!\n"),mzhg=-10086;
    			}
    			if(swx==2&&x!=4) Slowsay("你看着妹子的背影在心中狂笑\n"),mzhg=10086;
    			break;
    		}}
    	Slowsay("又过了一夜,你的食物-2\n");
    	if(vv==0) ch=_getch();
    	qp();
    	sw=sw-2;
    	if(sw<0)
    	{
    		esl();
    		return 0;
    	}
    	if(mzhg==1) Slowsay("那个妹子又来找到了你,并邀请你加入他们的幸存者基地\n");
    	else Slowsay("你在附近发现了一个幸存者基地\n");
    	if(swx!=2){
    		Slowsay("在前往基地的途中,你遇到了丧尸\n");
    		Slowsay("你且战且退,大量丧尸把你逼进了一家商店\n");
    		Slowsay("门口的丧尸越来越多,你选择\n");
    		Slowsay("1.杀出去\n");
    		Slowsay("2.守在这\n");
    		while(true)
    		{
    			x=read();
    			if(x<1||x>2)
    			{
    				Slowsay("请重新输入\n");
    				continue;
    			}
    			if(x==1)
    			{
    				int res=0;
    				if(mzhg>0)
    					res=1;
    				else res=3;
    				if(zd<res)
    				{
    					mzd();
    					return 0;
    				}
    				zd=zd-res;
    				printf("你消耗了一些子弹冲了出去,子弹-%d\n",res);
    				if(mzzd==1&&mp==-1)
    				{
    					Slowsay("妹子在她杀死的丧尸的尸体上找到了许多物资,子弹+7,食物+3\n");
    					zd=zd+7;sw=sw+3;
    					mz=1;
    					break;
    				}
    				x=rand()%5;
    				if(res==1&&x!=3)
    					Slowsay("妹子为了帮你突围,被丧尸咬到,然后自杀了。\n"),mzhg=-1;
    				if(x==3&&res==1)
    				{
    					td3();
    					return 0;
    				}
    			}
    			else
    				if(x==2)
    			{
    				if(zd<5)
    				{
    					mzd();
    					return 0;
    				}
    				zd=zd-5;
    				Slowsay("你守在这家商店里直到杀死了所有找来的丧尸,子弹-5\n");
    				if(mzhg==1)
    				{
    					Slowsay("妹子在商店中发现了一把无限子弹的枪,子弹+10086\n");
    					zd=10086;
    					if(vv==0) ch=_getch();
    					Slowsay("但是妹子在翻找货架的时候被沾了丧尸血的货架划伤\n");
    					Slowsay("妹子自杀了\n");
    					mzhg=-1;
    				}
    			}
    			break;
    		}}
    	if(vv==0) ch=_getch();
    	qp();
    	Slowsay("你来到了这个幸存者基地\n");
    	if(mz==10086) {system("cls");Slowsay("人们在一位年轻首领的带领下顽强的与你战斗\n每个人都在尽自己的努力去守卫基地\n哪怕战友们一个个倒下\n哪怕首领被你愤怒的捏爆脑袋\n没有一个人放弃战斗,没有一个人抛弃希望\n\n最后,奇迹出现了\n\n在基地的废墟中,你的尸体沉重的倒下。\n\n");s++;Sleep(1000);return 0;}
    	Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n");
    	printf("你还有%d份食物,%d份子弹\n",sw,zd);
    	if(vv==0) ch=_getch();
    	Slowsay("请输入你需要的子弹数(0-9)\n");
    	while(true)
    	{
    		x=read();
    		if(x<0||x>sw)
    		{
    			Slowsay("请重新输入\n");
    			continue;
    		}
    		sw=sw-x;
    		zd=zd+x;
    		if(x>=1)
    		{
    			Slowsay("首领很开心你能提供稀缺的食物,多给了你1份子弹\n");
    			zd=zd+2;
    		}
    		break;
    	}
    	if(vv==0) ch=_getch();
    	qp();
    	Slowsay("又过了一天,食物-2");
    	sw=sw-2;
    	if(sw<0)
    	{
    		esl();
    		return 0;
    	}
    	if(vv==0) ch=_getch();
    	system("cls");
    	Slowsay("基地首领希望你加入这个基地\n");
    	Sleep(500);
    	Slowsay("你的选择是\n");
    	Sleep(500);
    	system("Color C");
    	Slowsay("1.留在这");
    	Slowsay("2.离开");
    	while(true)
    	{
    		x=read();
    		if(x<1||x>2)
    		{
    			Slowsay("请重新输入\n");
    			continue;
    		}
    		system("Color F");
    		if(swx==2&&x==1){system("cls");Slowsay("在一个月黑风高的夜里,你终于忍不住袭击了营地。\n年轻首领被你梦中封喉。\n人们顽强的与你战斗\n每个人都在尽自己的努力去守卫基地\n没有一个人放弃战斗,没有一个人抛弃希望\n但是他们失败了。\n在基地的废墟中,英雄们的尸体沉重的倒下。\n\n而你狂笑着吞噬着一切。\n\n");Sleep(1000);return 0;}
    		else if(x==1)
    		{
    			if(mzhg>-1) hd2();
    			else hd3();
    			return 0;
    		}
    		else if(x==2)
    		{
    			Slowsay("你决定\n");
    			Slowsay("1.当天离开\n");
    			Slowsay("2.再停留一天\n");
    			while(true)
    			{
    				x=read();
    				if(x<1||x>2)
    				{
    					Slowsay("请重新输入\n");
    					continue;
    				}
    				if(x==1) break;
    				if(x==2)
    				{
    					if(vv==0) ch=_getch();
    					qp();
    					Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n");
    					printf("你还有%d份食物,%d份子弹\n",sw,zd);
    					if(vv==0) ch=_getch();
    					Slowsay("请输入你需要的子弹数\n");
    					while(true)
    					{
    						x=read();
    						if(x<0||x>sw)
    						{
    							Slowsay("请重新输入\n");
    							continue;
    						}
    						sw=sw-x;
    						zd=zd+x;
    						if(x>=3)
    						{
    							Slowsay("首领很开心你能提供稀缺的食物,多给了你3份子弹\n");
    							zd=zd+3;
    						}
    						break;
    					}
    					sw=sw-2;
    					if(sw<0)
    					{
    						esl();
    						return 0;
    					}
    					Slowsay("又过了一夜,食物-2\n");
    				}
    				break;
    			}
    			Slowsay("在你离开的时候,一个少年跑了过来。\n");
    			Slowsay("他说,他想要和你一起走\n");
    			Slowsay("1.带上他\n");
    			Slowsay("2.不带他\n");
    			while(true)
    			{
    				x=read();
    				if(x<1||x>2)
    				{
    					Slowsay("请重新输入\n");
    					continue;
    				}
    				if(x==2)
    				{
    					Slowsay("少年生气的离开了");
    					if(swx!=2) Slowsay(",当他走远了,你才发现\n\n在刚刚的接触中,他偷走了你所有的子弹\n");
    					else Slowsay("\n当你走远后,你才发现,少年一直冷笑着跟在你的身后\n"),sn=1;
    					zd=0;
    				}
    				if(x==1)
    				{
    					Slowsay("你选择上少年一起走\n");
    					Slowsay("少年将他身上带着的一份食物交给了你\n");
    					sw=sw+1;
    					Slowsay("食物消耗+1,少年入队\n");
    					sn=1;
    				}
    				break;
    			}
    		}
    		break;
    	}
    	if(vv==0) ch=_getch();
    	qp();
    	printf("你在路边的一座没人的房子里过了一夜,食物-%d\n",2+sn);
    	sw=sw-2-sn;
    	if(vv==0) ch=_getch();
    	if(sn==1&&swx==2)
    	{
    		Slowsay("\n1.杀了少年,这时没人可以阻止你!\n");
    		Slowsay("2.我决定在少年面前一直隐瞒到底\n");
    		x=read();
    		if(x==1){Slowsay("少年不见了,难道他发现了......\n\n你一回头,少年咯咯笑着咬住你的脖子\n\n你应该等我虚弱时再下手啊.....\n\n");s++;return 0;}
    	}
    	if(sw<0)
    	{
    		esl();
    		return 0;
    	}
    	Slowsay("是否存档?\n");
    	Slowsay("1.存档(记录当前进度,只能有一个存档)\n");
    	Slowsay("2.不存\n");
    	x=read();
    	if(x==1)
    	{
    		cdd=1;
    		sw1=sw;
    		zd1=zd;
    		mp1=mp;
    		mz1=mz;
    		sn1=sn;
    		Slowsay("存档成功");
    	}
    	cddd1:
    		qp();
    		if(sn==1)
    		{
    			vv=0;
    			Slowsay("今天一早你就被少年叫醒了,\n");
    			if(vv==0) ch=_getch();
    			Slowsay("他在床底下发现了一箱方便面,食物+8\n");
    			sw=sw+8;
    			Slowsay("少年向你讨要武器,你决定\n");
    			Slowsay("1.把枪给他\n");
    			Slowsay("2.把捡到的水管给他\n");
    			Slowsay("3.什么都不给他\n");
    			while(true)
    			{
    				x=read();
    				if(x<1||x>3)
    				{
    					Slowsay("请重新输入\n");
    					continue;
    				}
    				if(x==1) gun=0,qiang=2;
    				if(x==2) gun=2,qiang=1;
    				if(x==3) gun=0,qiang=1;
    				break;
    			}
    		}
    		else
    		{
    			Slowsay("你在冰箱里发现了几包巧克力\n");
    			if(vv==0) ch=_getch();
    			Slowsay("希望它们还没过期吧,食物+3\n");
    			sw=sw+3;
    		}
    		if(vv==0) ch=_getch();
    		Slowsay("今天你们来到了一家大商场\n");
    		Slowsay("你决定\n");
    		Slowsay("1.独自探索1楼\n");
    		Slowsay("2.独自探索2楼\n");
    		if(sn==1)
    		{
    			Slowsay("3.和少年一起探索2楼");
    		}
    		while(true)
    		{
    			x=read();
    			if(x<1||x>3)
    			{
    				Slowsay("请重新输入\n");
    				continue;
    			}
    			if(x==1)
    			{
    				Slowsay("你在一楼发现了一些子弹,子弹+3\n");
    				zd=zd+3;
    				Slowsay("奇怪的是,一只丧尸都没有看到\n");
    				if(vv==0) ch=_getch();
    				if(sn>0)
    				{
    					if(qiang==2)
    					{
    						Slowsay("当你来到二楼时,发现了一地尸体\n");
    						Slowsay("少年就倒在这尸体中间,他死前手还紧紧握着枪\n");
    						Slowsay("你把枪拿了回来,并在少年的尸体下面发现了一箱压缩饼干\n");
    						Slowsay("食物+10086\n");
    						if(vv==0) ch=_getch();
    						sw=10086;
    						if(sw>10000&&zd>9000)
    						{
    							td();
    							return 0;
    						}
    						sn=0;
    						qiang=1;
    					}
    					else
    					{
    						Slowsay("当你来到二楼时,发现了少年的尸体\n");
    						if(vv==0) ch=_getch();sn=0;
    						Slowsay("你紧紧握着手中的枪,猛地一回头\n");
    						Slowsay("四周大量的丧尸向你涌来\n");
    						if(vv==0) ch=_getch();
    						zd=zd-5;
    						if(zd<0)
    						{
    							mzd();
    							return 0;
    						}
    						Slowsay("你杀光了这些丧尸,子弹-5\n");
    						if(vv==0) ch=_getch();
    						Slowsay("你在二楼找到了食物,食物+3\n");
    						sw+=3;
    					}
    				}
    			}
    			if(x==2)
    			{
    				Slowsay("你来到了二楼,数之不尽的丧尸忽然从阴影中窜出\n");
    				if(qiang==2)
    				{
    					Slowsay("尽管你没了枪也尽力抵抗,可丧尸的数量实在太多。\n");
    					mzd();
    					return 0;
    				}
    				if(vv==0) ch=_getch();
    				zd-=5;
    				if(zd<0)
    				{
    					Slowsay("尽管你尽力抵抗,可丧尸的数量实在太多。\n");
    					mzd();
    					return 0;
    				}
    				Slowsay("你杀光了这些丧尸,子弹-5\n");
    				if(vv==0) ch=_getch();
    				Slowsay("你在二楼找到了食物,食物+3\n");
    				sw+=3;
    				if(sn==1)
    				{
    					Slowsay("少年在一楼找到了子弹,子弹+3\n");
    					zd=zd+3;
    				}
    			}
    			if(x==3&&sn==1)
    			{
    				system("cls");
    				Slowsay("你们来到了二楼\n");
    				if(vv==0) ch=_getch();
    				system("Color C");
    				Slowsay("数之不尽的丧尸从阴影中窜出");
    				Slowsay("尽管你们尽力抵抗,可丧尸的数量实在太多。");
    				if(gun!=2&&qiang!=2)
    				{
    					Slowsay("没有武器的少年被当场咬死。");
    					if(mp==-1&&mz==0)
    					{
    						td5();
    						return 0;
    					}
    					sn=0;
    				}
    				Slowsay("其中一只丧尸趁你不注意冲到了你的旁边");
    				if(gun==2) Slowsay("就在你要被咬死的时候,少年扔出了手中的水管\n,救下了你");
    				else if(qiang!=2)
    				{
    					zd=zd-3;
    					if(zd<0)
    					{
    						mzd();
    						return 0;
    					}
    					Slowsay("你赶忙回头几枪补掉了这只丧尸,子弹-3");
    				}
    				zd=zd-3;
    				if(qiang==2||zd<0)
    				{
    					system("Color F");
    					mzd();
    					return 0;
    				}
    				system("Color F");
    				Slowsay("经过了一番苦战,你们终于战胜了所有丧尸,子弹-3");
    				if(vv==0) ch=_getch();
    			}
    			break;
    		}
    		if(vv==0) ch=_getch();
    		qp();
    		if(vv==0) ch=_getch();
    		printf("又过了一夜,食物-%d\n",sn+2);
    		sw=sw-2-sn;
    		if(sw<0)
    		{
    			esl();
    			return 0;
    		}
    		qp();
    		Slowsay("今天在出门的时候\n");
    		Slowsay("你遇到了一条流浪狗\n");
    		Slowsay("1.用枪打死它\n");
    		Slowsay("2.用食物打发它\n");
    		while(true)
    		{
    			x=read();
    			if(x<1||x>2)
    			{
    				Slowsay("请重新输入\n");
    				continue;
    			}
    			if(x==1)
    			{
    				zd=zd-1;
    				if(zd<0)
    				{
    					bd7();
    					return 0;
    				}
    				Slowsay("你一枪打死了这条狗,子弹-1\n");
    				if(sn==0) break;
    				Slowsay("在打死了狗之后,你忽然发现少年的脸色不太好\n");
    				if(vv==0) ch=_getch();
    				Slowsay("原来,在昨天的商场中,少年早就被咬了一口");
    				Slowsay("他一直瞒着你,不敢说出来");
    				Slowsay("此时,他闻到了血腥味,看到了尸体,已经忍不住,濒临变异了!!");
    				Slowsay("你决定\n");
    				Slowsay("1.杀了他\n");
    				Slowsay("2.不杀他\n");int a3=0;
    				if(gjj[4]==1&&zd<4)
    				{
    					Slowsay("3.安抚他\n");a3=1;
    				}
    				while(1)
    				{
    					x=read();
    					if(x<1||x>3||(x==3&&a3==0))
    					{
    						Slowsay("请重新输入\n");
    						continue;
    					}
    					if(x==1)
    					{
    						if(swx==2)
    						{
    							if(mzhg<-1000) tgg3();
    							else Slowsay("\n“杀我还早的很呢......”\n\n少年咯咯笑着挡下了你所有的攻击\n\n“因为你还不是一个优秀的丧尸......”"),Sleep(1000),mzd();
    							return 0;
    						}
    						if(vv==0) ch=_getch();
    						if(mp==-1&&mz==0)
    						{
    							Slowsay("奇怪的是,你直接秒掉了他。\n");Sleep(1000);
    							sn=0;
    							td5();
    							return 0;
    						}
    						else if(mp==-1&&mz!=0)
    						{
    							Slowsay("突然,妹子出现了。\n");
    							Slowsay("“放着我来!”,妹子与少年搏斗起来,妹子的力气极大,竟然真的压制住了少年!\n");
    							Slowsay("在你的惊恐目光下,少年的皮肤渐渐变淡,重新变回了“人”!\n");
    							Slowsay("这时,你才注意到少年的声音一直带着点沙哑,如同低吼一般\n");
    							Slowsay("“我没事。”他说。\n");
    						}
    						else
    						{
    							system("Color C");
    							Slowsay("你试着向他开枪,子弹穿过了他的身体\n");
    							Slowsay("你十分惊恐,疯狂地倾泻着手中的弹药\n");
    							Slowsay("“没有用的。”少年咯咯笑着向你走进,\n");
    							Slowsay("而他的伤口却以肉眼可见的速度愈合!\n");
    							Slowsay("怎么可能!怎么可能,怎么可能......\n");
    							system("Color F");
    							mzd();
    							if(zjj[9]==0)
    							{
    								Slowsay("获得线索-----无敌变异!·少年\n");Sleep(1000);
    								zjj[9]=1;
    							}
    							return 0;
    						}
    					}
    					if(x==2)
    					{
    						system("Color C");
    						Slowsay("你看着少年变异\n");
    						Slowsay("奇怪的是,他变异后并没有像其他的丧尸一样,向你扑过来\n");
    						Slowsay("而是躲在墙角瑟瑟发抖\n");
    						Slowsay("你慢慢的走过去\n");
    						Slowsay("就在你走近的时候,少年突然暴起\n");
    						Slowsay("狠狠地咬住了你的手臂\n");
    						Slowsay("你赶忙用枪打死他,可是为时已晚\n");
    						system("Color F");
    						sn=0;
    						if(sw>=6){td2();return 0;}
    						else{bd6();return 0;}
    					}
    					break;
    				}
    				if(x==3&&gjj[4]==1)
    				{
    					gjj[5]=1;
    					hd5();
    					return 0;
    				}
    			}
    			if(x==2)
    			{
    				sw=sw-1;
    				if(sw<0){bd7();return 0;}
    				Slowsay("你用一份食物引开了这条狗,食物-1\n");
    			}
    			break;
    		}if(swx==2)
    		{system("cls");if(sn==1) Slowsay("少年的变异的很突然,但身为丧尸的你没有受到攻击\n你们结伴一起狩猎着人类\n只是,与少年相处的越久,你就越发感受到他的强大。\n你只好收起杀心跟在他后面。\n应该是这样吗?"),Sleep(1000),Slowsay("\n\n“我错过了机会”\n");
    			else Slowsay("少年死后,你无聊的屠杀着一切,\n在接下来的几天里,你轻松的杀掉了城中所有的生物\n之后,你只能天天游荡,无助的面对着这座死城\n应该是这样吗?\n"),Sleep(1000),Slowsay("\n“我走错了路。”");
    			Sleep(1000);return 0;}
    		if(vv==0) ch=_getch();
    		if(sn==1&&sw>=4&&gun==2&&zd>5){hd4();return 0;}
    		if(sn==1)
    		{
    			Slowsay("又过了一天,食物-2\n");
    			sw=sw-2;
    			if(sw<0){esl();return 0;}
    			if(vv==0) ch=_getch();
    			system("cls");
    			Slowsay("今天早上,你发现少年不见了\n");
    			Slowsay("你决定\n");
    			Slowsay("1.去寻找他\n");
    			Slowsay("2.不去找他\n");
    			while(true)
    			{
    				x=read();
    				if(x<1||x>2)
    				{
    					Slowsay("请重新输入\n");
    					continue;
    				}
    				if(x==1)
    				{
    					system("cls");qp();
    					Slowsay("你通过蛛丝马迹一路追踪,来到了一座大厦前\n");
    					Slowsay("在路上,你遭遇了丧尸,子弹-2\n");
    					zd=zd-2;
    					if(zd<0)
    					{
    						mzd();
    						return 0;
    					}
    					Slowsay("你决定\n");
    					system("Color C");
    					Slowsay("1.破门!冲入大厦\n");
    					Slowsay("2.悄悄开门,潜入大厦\n");
    					Slowsay("3.寻找其它的入口\n");
    					while(true)
    					{
    						x=read();
    						if(x<1||x>3)
    						{
    							Slowsay("请重新输入\n");
    							continue;
    						}
    						if(x==1)
    						{
    							int xx=rand()%4;
    							Slowsay("你进入大厦才发现这里几乎充满了丧尸!");
    							Slowsay("丧尸似乎被你惊醒,如同海啸般向你涌来!");
    							system("Color F");
    							if(zd>6) Slowsay("怎么回事!!你一路且战且退来到了地下室"),zd-=6,bd9();
    							else if(xx==0) Slowsay("幸运的是,你退后的脚碰到了地下室的暗门,Thanks God!"),bd9();
    							else Sleep(1000),mzd();
    							return 0;
    						}
    						if(x==2)
    						{
    							int xx=rand()%6;
    							Slowsay("你进入大厦才发现这里几乎充满了丧尸!");
    							system("Color F");
    							Slowsay("怎么回事!!你害怕得定在原地,奇怪的是它们并没有向你扑来,只是疲惫的看着你。");
    							Slowsay("定睛一看,丧尸们个个躯体畸形,断手断脚者不乏其数");
    							Slowsay("再一看,这些丧尸们被奇怪的机器束缚,不得踏出大厦一步。");
    							Slowsay("你大着胆子靠近一个丧尸,发现它的头上有着模糊的字迹");
    							Slowsay("【21.7.29,失败】");Sleep(1000);
    							Slowsay("瞬间,那个丧尸惊恐地捂住头上的字,发出奇怪的吼声!");
    							Slowsay("其它丧尸如同被激怒,海啸般向你涌来!");
    							if(zd>6) Slowsay("怎么回事!!你一路且战且退来到了地下室"),zd-=6,bd9();
    							else if(xx==0) Slowsay("幸运的是,你退后的脚碰到了地下室的暗门,Thanks God!"),bd9();
    							else Sleep(1000),mzd();
    							return 0;
    						}
    						if(x==3)
    						{
    							system("Color F");
    							Slowsay("你走入刚刚的大街,你的老相识开心地吐着舌头看着你");
    							Slowsay("......后面跟着它的一堆朋友......");
    							Slowsay("......你被讨食的狗狗们追着跑过了两条大街,不停地扔出食物来减缓它们的攻势......");
    							if(sw>5) Slowsay("终于,它们全部满足的趴倒在了地上。\n领头狗如同可以听懂人话一样,将你带到了一个隐蔽的地道口前......"),sw-=5,bd9();
    							else bd7();
    							return 0;
    						}
    						break;
    					}
    				}
    				break;
    			}
    		}
    		qp();
    		if(vv==0) ch=_getch();
    		if(mz==1&&sn==1&&swx==0){td6();return 0;}
    		Slowsay("又过了一天,食物-2");
    		sw=sw-2;if(sw<0){esl();return 0;}
    		Sleep(500);
    		Slowsay("遭遇丧尸,子弹-3");
    		zd=zd-3;if(zd<0){mzd();return 0;}
    		Sleep(500);
    		Slowsay("又过了一天,食物-2");
    		sw=sw-2;if(sw<0){esl();return 0;}
    		Sleep(500);
    		Slowsay("遭遇丧尸,子弹-2");
    		zd=zd-2;if(zd<0){mzd();return 0;}
    		Sleep(500);
    		if(ccg==1){tg(); return 0;}
    		else{bd10();return 0;}
    }
    int main()
    {
    	srand(time(0));
    	Read();
    	int go=0;
    	while(tongguan1!=2)
    	{
    		int v=0;
    		char ch;
    		mp=0;
    		if(go==1){
    			Sleep(1000);
    			if(vv==0) ch=_getch();
    			system("cls");Save();}go=1;
    		Slowsay("1.进行游戏\n");
    		Slowsay("2.查看成就\n");
    		Slowsay("3.查看线索(获得全部线索后通关游戏)\n");
    		Slowsay("4.获得一条随机的提示\n");
    		Slowsay("5.游戏相关\n");
    		Slowsay("6.极速模式\n");
    		Slowsay("7.退出游戏\n");
    		x=read();
    		if(x==1)
    		{
    			sswj();
    			if(s>50&&swhm==0)
    			{
    				swhm=1;
    				Slowsay("又死了啊......");
    				Slowsay("这已经是第几次了呢......");
    				Slowsay("一个柔和的声音从耳边传来");
    				Slowsay("或许早该放弃了");Sleep(1000);
    				Slowsay("获得线索-----计数者");
    			}
    		}
    		if(x==2)
    		{
    			int v1=0;
    			system("cls");
    			if(tongguan1==2) Slowsay("\n已通关终极剧情\n");
    			if(tongguan1==1) Slowsay("\n已通关进阶剧情(进阶不重要!终极才是王道!)\n");
    			if(tongguan==1) Slowsay("\n已通关基础剧情\n");
    			int v=0;
    			Slowsay("\nHappy Bnd 达成\n");
    			if(gjj[1]==1) Slowsay("苟到最后\n");else Slowsay("未达成\n");
    			if(gjj[2]==1) Slowsay("神仙眷侣\n");else Slowsay("未达成\n");
    			if(gjj[3]==1) Slowsay("英雄不朽\n");else Slowsay("未达成\n");
    			if(gjj[4]==1) Slowsay("认清自己\n");else Slowsay("未达成\n");
    			if(gjj[5]==1) Slowsay("跨越物种的gay\n");else Slowsay("未达成\n");
    			Slowsay("\n");
    			Slowsay("Bad End 达成(共15个)\n");
    			for(int i=1;i<=17;i++)
    				if(hjj[i]==1)
    					printf("%d ",i),v1++;
    			if(v1>=15&&swx==1)
    				swx=2,cdd=0,Swx();
    			Slowsay("\n");
    			printf("当前死亡次数:%d",s);
    			Slowsay("\n");
    			Slowsay("True End 达成\n");
    			if(zjj[1]==1) Slowsay("拯救世界\n");else Slowsay("未达成\n");
    			if(zjj[3]==1) Slowsay("认清?·妹子\n");else Slowsay("未达成\n");
    			if(zjj[2]==1) Slowsay("认清!·本我\n"); else Slowsay("未达成\n");
    			if(zjj[4]==1) Slowsay("验证失败\n");else Slowsay("未达成\n");
    			if(zjj[5]==1) Slowsay("死亡姗姗来迟\n");else Slowsay("未达成\n");
    			Slowsay("\n");
    			if(vv==0) char ch=_getch();
    		}
    		if(x==3)
    		{
    			system("cls");
    			int v=0;
    			Slowsay("基础线索\n");
    			if(zjj[1]==1) Slowsay("    奇特的枪与饼干\n"),v++;else Slowsay("    ?????\n");
    			if(zjj[2]==1) Slowsay("    延迟变异?·少年\n"),v++;else Slowsay("    ?????\n");
    			if(zjj[9]==1) Slowsay("    无敌变异!·少年\n"),v++;else Slowsay("    ?????\n");
    			if(zjj[3]==1) Slowsay("    不变异?  ·妹子\n"),v++; else Slowsay("    ?????\n");
    			if(hjj[8]==1) Slowsay("    早已变异!·妹子\n"),v++; else Slowsay("    ?????\n");
    			if(hjj[9]==1) Slowsay("    实验体·1号和2号\n"),v++; else Slowsay("    ?????\n");
    			if(v>=6&&ccg==0)
    			{
    				Sleep(2000);
    				cdd=0;cg();ccg=1;
    			}
    			Slowsay("进阶线索\n");
    			if(swhm==1) Slowsay("    计数者\n"),v++; else Slowsay("    ?????\n");
    			if(zbbj==1) Slowsay("    乱码,废弃与失联\n"),v++; else Slowsay("    ?????\n");
    			if(by==1) Slowsay("    早已变异!·本我\n"),v++; else Slowsay("    ?????\n");
    			if(hjj[15]==1) Slowsay("    伪造......\n"),v++; else Slowsay("    ?????\n");
    			if(zjj[5]==1) Slowsay("    少年之死\n"),v++; else Slowsay("    ?????\n");
    			if(hjj[14]==1) Slowsay("    外面的世界\n"),v++; else Slowsay("    ?????\n");
    			if(v>=12&&qxs==0)
    			{
    				Sleep(2000);
    				cg2();cdd=0;Sleep(1000);
    				Slowsay("-------- 游戏进阶结局已解锁(快前往达成吧)--------");qxs=1;
    			}
    			if(vv==0) ch=_getch();
    		}
    		if(x==4)
    		{
    			system("cls");
    			int y=rand()%3;
    			if(y==0){Slowsay("【稀有提示】"); x=rand()%14;
    				if(x==0) Slowsay("【稀有结局提示】 试试 0 10 开局!");
    				else if(x==1) Slowsay("【稀有结局提示】 最好的爱总要先错过~");
    				else if(x==2) Slowsay("【剧情提示】 二周目:少年变异后有新剧情!");
    				else if(x==3) Slowsay("【剧情提示】 不变异的妹子总有一天会在营地暴露!再来一遍!");
    				else if(x==4) Slowsay("【剧情提示】 弹尽粮绝之时,变异的少年会记起上辈子的爱情!再来一遍!");
    				else if(x==5) Slowsay("【剧情提示】 第二天,和首领换更多子弹,他会更开心!");
    				else if(x==6) Slowsay("【剧情提示】 在家里等待疯掉?再来一遍!");
    				else if(x==7) Slowsay("【剧情提示】 二周目:再次进入实验室吧!");
    				else if(x==8) Slowsay("【剧情提示】 二周目:神枪手妹子...");
    				else if(x==9) Slowsay("【剧情提示】 二周目:不带子弹!等待救援!");
    				else if(x==10) Slowsay("【通关方式】 二周目:在获得所有线索后前往“外面的世界”。");
    				else if(x==11) Slowsay("【通关方式】 三周目:(都提示这么明显了)吃掉妹子,杀掉少年。");
    				else if(x==12) Slowsay("【线索提示】 死亡很多次后......(有个地方可以刷死亡次数)");
    				else Slowsay("【???】 666666,5201314(会错过一些线索与结局!)");
    			}else{x=rand()%14;
    				if(x==0) Slowsay("加了好感后,妹子有几率不死");
    				else if(x==1) Slowsay("少年喜欢子弹");
    				else if(x==2) Slowsay("乱走有时可以获得子弹");
    				else if(x==3) Slowsay("冲进去活下来几率更大");
    				else if(x==4) Slowsay("分头探商店可以获得更多资源");
    				else if(x==5) Slowsay("有一些结局只能通关后触发");
    				else if(x==6) Slowsay("有一些结局要脸好才能触发");
    				else if(x==7) Slowsay("有一些结局要通其他结局后才能触发");
    				else if(x==8) Slowsay("大多数时候,你认为一个地方没有好结局只是因为你食物/子弹不够");
    				else if(x==9) Slowsay("绝大多数的线索来自结局");
    				else if(x==10) Slowsay("三大重叠剧情线路:普通,进阶,尸王线");
    				else if(x==11) Slowsay("本游戏是一个剧情严谨,人物丰满,细思极恐的好!游!戏!~");
    				else if(x==12) Slowsay("事实证明剧情游戏是最难调的!有Bug一定要去博客说出来啊!(luogu.com.cn/blog/z1e2k3i4/)");
    				else Slowsay("完成目标后,需要在线索,成就界面开启新剧情哦");
    			}
    			if(vv==0) char ch=_getch();continue;
    		}
    		if(x==5)
    		{
    			system("cls");
    			Slowsay("作者:程梓豪\n");
    			Slowsay("改错,调试,搬运,游玩:胎神大大(就是在游戏论坛翻到的宝藏而已emm......)\n");
    		}
    		if(x==6)
    		{
    			system("cls");
    			if(vv==0) vv=1,Slowsay("已开启极速模式");
    			else vv=0,Slowsay("已关闭极速模式");
    		}
    		if(x==7)
    		{
    			system("cls");
    			Slowsay("想退?死吧!!");s++;
    		}
    	}
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
    	Slowsay("Thanks for playing......");Sleep(1000);
    	Slowsay("您已通关,我亲爱的 终极丧尸,成功者,杀人机器,你还没杀够吗?......");system("Color C");
    }
    
    
    
    
    #include<conio.h>
    #include<windows.h>
    #define rint register int 
    #define mmt(a,b) memset(a,b,sizeof(a))
    #define test(x) cout<<#x<<" = "<<x<<endl
    #define made by Polynswin
    #define endl '\n'
    #define enter putchar(endl)
    //#define int long long
    using namespace std;
    const int inf=0x3f3f3f3f,N=5e2+10;
    const int dir_get_dpx[9]={0,0,-1,-1,-1,0,1,1,1},
    		  dir_get_dpy[9]={0,1,1,0,-1,-1,-1,0,1},
    		  item_cht[N] = {-1, 4, 5, 6, 7};
    int mapw, maph, score, cnt, dir;
    int lasts, lasts2, fps, run, vision_radius, startTime, choose=1, Rclick, key, mob_dizzy_time = 4000, shown_dir;
    int item[N], item_len=4;
    vector<int> item_score= {-1, 20, 10, 15, 20},
    			item_color= {-1, 1, 2, 5, 6};
    bool clean_screen = true, enable =false, update_map, custom_map;
    vector<string> item_name={"", "guide", "flash", "bomb", "vision"};
    vector<string> mode_name = 
    {		"",
    		"特殊道具", "迷宫塌方",	"收集钥匙", "爆炸伤害", "怪物追击", 
    		"灯光不足(尚未开放)", "双人对战(尚未开放)", "特殊道具2(尚未开放)",
    };
    double cntttt=3, b_r = 0.75;//blocking_radius
    int debug_cnt = 1,player_speed,mob_speed;
    int last_time[N] = {-1, 0, -5001},
         interval[N] = {-1, 2000, 5000};
    string numball[N] = {" ","①","②","③","④","⑤","⑥","⑦","⑧","⑨"};
    int mode_init[N][N]=
    {
    	{},
    	{-1, 10, 10, 2, 2, 1, 10},
    	{-1, 20, 20, 5, 4, 3, 40} ,
    	{-1, 40, 40, 12, 4, 8, 60},
    	{-1, 100, 100, 100, 10, 20, 100},
    	{-1, 0, 0, 0, 0},
    },
    	mode_item[N][N]=
    {
    	{},
    	{-1, 1, 2, 0, 1},
    	{-1, 3, 5, 3, 2},
    	{-1, 7, 8, 5, 5},
    	{-1, 20, 40, 20, 10},
    	{-1, 0, 0, 0},
    },
    	mode_item_init[N][N]=
    {
    	{},
    	{-1, 1, 1, 1, 0},
    	{-1, 3, 1, 1, 0},
    	{-1, 4, 2, 2, 0},
    	{-1, 0, 3, 3, 1},
    	{-1, 0, 0, 0},
    }
    	;
    bool mode[N];
    string state;
    char ptmap[N][N], mapx[N][N], map2[N][N];
    bool game_over = false, out_of_menu = false;
    bool debug=0,vis[N][N];
    struct pos{
    	int x,y;
    	bool operator == (const pos &a) const
    	{
    		return a.x==x && a.y==y;
    	}
    	bool operator != (const pos &a) const
    	{
    		return a.x!=x || a.y!=y;
    	}
    }p, cam, vision, cam_dp, aim, last_pos, anchor, start, vision2, vision_init;
    pos fa[N][N];
    struct Path{
    	pos ps;
    	bool highlight;
    };
    struct Mob{
    	int x,y,dir;
    	int last_time_dizzy;
    	pos locate;
    	bool chasing;
    };
    char mob_cht = '!',mob_dizzy_cht = '~';
    pos pre[N][N];
    vector<Mob> mob;
    vector<pos> wall, keys;
    vector<Path> path;
    void Color(int a);
    void Setpos(int x,int y);
    void RealSetpos(int x,int y);
    void SlowDisplay(int x,string p);
    void HideCursor();
    void showCursor();
    void win();
    void lose();
    int sprand(int l,int r);
    int pow2(int x){  return x * x;  }
    double _pow2(double x){  return x * x;  }
    double calc_dist(pos a,pos b){	return sqrt( pow2(a.x-b.x) + pow2(a.y-b.y) ); }
    void canvas(pos x,int color,string s){ Setpos(x.x,x.y); Color(color); cout<<s; }
    double set_float(double x,int t){return int(x*pow(10,t))/pow(10,t);}
    void fps_count();
    void paint();
    void button_check();
    void player_check();
    void player_move();
    void game_update();
    void print_menu();
    void enter_menu();
    void enter_custom_choose();
    void enter_game(bool custom);
    void enter_updates();
    void enter_rule();
    void enter_rule_item();
    void enter_rule_mode();
    void data_update();
    void enter_setting();
    void enter_difficulty_setting();
    void enter_mode_setting();
    void generate_item(int idx,int n);
    void generate_mob(int n);
    void generate_block(int n);
    void generate_key(int n);
    void generate_maze();
    string str(int x);
    pos find(pos x);
    void ending_of_game();
    bool join(pos a, pos b);
    bool wall_check(int x);
    bool dfs_get_way(pos cur);
    bool bfs_get_way(pos s);
    bool check_time(int x);
    void mob_move();
    void mob_detect(int i);
    bool detecting_check(pos a,pos b);
    void debug_out(string text);
    bool mob_dizzy(int i);
    bool press(char k,char x){bool res = k == x; if('a'<=x&&x<='z')res|= k == x - 'a' + 'A'; if('A'<=x&&x<='A')res|= k == x - 'A' + 'a';return res; }
    inline void read(int &x);
    inline void ffout(int x);
    inline void ffout(int x,char b);
    void enter_editor();
    void save_map();
    void load_map();
    signed main()
    {
    	//made by Polynswin
    	//部分windows代码 借鉴于胎神 luogu@TSzza 
    	int i,j;
    	srand(time(0));
    	HideCursor();
    	enter_menu();
    	return 0;
    }
    
    
    bool bfs_get_way(pos s)
    {
    	for(rint i=1; i<=maph; ++i)
    		for(rint j=1; j<=mapw; ++j)
    			vis[i][j] = false;
    	queue<pos> q;
    	q.push(s);
    	vis[s.x][s.y] = true;
    	pre[s.x][s.y] = {-1,-1} ;//注:不重置也可以正常run 
    	while(!q.empty())
    	{
    		pos u = q.front();
    		q.pop();
    		for(rint i=1; i<=4; ++i)
    		{
    			int tx = u.x+dir_get_dpx[(i<<1)-1], ty = u.y+dir_get_dpy[(i<<1)-1];
    			if(tx<0 || ty<0 || tx>maph || ty>mapw || vis[tx][ty] || mapx[tx][ty]=='#')continue;
    			vis[tx][ty] = true;
    			pre[tx][ty] = u ;
    			if(mapx[tx][ty] == '*')
    			{
    				pos cur = {tx,ty};
    				while(pre[cur.x][cur.y] != pos({-1,-1}) )
    				{
    					cur = pre[cur.x][cur.y];
    					path.push_back(Path({cur.x,cur.y,false}));
    				}
    				for(rint i=0; i<=(path.size()-1>>1); ++i)
    					swap(path[i],path[path.size()-i-1]);
    				return true;
    			}
    			q.push(pos({tx,ty}));
    		}
    	}
    	return false;
    }
    void edst_clean(int seth,int setw)
    {
    	for(rint i=1;i<=seth;++i)
    		{canvas( {i,0}, 8, "  "); canvas( {i,setw+1}, 8, "  "); }
    	for(rint i=0;i<=setw+1;++i)
    		{canvas( {seth+1,i}, 8, "  "); canvas( {0,i}, 8, "  "); }
    	for(rint i=1; i<=seth; ++i)
    		for(rint j=1; j<=setw; ++j)
    			canvas({i,j},0,"  ");
    	
    }
    void enter_edst_cur2(int seth,int setw,bool *e_mode)
    {
    	
    	int ent = 10, column = 2, cur = 1, len = mode_name.size() ;
    	edst_clean(seth, setw);
    	while(1)
    	{
    		for(rint i=1; i<=len; ++i)		
    		{
    			int tx = 1+(i-1)/column*2, ty = 2 + (i-1)%column*ent;
    			if(cur == i)canvas({tx, ty-1},0, " >");
    			else canvas({tx, ty-1},0, "  ");
    			if(i==len)
    			{
    				canvas({tx,ty},0, "返回上一级");
    				break;
    			}
    			int col=0;
    			if(e_mode[i])col=2;
    			canvas( {tx,ty}, col, mode_name[i]);
    		}
    		char k = getch();
    		if(press(k, 'w'))cur = (cur-1 - column + len) % len + 1;
    		if(press(k, 's'))cur = (cur-1 + column)%len + 1;
    		if(press(k, 'a'))cur = (cur-2 + len) % len + 1;
    		if(press(k, 'd'))cur = cur % len + 1;
    		if(press(k, 'o'))
    			if(cur!=len)e_mode[cur] ^= 1;
    			else break;
    		if(press(k, 27))break;
    	}
    	edst_clean(seth, setw);
    }
    void enter_edcs_setting()
    {
    	
    }
    void enter_editor()
    {
    	int curx = 1,cury = 1, chs = 1;
    	int ct_maph = 10, ct_mapw = 10, tool_len, item_chs = 1;
    	string state = "map";
    	pos ct_start = {0,0}, ct_vision = {10,10},ed_vision = {10,10};
    	int ct_item_init[N] = {-1, 0, 0, 0, 0};
    	char ct_map[N][N];
    	bool ct_mode[N];
    	mmt(ct_mode,false);
    	vector<char> tool_bar = {'1', ' ', '#', '*', 's', '@', (char)mob_cht, (char)item_cht[1]}; tool_len = tool_bar.size() - 1;
    	mmt(ct_map,' ');
    	cam_dp = {7,1};
    	system("cls");
    	update_map = true;
    	while(1)
    	{
    		if(!ct_mode[1]) item_chs = 1;
    		if(update_map)
    		{
    			canvas({-7,1},0, "map width: "+str(ct_mapw)+"    ");
    			canvas({-6,1},0, "map height:"+str(ct_maph)+"    ");
    			
    			for(rint i=0;i<=ct_maph+1;++i)
    				{canvas( {i,-1}, 8, "  "); canvas( {i,ct_mapw+2}, 8, "  "); }
    			for(rint i=-1;i<=ct_mapw+2;++i)
    				{canvas( {ct_maph+2,i}, 8, "▁▁"); canvas( {-1,i}, 8, "▁▁"); }
    				
    			for(rint i=0; i<=ct_mapw+1; ++i)
    				{canvas( {ct_maph+1,i}, 0, "■"); canvas( {0,i}, 0, "■"); }
    			for(rint i=1; i<=ct_maph; ++i)
    				{canvas( {i,0}, 0, "■"); canvas( {i,ct_mapw+1}, 0, "■"); }
    			for(rint i=1;i<=ct_maph;++i)
    			{
    				for(rint j=1;j<=ct_mapw;++j)
    				{
    					Setpos(i,j);
    					if(ct_map[i][j] == '#'){ Color(0); cout<<"■"; }
    					if(ct_map[i][j] == '*'){ Color(8); cout<<"* "; }
    					if(ct_map[i][j] == 's'){ Color(8); cout<<"s "; }
    					if(ct_map[i][j] == '@'){ Color(8); cout<<"^ "; }
    					if(ct_map[i][j] == ' '){ Color(0); cout<<"  "; }
    					if(ct_map[i][j]==mob_cht){ Color(8); cout<<"●";}
    					for(rint k=1;k<=item_len;++k)
    						if(ct_map[i][j] == item_cht[k])
    							{ Color(item_color[k]); cout<<"☆"; }
    				}
    			}
    			for(rint i=1;i<=tool_len; ++i)
    				if( i==chs)canvas({-4,i<<1},0,"↓");
    				else canvas({-4,i<<1},0,"  ");
    			for(rint i=1;i<=tool_len; ++i)
    			{
    				Setpos(-3,i<<1);
    				if(tool_bar[i] == '#'){ Color(0); cout<<"■"; }
    				if(tool_bar[i] == '*'){ Color(8); cout<<"* "; }
    				if(tool_bar[i] == 's'){ Color(8); cout<<"s "; }
    				if(tool_bar[i] == ' '){ Color(3); cout<<"×"; }
    				if(tool_bar[i] == '@'){ Color(8); cout<<"^ "; }
    				if(tool_bar[i]==mob_cht){ Color(8); cout<<"●";}
    				if(i == 7 ){ Color( item_color[item_chs] ); cout<<"☆"; }
    			}
    			for(rint i=1;i<=tool_len; ++i)
    				canvas({-2,i<<1},0,numball[i]);
    //			if(clock()%1000 < 500)canvas({curx,cury},0, "  "); 
    			canvas({curx+1,cury},0, "↑"); 
    		}
    		update_map = false;
    		if(kbhit())
    		{
    			char k =getch();
    			if(state == "map")
    			{
    				if(press(k, 'w'))curx = (curx-2+ct_maph) % ct_maph + 1, update_map = true;
    				if(press(k, 's'))curx = curx%ct_maph + 1, update_map = true;
    				if(press(k, 'a'))cury = (cury-2+ct_mapw) % ct_mapw + 1, update_map = true;
    				if(press(k, 'd'))cury = cury%ct_mapw + 1, update_map = true;
    				
    				if('1'<=k&&k<=tool_len + '0')
    				{
    					if(k == '7' && chs == 7)
    					{
    						if(ct_mode[1]) item_chs = item_chs%item_len + 1;	
    						else item_chs =  1;	
    						tool_bar[7] = item_cht[item_chs];
    					}
    					chs = k - '0'; update_map = true;
    				}
    			}
    			if(press(k, 27))
    			{
    				cam_dp = {7,ct_maph>>1};
    				int setw = 22,seth = 10, cur = 1,len;
    				vector<string> text = {" ", "修改游戏参数", "修改游戏模式", "加载地图", "保存地图", "退出编辑器"};
    				len = text.size() - 1;
    				int column = 2, ent = 14;
    				edst_clean(seth, setw);
    				while(1)
    				{
    					for(rint i=1; i<=len ; ++i)
    					{
    						int tx = 1+(i-1)/column*2, ty = 2 + (i-1)%column*ent;
    						if(cur == i)canvas({tx, ty-1},0, " >");
    						else canvas({tx, ty-1},0, "  ");
    						canvas( {tx,ty}, 0, text[i]);
    					}
    					char k = getch();
    					if(press(k, 'w'))cur = (cur-1 - column + len) % len + 1;
    					if(press(k, 's'))cur = (cur-1 + column)%len + 1;
    					if(press(k, 'a'))cur = (cur-2 + len) % len + 1;
    					if(press(k, 'd'))cur = cur % len + 1;
    					if(press(k, 27))
    					{
    						update_map = true;
    						break;
    					}
    					if(press(k, 'o'))
    					{
    						if(cur == 1)
    						{
    							int cur2 = 1, column2 = 1, len2 = 4;
    							vector<string> text = {"", "迷宫宽度:", "迷宫长度:", "初始视野宽度:", "初始视野长度:"
    								, "初始引导之星数量:", "初始闪现数量:", "初始炸弹数量:", "初始探远星数量:"
    							};
    							vector<int*> value = {NULL, &ct_mapw, &ct_maph, &ct_vision.x, &ct_vision.y};
    							for(rint i=1; i<=item_len; ++i)
    								value.push_back(&ct_item_init[i]);
    							len2 = text.size() - 1;
    							edst_clean(seth, setw);
    							while(1)
    							{
    								for(rint i=1; i<=len2; ++i)
    								{
    									if(i == cur2)canvas({i,2},0 , " >");
    									else canvas({i,2},0 , "  ");
    									canvas({i,3},0 , text[i]);
    									canvas({i,3+text[i].size()/2},0 , str(*value[i]) + "    ");
    								}
    								char k = getch();
    								if(press(k, 27))
    									break;
    								if(press(k, 'w'))cur2 = (cur2-1 - column2 + len2) % len2 + 1;
    								if(press(k, 's'))cur2 = (cur2-1 + column2)%len2 + 1;
    								if(press(k, 'o'))
    								{
    									showCursor();
    									canvas({cur2,3+text[cur2].size()/2},0 , "    ");
    									Setpos(cur2,3+text[cur2].size()/2);
    									cin>>*value[cur2];
    									HideCursor();
    								}
    							}
    							edst_clean(seth, setw);
    						}
    						if(cur == 2) enter_edst_cur2(seth,setw,ct_mode);
    						if(cur == len - 2)
    						{
    							edst_clean(seth, setw);
    							canvas({seth>>1,setw/2-7}, 0, "这会覆盖当前地图编辑,你确定要这么做吗"); 
    							canvas({seth/2+2,setw/2-4}, 0, "确认"); 
    							canvas({seth/2+2,setw/2+4}, 0, "取消"); 
    							bool confirm = 1;
    							while(1)
    							{
    								if(confirm)canvas({seth/2+2,setw/2-5}, 0, " >"), canvas({seth/2+2,setw/2+3}, 0, "  ");
    								else canvas({seth/2+2,setw/2-5}, 0, "  "), canvas({seth/2+2,setw/2+3}, 0, " >");
    								char k =getch();
    								if(press(k, 'a') || press(k, 'd')) confirm ^= 1;
    								if(press(k, 'o'))break;
    							}
    							if(!confirm)
    							{
    								edst_clean(seth, setw);
    								continue;
    							}
    							ifstream in("maze.pm");
    							in>>ct_mapw>>ct_maph>>ct_vision.x>>ct_vision.y;
    							for(rint i=1; i<=item_len; ++i)
    								in>>ct_item_init[i];
    							for(rint i=1; i<=mode_name.size() - 1; ++i)
    								in>>ct_mode[i];
    							for(rint i=1; i<=ct_maph; ++i)
    								for(rint j=1; j<=ct_mapw; ++j)
    								{
    									int x;
    									in>>x;
    									ct_map[i][j]=char(x);
    									if(ct_map[i][j] == 's') ct_start = pos({i,j});
    								}
    							in.close();
    							for(rint i=0; i<=ct_mapw+1; ++i)
    								ct_map[0][i] = ct_map[ct_maph+1][i] = '#';
    							for(rint i=1; i<=ct_maph; ++i)
    								ct_map[i][0] = ct_map[i][ct_mapw+1] = '#';
    							edst_clean(seth, setw);
    							canvas({seth>>1,setw/2-2}, 0, "地图已读取"); 
    							Sleep(2000);
    							break;
    							
    						}
    						if(cur == len - 1)
    						{
    							ofstream out("maze.pm");
    //							out<<ct_mob.size()<<" ";
    //							for(rint i=0; i<mob.size(); ++i)
    //								out<<"{"<<mob[i].x<<","<<mob[i].y<<"} ";
    							out<<ct_mapw<<" "<<ct_maph<<" "<<ct_vision.x<<" "<<ct_vision.y<<endl;
    							for(rint i=1; i<=item_len; ++i)
    								out<<ct_item_init[i]<<" ";
    							out<<endl;
    							for(rint i=1; i<=mode_name.size() - 1; ++i)
    								out<<ct_mode[i]<<" ";
    							out<<endl;
    							for(rint i=1; i<=ct_maph; ++i)
    							{
    								for(rint j=1; j<=ct_mapw; ++j)
    									out<<int(ct_map[i][j])<<" ";
    								out<<endl;
    							}
    							out<<endl;
    							out.close();
    							edst_clean(seth, setw);
    							canvas({seth>>1,setw/2-2}, 0, "地图已保存"); 
    							Sleep(2000);
    							break;
    						}
    						if(cur == len)
    							enter_menu();
    					}
    				}
    				update_map = true;
    				system("cls");
    				cam_dp = {7,1};
    			}
    //			if(press(k, 'q'))
    //			{
    //				if(state == "map")
    //				update_map = true;
    //			}
    		}
    		if(GetAsyncKeyState('O')&0x8000)
    		{
    			if(tool_bar[chs] == 's')
    			{
    				ct_start = {curx,cury};
    				if(ct_map[ct_start.x][ct_start.y] == 's') ct_map[ct_start.x][ct_start.y] = ' ';
    			 } 
    			ct_map[curx][cury] = tool_bar[chs];
    			update_map = true;
    		}
    	}
    }
    void load_map()
    {
    	ifstream in("maze.pm");
    	vector<int*> value = {NULL, &mapw, &maph, &vision_init.x, &vision_init.y};
    	for(rint i=1; i<=item_len; ++i)		
    		value.push_back(&mode_item_init[0][i]);
    	int len = value.size() - 1;
    	for(rint i=1; i<=len; ++i)	in>>*value[i];
    	for(rint i=1; i<=mode_name.size() - 1; ++i)	in>>mode[i];
    	for(rint i=1; i<=item_len ; ++i) item[i] = mode_item_init[0][i];
    //	debug_out(str(mapw));
    //	debug_out(str(maph));
    //	debug_out(str(maph));
    	for(rint i=0; i<=mapw+1; ++i)
    		mapx[0][i] = mapx[maph+1][i] = '#';
    	for(rint i=1; i<=maph; ++i)
    		mapx[i][0] = mapx[i][mapw+1] = '#';
    	for(rint i=1; i<=maph; ++i)
    		for(rint j=1; j<=mapw; ++j)
    		{
    			int x;
    			in>>x;
    			
    //			debug_out(str(i)+" "+str(j)+" "+str(x));
    //			system("pause");
    //			debug_out(str(i)); debug_out(str(j));
    			if(x == '!') mob.push_back(Mob( {i,j,1, 0, {0,0}, false} ));
    			if(x == '#' || x == '*') mapx[i][j] = x;
    			if(x == 's') 
    			{
    				p = pos({i,j});
    				continue;//纪念第一个调了我1个小时的bug,continue 打成 break 了 
    			}
    			bool flag = false;
    			for(rint k=1; k<=item_len; ++k)
    				if(x == item_cht[k])
    				{
    					flag = true;
    					break;
    				}
    			if(flag || x == '@') 
    			{
    				map2[i][j] = x;
    				if(x == '@')
    				{
    					key++;
    					keys.push_back(pos({i,j}));
    				}
    			}
    		}
    //	system("pause");
    	
    }
    void save_map()
    {
    	ofstream out("maze.pm");
    	out<<mob.size()<<" ";
    	for(rint i=0; i<mob.size(); ++i)
    		out<<"{"<<mob[i].x<<","<<mob[i].y<<"} ";
    	out.close();
    	for(rint i=1; i<=maph; ++i)
    	{
    		for(rint j=1; j<=mapw; ++j)
    			out<<int(mapx[i][j])<<" ";
    		out<<endl;
    	}
    	out<<endl;
    	for(rint i=1; i<=maph; ++i)
    	{
    		for(rint j=1; j<=mapw; ++j)
    			out<<int(map2[i][j])<<" ";
    		out<<endl;
    	}
    	out<<endl;
    }
    
    void debug_out(string text)
    {
    //	return;
    	Setpos(++debug_cnt,-20);
    	cout<<text<<"                     ";
    	debug_cnt%=20;
    }
    bool mob_dizzy(int i)
    {
    	return clock()-mob[i].last_time_dizzy <= mob_dizzy_time;
    }
    void mob_move()
    {
    	update_map = true;
    	for(rint i=0;i<mob.size();++i)
    	{
    		if(mob_dizzy(i))continue;
    		mob_detect(i);
    		if(!mob[i].chasing)
    		{
    //			continue;
    			int tx= mob[i].x + dir_get_dpx[mob[i].dir * 2 -1],
    				ty= mob[i].y + dir_get_dpy[mob[i].dir * 2 -1];
    			int t=(mob[i].dir+1)%4+1;
    			vector<int> go_dir = {0,1,2,3,4};
    			
    			go_dir.erase(go_dir.begin()+ (mob[i].dir+1)%4+1 );
    			
    			mob[i].dir = go_dir[sprand(1, go_dir.size()-1)];
    			
    			while(mapx[tx][ty]=='#' && go_dir.size()>1)
    			{
    				int ri=sprand(1, go_dir.size()-1);
    				mob[i].dir = go_dir[ri];
    				tx= mob[i].x + dir_get_dpx[mob[i].dir * 2 -1],
    				ty= mob[i].y + dir_get_dpy[mob[i].dir * 2 -1];
    				go_dir.erase(go_dir.begin()+ ri );
    			}
    			if(mapx[tx][ty]=='#')
    			{
    				mob[i].dir = t;
    				tx= mob[i].x + dir_get_dpx[mob[i].dir * 2 -1],
    				ty= mob[i].y + dir_get_dpy[mob[i].dir * 2 -1];
    				if(mapx[tx][ty]=='#')continue;
    			}
    			mob[i].x= tx; mob[i].y= ty;
    		}
    		else
    		{
    			if(mob[i].locate.x == mob[i].x)
    			{
    				mob[i].y += mob[i].y>p.y ? -1:1 ;
    				continue;
    			}
    			double k = (mob[i].locate.y-mob[i].y)*1.0 / (mob[i].locate.x-mob[i].x) ;
    			double c = -k * mob[i].x + mob[i].y;
    			int ty=mob[i].y + ( (mob[i].y>mob[i].locate.y) ? -1:1 ),
    				tx=mob[i].x + ( (mob[i].x>mob[i].locate.x) ? -1:1 );
    //			debug_out("out");
    			if(_pow2(-k*mob[i].x + ty - c) <= b_r*b_r * ( k*k + 1) && mapx[mob[i].x][ty]!='#')mob[i].y = ty;
    			else if(mapx[tx][mob[i].y]!='#')mob[i].x = tx ;
    		}
    	}
    //	debug_out("move_over");
    }
    bool detecting_check(pos a,pos b,int idx)
    {
    	if(a.x==b.x)
    	{
    		int l=min(a.y,b.y),r=max(a.y,b.y);
    		for(rint i=l; i<=r; ++i)
    			if(mapx[a.x][i]=='#')return false;
    		return true;
    	}
    	//y = kx + c
    	//-kx + y - c = 0
    	double k = (b.y-a.y)*1.0 / (b.x-a.x) ;
    	double c = -k * a.x + a.y;
    	int l=min(a.x,b.x), r=max(a.x,b.x);
    //	debug_out("step1");
    	for(int i=l; i<=r; ++i)
    	{
    //		debug_out("loop");
    		for(int j=k*i + c; j>=min(a.y,b.y) && j<=max(a.y,b.y) ;--j)
    			if(_pow2(-k*i + j - c) <= b_r*b_r * ( k*k + 1))
    			{
    //				canvas({i-cam.x+1,j-cam.y+1}, 0, "@ ");
    				if(mapx[i][j]=='#')return false;
    			}
    			else break; 
    		for(int j=ceil( k*i + c); j>=min(a.y,b.y) && j<=max(a.y,b.y) ;++j)
    			if(_pow2(-k*i + j - c) <= b_r*b_r * ( k*k + 1))
    			{
    //				canvas({i-cam.x+1,j-cam.y+1}, 0, "@ ");
    				if(mapx[i][j]=='#')return false;
    			}
    			else break;
    	}
    	return true;
    }
    void mob_detect(int i)
    {
    //	debug_out("detecting");
    	if(abs(mob[i].x-p.x)+abs(mob[i].y-p.y)>=20)return;
    		if( detecting_check({mob[i].x,mob[i].y}, p, i) )
    		{
    			mob[i].chasing = true;
    //			debug_out("detected");
    			mob[i].locate = p;
    		}
    		else 
    		{
    			
    		if(mob[i].locate.x==mob[i].x && mob[i].locate.y==mob[i].y )mob[i].chasing = false;
    //			vector<int> pb_dir;//possible direction
    //			for(rint j=1;j<=4;++j)
    		}
    		
    		
    	
    //	debug_out("over");
    }
    bool check_time(int x)
    {
    	return clock()-last_time[x] >= interval[x];
    }
    bool dfs_get_way(pos cur)
    {
    	debug_out(str(cur.x)); debug_out(str(cur.y));
    	if(mapx[cur.x][cur.y] == '*')return true;
    	if(vis[cur.x][cur.y])return false;
    	vis[cur.x][cur.y]=true;
    	if(cur.x!=start.x||cur.y!=start.y)path.push_back( Path( {cur, false} ));
    	for(int i=1;i<=4;i++)
    	{
    		int tx=cur.x+dir_get_dpx[i*2-1],ty=cur.y+dir_get_dpy[i*2-1];
    		if(mapx[tx][ty]=='#' || tx<0 || ty<0 || tx>maph || ty>mapw)continue;
    		if(dfs_get_way( {tx,ty} ))return true;
    	}
    	path.pop_back();
    	vis[cur.x][cur.y]=false;
    	return false;
    }
    struct node{
    	int idx;
    	double dis;
    };
    vector<node> t;
    bool cmp(node a, node b){
    	return a.dis<b.dis;
    }
    pos find(pos x)
    {
    	return (fa[x.x][x.y].x == x.x && fa[x.x][x.y].y == x.y) ? x : fa[x.x][x.y] = find(fa[x.x][x.y]);
    }
    bool join(pos a, pos b)
    {
    	pos af = find(a), bf = find(b);
    	if(af.x != bf.x || af.y != bf.y)
    	{
    		fa[bf.x][bf.y]=af;
    		return true;
    	}
    	return false;
    }
    bool wall_check(int x)
    {
    	if(wall.empty())return false;
    	int ax,ay,bx,by;
    	if(wall[x].x&1)ax = wall[x].x, ay = wall[x].y-1, bx = wall[x].x, by = wall[x].y+1;
    	else ax = wall[x].x-1, ay = wall[x].y, bx = wall[x].x+1, by = wall[x].y;
    	if( join( {ax,ay}, {bx,by} ) )
    	{
    //		test(wall[x].x);
    //		test(wall[x].y);
    		mapx[wall[x].x][wall[x].y] = ' ';
    		wall.erase(wall.begin()+x);
    		return true;
    	}
    	wall.erase(wall.begin()+x);
    	return false;
    }
    void generate_maze()
    {
    	
    	mmt(mapx,' ');
    	int tot = 0;
    	wall.clear();
    	for(rint i=1;i<=maph;++i)
    		for(rint j=1;j<=mapw;++j)
    		{
    			fa[i][j] = { i, j };
    			if( i&1 && j&1 )mapx[i][j]=' ',tot++;
    			else mapx[i][j]='#';
    			if( (i&1) ^ (j&1) )wall.push_back(pos( {i,j} ) );
    		}
    	for(rint i=0;i<=maph+1;++i)
    		mapx[i][0]=mapx[i][mapw+1]='#';
    	for(rint i=1;i<=mapw;++i)
    		mapx[0][i]=mapx[maph+1][i]='#';
    	for(rint i=1; i<=tot && !wall.empty(); ++i)
    		while(wall_check( sprand( 0, wall.size()-1 ) ) && !wall.empty());
    	mapx[maph][mapw] = '*';
    	wall.clear();
    	if(mode[5])
    	{
    		for(rint i=1; i<=maph; ++i)
    			for(rint j=1; j<=mapw; ++j)
    				if(mapx[i][j]=='#')wall.push_back(pos({i,j}));
    		for(rint i=1; i<=mode_init[choose][6]; ++i)
    		{
    			int rx=sprand(1,maph),
    				ry=sprand(1,mapw);
    			while(mapx[rx][ry]!='#')rx=sprand(1,maph),ry=sprand(1,mapw);
    			mapx[rx][ry]=' ';
    		}
    	}
    	
    }
    void generate_item(int idx,int n)
    {
    	for(int i=1;i<=n;++i)
    	{
    		int rx=sprand(1,maph),
    			ry=sprand(1,mapw);
    		while(mapx[rx][ry]!=' ' || map2[rx][ry]!=' ')rx=sprand(1,maph),ry=sprand(1,mapw);
    		map2[rx][ry]=item_cht[idx];
    	}
    }
    void generate_mob(int n)
    {
    	for(int i=1;i<=n;++i)
    	{
    		int rx=sprand(1,maph),
    			ry=sprand(1,mapw);
    		while(mapx[rx][ry]!=' ' || map2[rx][ry]!=' ')rx=sprand(1,maph),ry=sprand(1,mapw);
    		mob.push_back(Mob( { rx, ry, 1, 0, {0,0}, false} ));
    	}
    }
    void generate_key(int n)
    {
    	key = n;
    	for(int i=1;i<=n;++i)
    	{
    		int rx=sprand(1,maph),
    			ry=sprand(1,mapw);
    		while(mapx[rx][ry]!=' ' || map2[rx][ry]!=' ')rx=sprand(1,maph),ry=sprand(1,mapw);
    		map2[rx][ry]='@';
    		keys.push_back( pos({rx,ry}) );
    	}
    }
    void generate_block(int n)
    {
    	int ln=sprand(1,n>>1);
    	for(rint i=1;i<=ln;++i)
    	{
    		int ri=sprand(0,path.size()-1);
    		int rx = path[ri].ps.x,ry = path[ri].ps.y;
    		int tot = 0;
    		while(mapx[rx][ry]!=' ' || map2[rx][ry]!=' ')
    		{
    			rx=sprand(1,maph),ry=sprand(1,mapw);
    			if(tot>=1000)break;
    		}
    			if(tot>=1000)break;
    		mapx[rx][ry]= '#';
    	}
    	for(rint i=1;i<=n-ln;++i)
    	{
    		int rx=sprand(1,maph),
    			ry=sprand(1,mapw);
    		while(mapx[rx][ry]!=' ' || map2[rx][ry]!=' ')rx=sprand(1,maph),ry=sprand(1,mapw);
    		mapx[rx][ry]= '#';
    	}
    }
    void game_update()
    {
    	paint();
    	if(clean_screen)
    	{
    		clean_screen = false;
    		system("cls");
    	}
    	for(rint i=1;i<=vision.x;++i)
    		{canvas( {i,0}, 8, "  "); canvas( {i,vision.y+1}, 8, "  "); }
    	for(rint i=0;i<=vision.y+1;++i)
    		{canvas( {vision.x+1,i}, 8, "▁▁"); canvas( {0,i}, 8, "▁▁"); }
    	for(rint i=1; i<=vision.x; ++i)
    		for(rint j=1; j<=vision.y; ++j)
    		{
    			int tx=i+cam.x-1,ty=j+cam.y-1;
    			Setpos(i,j);
    			if(tx<0 || ty<0 || tx>maph+1 || ty>mapw+1 )
    			{
    				Color(0);
    				cout<<"  ";
    				continue;
    			}
    //			Color(0); cout<<"--";
    			if(ptmap[tx][ty]==' '){ Color(0); cout<<"  ";}
    			if(ptmap[tx][ty]==0){ Color(7); cout<<"●";}
    			if(ptmap[tx][ty]==1){ Color(3); cout<<"●";}
    			if(ptmap[tx][ty]==2){ Color(4); cout<<"●";}
    			if(ptmap[tx][ty]==3){ Color(8); cout<<"☆";}
    			if(ptmap[tx][ty]=='#'){ Color(0); cout<<"■";}
    			if(ptmap[tx][ty]=='*'){ if(mode[3]&&key)Color(5);else Color(8); cout<<"* ";}
    			if(ptmap[tx][ty]=='@'){ Color(8); cout<<"^ ";}
    			if(ptmap[tx][ty]==mob_cht){ Color(8); cout<<"●";}
    			if(ptmap[tx][ty]==mob_dizzy_cht){ Color(7); cout<<"●";}
    			if(ptmap[tx][ty]==item_cht[1]){ Color(1); cout<<"☆";}
    			if(ptmap[tx][ty]==item_cht[2]){ Color(2); cout<<"☆";}
    			if(ptmap[tx][ty]==item_cht[3]){ Color(5); cout<<"☆";}
    			if(ptmap[tx][ty]==item_cht[4]){ Color(6); cout<<"☆";}
    		}
    	canvas({-2,0},0,"time = " + str(  (clock()*1.0-startTime)/1000 ) + "  score = "+str(score) + "   fps =" + str(fps)); 
    	canvas({-1,0},0,"x,y = " + str(p.x) + " " + str(p.y) + "   "); 
    	int top=0,cur=0;
    	while(top<item_len)
    	{
    		top++;
    		if(mode[2] && top==1 && !mode[3])continue;
    		if(!mode[1] && top>1)continue;
    		canvas({vision.x+2+cur/2,1+cur%2*6}, 0, item_name[ top ] +" = "+ str(item[top]) + "       ");
    		cur++; 
    	}
    	if(mode[3])canvas({vision.x+2+cur/2,1+cur%2*6}, 0, "key = "+ str(key) ),cur++;
    	if(!check_time(2))
    	{
    //		if(last_pos.x != -1 && (last_pos.x!=cx || last_pos.y!=cy) )canvas({last_pos.x,last_pos.y},0, "   ");
    		string out;
    		if(anchor.x==p.x)
    			if(anchor.y < p.y)shown_dir = 1;
    			else shown_dir = 5;
    		if(anchor.y==p.y)
    			if(anchor.x < p.x)shown_dir = 3;
    			else shown_dir = 7;
    		if(anchor.x<p.x && anchor.y>p.y) shown_dir = 2 ;
    		if(anchor.x<p.x && anchor.y<p.y) shown_dir = 4 ;
    		if(anchor.x>p.x && anchor.y<p.y) shown_dir = 6 ;
    		if(anchor.x>p.x && anchor.y>p.y) shown_dir = 8 ;
    		int cx = p.x - cam.x + 1 + dir_get_dpx[shown_dir], cy = p.y - cam.y + 1 + dir_get_dpy[shown_dir];
    		if(shown_dir == 1)out = "→";
    		if(shown_dir == 5)out = "←";
    		if(shown_dir == 3)out = "↑";
    		if(shown_dir == 7)out = "↓";
    		if(shown_dir == 2)out = "↗";
    		if(shown_dir == 4)out = "↖";
    		if(shown_dir == 6)out = "↙";
    		if(shown_dir == 8)out = "↘"; 
    		if((clock()-last_time[2]) % 1000 < 500) canvas({cx,cy},0, out) ;
    	}
    	else if(shown_dir)shown_dir = 0;
    }
    void player_move()
    {
    	update_map = true;
    	if(GetAsyncKeyState('W')&0x8000)
    	{
    		if(mapx[p.x-1][p.y]!='#' || debug)p.x--;
    		dir=2;
    	}
    	if(GetAsyncKeyState('S')&0x8000  )
    	{
    		if(mapx[p.x+1][p.y]!='#' || debug)p.x++;
    		dir=4;
    	}
    	if(GetAsyncKeyState('A')&0x8000  )
    	{
    		if(mapx[p.x][p.y-1]!='#' || debug)p.y--;
    		dir=3;
    	}
    	if(GetAsyncKeyState('D')&0x8000  )
    	{
    		if(mapx[p.x][p.y+1]!='#' || debug)p.y++;
    		dir=1;
    	}
    	if(maph-vision.x>0)cam.x=min( max(p.x-(vision.x-1 >> 1), 0) , maph-vision.x+2);
    	else cam.x= maph-vision.x+2>>1; 
    	if(mapw-vision.y>0)cam.y=min( max(p.y-(vision.y-1 >> 1), 0) , mapw-vision.y+2); 
    	else cam.y= mapw-vision.y+2>>1; 
    	if(mode[1])
    		for(rint i=3; i>=0 ; --i)
    		{
    			int tx= p.x+dir_get_dpx[dir*2-1]*i, ty= p.y+dir_get_dpy[dir*2-1]*i;
    			if(tx<0 || tx>maph || ty<0 || ty>mapw || mapx[tx][ty]=='#')continue;
    			aim = {tx,ty};
    			break;
    		} 
    }
    void player_check()
    {
    	if(mapx[p.x][p.y] == '*' && (!key || !mode[3])) win();
    	for(rint i=1; i<=item_len ; ++i)
    		if(map2[p.x][p.y]==item_cht[i])
    		{
    			item[i]++;
    			map2[p.x][p.y] = ' ';
    			score += item_score[4];
    			update_map = true;
    		}
    	for(rint i=0; i<mob.size() ; ++i)
    		if(p == pos( {mob[i].x,mob[i].y} ) && !mob_dizzy(i) ) lose();
    	if(map2[p.x][p.y]=='@' && mode[3])
    	{
    		update_map = true;
    		key --;
    		for(rint i=0; i<keys.size(); ++i)
    			if(keys[i].x == p.x && keys[i].y == p.y)
    				keys.erase(keys.begin() + i);
    		map2[p.x][p.y] = ' ';
    	}
    	
    }
    void paint()
    {
    	for(rint i=1;i<=vision.x;++i)
    		for(rint j=1;j<=vision.y;++j)
    		{
    			int tx=i+cam.x-1,ty=j+cam.y-1;
    			if(tx<0 || ty<0 || tx>maph+1 || ty>mapw+1 )
    				continue;
    			ptmap[tx][ty]=mapx[tx][ty];
    		}
    	for(rint i=1;i<=vision.x;++i)
    		for(rint j=1;j<=vision.y;++j)
    		{
    			int tx=i+cam.x-1,ty=j+cam.y-1;
    			if(tx<0 || ty<0 || tx>maph+1 || ty>mapw+1 )
    				continue;
    			if(map2[tx][ty]!=' ')ptmap[tx][ty]=map2[tx][ty];
    		}
    	if(mode[1])ptmap[aim.x][aim.y]=2;
    	for(rint i=0;i<mob.size();++i)
    		if(!mob_dizzy(i))ptmap[mob[i].x][mob[i].y]=mob_cht;
    		else ptmap[mob[i].x][mob[i].y]=mob_dizzy_cht;
    	ptmap[p.x][p.y]=1;
    }
    void button_check()
    {
    	
    	if(kbhit())
    	{
    		char k=getch();
    		if( press( k, 'r') )
    		{
    			update_map = true;
    			Rclick ++;
    			if(Rclick == 1)
    			{
    				last_time[1] = clock();
    				canvas({-3,0}, 0, "Press R again to confirm suicide");
    			}
    			if(Rclick == 2)lose();
    		}
    		if(check_time(1))update_map = true, Rclick = 0,canvas({-2,0}, 0, "                                    ");
    		if(press( k, 'u') && item[1]>0  )
    		{
    			if(mode[3] && key )
    			{
    				double minx = inf;
    				for(rint i = 0; i<keys.size(); ++i)
    					if(minx > calc_dist(keys[i], p) )
    					{
    						minx = calc_dist(keys[i], p);
    						anchor = keys[i];
    					}
    //				debug_out(str(chs.x) + " " + str(chs.y) + " " + str(shown_dir));
    				last_time[2] = clock();
    			}
    			if(!mode[2] && path.size())
    			{
    				t.clear();
    				for(rint i=0;i<path.size();++i)
    					if(!path[i].highlight)t.push_back( node( { i, calc_dist(p,path[i].ps) } ) );
    				sort(t.begin(),t.end(),cmp);
    				int l=t.size();
    				for(rint i=0; i< min(5, l-1 ) ; ++i)
    				{
    					path[t[i].idx].highlight=true;
    					mapx[ path[t[i].idx].ps . x ][ path[t[i].idx].ps . y ] = 3;
    				}
    			}
    			if(!mode[2] || (mode[3] && key)) item[1] --, score += item_score[1],update_map = true;
    		}
    		if(press( k, 'i') && item[2]>0 && mode[1])
    		{
    			update_map = true;
    			p = aim;
    			item[2] --; score += item_score[2];
    		}
    		if(press(k, 'o') && item[3]>0 && mode[1])
    		{
    			update_map = true;
    			for(rint i=0; i<=8 ; ++i)
    			{
    				int tx= aim.x+dir_get_dpx[i],ty= aim.y+dir_get_dpy[i];
    				if(tx==p.x && ty==p.y && mode[4])lose();
    				if(mode[4])
    					for(rint j=0; j<mob.size(); ++j)
    						if( pos({mob[j].x,mob[j].y}) == pos({tx,ty}) )
    							mob[j].last_time_dizzy=clock();
    				if(mapx[tx][ty] == '#'  && (tx>0 && tx<=maph && ty<=mapw && ty>0)	)
    					mapx[ tx ][ ty ] = ' ';
    			}
    			item[3] --; score += item_score[3];
    		}
    	}
    }
    void data_update()
    {
    	run++; cnt++;
    	int calc= -pow2(item[4])/4 + 4*item[4] ;
    	vision2 = {max(vision2.x,calc), max(vision2.y,calc)};
    	vision = {vision2.x+vision_init.x,vision2.y+vision_init.y};
    	fps_count();
    }
    void fps_count()
    {
    	if(clock()-lasts>=1000)
    	{
    		fps=run/ ( (clock()-lasts)*1.0/1000);
    		run=0;
    		lasts=clock();
    	}
    }
    void enter_game(bool custom)
    {
    	game_over = false; key = 0;
    	path.clear(); wall.clear(); mob.clear(); keys.clear();
    	system("cls");
    	startTime=clock();
    	mmt(mapx,' ');	mmt(map2,' '); mmt(item,0); mmt(vis,false);
    	if(!custom)
    	{
    		p= { 1, 1 }; vision_init={ 15, 15 }; vision2 = {-999,-999};
    		data_update();
    		int ttx = vision.x>>1, tty= (vision.y>>1) ;
    		canvas({ttx,tty},0, "世界生成中...");
    		for(rint i=1; i<=item_len ; ++i) item[i] = mode_item_init[choose][i];
    		
    		maph = mode_init[choose][2]; mapw = mode_init[choose][1];
    		maph = maph >> 1 << 1 | 1; mapw = mapw >> 1 << 1 | 1;
    		generate_maze();  
    		
    		canvas({ttx,tty+8},0, "33%");
    		
    		for(rint i=1; i<=item_len ; ++i) 
    		{
    			if(i==1 && !mode[2])generate_item(i,mode_item[choose][i]);
    			if(i!=1 && mode[1])generate_item(i,mode_item[choose][i]);
    		}
    		
    		canvas({ttx,tty+8},0, "45%");
    		
    		bfs_get_way(p);
    		if(mode[2]) generate_block(mode_init[choose][3]);
    		
    		canvas({ttx,tty+8},0, "60%");
    		
    		if(mode[3]) generate_key(mode_init[choose][4]);
    		
    		canvas({ttx,tty+8},0, "85%");
    		
    		if(mode[5]) generate_mob(mode_init[choose][5]);
    		
    		system("cls");
    		canvas({ttx,tty},0, "done!");
    	}
    	else
    	{
    		load_map();
    		vision2 = {-999,-999};
    		bfs_get_way(p);
    //debug_out("1");
    //		dfs_get_way(p);
    	}
    	data_update();
    	for(rint i=0; i<mob.size(); ++i)
    		mob[i].last_time_dizzy = clock();
    	
    	cnt = 0; run = 0; score = 0; mob_speed = 12; shown_dir = 0;	cam_dp={ 4, 20 };
    	player_speed = 8;
    //	save_map();
    //debug_out("1");
    //debug_out("Polynswin")
    	while(!game_over)
    	{
    		update_map = false;
    //		char k =getch();
    //		if(k == 'a') enable ^= 1;
    		if(clock()-lasts2<1000/ ( 60 + 0 ))continue;
    		lasts2=clock();
    		data_update();
    		button_check();
    //debug_out("2");
    		if(game_over)break;
    		if( cnt%player_speed==0) player_move();
    		if( cnt%mob_speed == 0) mob_move();
    		player_check();
    		
    		if(update_map) game_update();
    	}
    	enter_menu();
    }
    void print_menu()
    {
    	canvas( {1,1}, 0, "欢迎来到 多重迷宫 V1.5 ");
    	canvas( {2,1}, 0, "   made by Polynswin ");
    	canvas( {5,2}, 0, "按 Z 进入游戏 ");
    	canvas( {7,2}, 0, "按 C 修改迷宫模式");
    	canvas( {9,2}, 0, "按 Q 查看规则");
    }
    void enter_custom_choose()
    {
    	system("cls");
    	cam_dp = {3,20};
    	ifstream in("level_list.info");
    	vector<string> name = {""};
    	string x;
    	while(in>>x)name.push_back(x);
    	int len = name.size() - 1,cur = 1;
    	while(1)
    	{
    		int curx = 0;
    		for(rint i=1; i<=len; ++i)
    			canvas({curx = curx + 2, 1}, 0, name[i]);
    		
    		for(rint i=1;i<=len;++i)
    			if(cur == i)canvas({i*2,-1},0," ");
    			else canvas({i*2,-1},0,">");
    //		if(1<=cur && cur<=6)
    			
    		char k =getch();
    		if(press( k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press( k, 's'))cur = cur%len+1;
    		if(press( k, 'o'))
    		{
    			if(cur==1) enter_game(false);
    			if(cur==2) enter_custom_choose();
    			if(cur==3) enter_editor();
    			if(cur==4) enter_setting();
    			if(cur==5) enter_rule();
    			if(cur==6) enter_updates();
    		}
    	}
    	
    }
    void enter_menu()
    {
    	system("cls");
    	cam_dp = {3,20};
    	int len = 6,cur = 1;
    	while(1)
    	{
    		int curx=3;
    		cam_dp = {3,20};
    		canvas({curx,0},0,"多重迷宫 V1.8!!!"); curx += 1;
    		canvas({curx,0},0,"made by Polynswin"); curx += 2;
    		canvas({curx,0},0,"开始游戏"); curx += 2;
    		canvas({curx,0},0,"自定义关卡"); curx += 2;
    		canvas({curx,0},0,"关卡编辑器"); curx += 2;
    		canvas({curx,0},0,"修改迷宫模式"); curx += 2;
    		canvas({curx,0},0,"查看游戏介绍"); curx += 2;
    		canvas({curx,0},0,"更新日志 "); curx += 3;
    		canvas({curx,0},0,"按 W / S 键上下移动"); curx += 1;
    		canvas({curx,0},0,"按 O 键确认"); curx += 1;
    		for(rint i=1;i<=len;++i)
    			canvas({i*2+4,-1},0," ");
    //		if(1<=cur && cur<=6)
    			canvas({cur*2+4,-1},0,">");
    		char k =getch();
    		if(press( k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press( k, 's'))cur = cur%len+1;
    		if(press( k, 'o'))
    		{
    			if(cur==1) enter_game(false);
    			if(cur==2) enter_custom_choose();
    			if(cur==3) enter_editor();
    			if(cur==4) enter_setting();
    			if(cur==5) enter_rule();
    			if(cur==6) enter_updates();
    		}
    	}
    }
    void enter_setting()
    {
    	int cur = 1, len = 4;
    	while(1) 
    	{
    		cam_dp = {3,20};
    		system("cls");
    		if(1<=cur && cur<=3)
    			canvas({cur*2-1,0},0,">");
    		string text[10]={"",
    			"难度选择",	"模式选择",	"颜色设置(尚未开放)", "UI设置(尚未开放)",
    			"按 W / S 键改位置",	"按 O 键确认",	"按 Q 键退出并保存设置"
    		
    		};
    		for(rint i=1;i<=len+3;i++)
    		{
    			int col=0;
    			canvas({i*2-1,1},col,text[i]);
    		}
    		
    		char k =getch();
    		if(press( k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press( k, 's'))cur = cur%len+1;
    		if(press( k, 'o'))
    		{
    			if(cur == 1) enter_difficulty_setting();
    			if(cur == 2)enter_mode_setting();
    			if(cur == 3);
    		}
    		if(press( k, 'q'))enter_menu();
    	}
    }
    void enter_mode_setting()
    {
    	system("cls");
    	cam_dp = {3,20};
    	int cur = 1, len = mode_name.size() - 1;
    	while(1) 
    	{
    		system("cls");
    		if(1<=cur && cur<=len)
    			canvas({cur*2-1,0},0,">");
    		for(rint i=1;i<=len;i++)
    		{
    			int col=0;
    			if(mode[i])col=2;
    			canvas({i*2-1,1},col,mode_name[i]);
    		}
    		canvas({ (len+1<<1) - 1, 1}, 0, "按 W / S 键改位置");
    		canvas({ len+1 << 1, 1}, 0, "按 O 键确认");
    		canvas({ len+1 << 1 | 1, 1}, 0, "按 Q 键退出并保存设置");
    		char k =getch();
    		if(press(k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press(k, 's'))cur = cur%len+1;
    		if(press(k, 'o'))
    		{
    			mode[cur] ^= 1;
    			if(mode[2])mode[1]=1;
    		}
    		if(press(k, 'q'))enter_setting();
    	}
    	
    }
    string str(int x)
    {
    	if(!x) return "0";
    	string res="",res2=".";
    //	int tot = -99;
    //	if(int(x) != x)
    //	{
    //		double cx = x;
    //		while(cx && tot<2)
    //		{
    //			cx = cx - int(cx);
    //			cx = cx * 10;
    //			res2 += int(cx) + '0';	
    //			tot++;
    //		}
    ////		Setpos(0,-10);test(res2);
    //	}
    	int tx=x;
    	while(tx)
    	{
    		res+=tx%10+'0';
    		tx=tx/10;
    	}
    	for(int i=0;i< (res.size()>>1) ;i++)
    	{
    		char t=res[i];
    		res[i]=res[res.size()-i-1];
    		res[res.size()-i-1]=t;
    	}
    	if(res2==".")return res;
    	else return res+res2;
    }
    void enter_updates()
    {
    	int curx=0,len=2;
    	cam_dp = {3,10};
    	system("cls");
    //	canvas({curx,0},0," "); curx += ;
    	canvas({curx,0},0,"V1.5更新"); curx += 2;
    	canvas({curx,0},0,"更新 钥匙收集 模式"); curx += 2;
    	canvas({curx,0},0,"V1.6更新"); curx += 2;
    	canvas({curx,0},0,"修复了一堆显示bug"); curx += 1;
    	canvas({curx,0},0,"优化了游戏算法,反正作者的机房电脑是能在地狱难度\\模式拉满\\视野拉满下也能跑满62fps"); curx += 1;
    	canvas({curx,0},0,"引导之星增添新功能,在钥匙收集模式中,还能显示钥匙大致方位"); curx += 1;
    	canvas({curx,0},0,"新增 怪物追击 模式"); curx += 1;
    	canvas({curx,0},0,"更新 UI"); curx += 2;;
    	canvas({curx,0},0,"V1.7&1.8更新"); curx += 2;
    	canvas({curx,0},0,"新增 自定义关卡&关卡编辑器 模式"); curx += 1;
    	canvas({curx,0},0,"按 Q 键退出");
    	while(1)
    	{
    		char k =getch();
    		if(press(k, 'q')) break;
    	}
    	system("cls");
    }
    void enter_rule_editor()
    {
    	system("cls");
    	while(1)
    	{
    		int curx = 0;
    		cam_dp = {3,20};
    		canvas({curx,0},0,"编辑器上方有工具栏,按下相应数字键切换选中物品,按O键即可在预瞄点处摆放"); curx += 2;
    		canvas({curx,0},0,"箭头上方为你的预瞄点,按WASD键进行上下左右移动"); curx += 2;
    		canvas({curx,0},0,"如果要对地图进行设置,按下ESC进入菜单界面"); curx += 2;
    		canvas({curx,0},0,"大部分界面都可以用ESC退出,同时大部分选项都可以按下O键(注意)确认"); curx += 2;
    		canvas({curx,0},0,"编辑好地图后,别忘了在菜单界面保存地图,会导出至与游戏本体同级地址为maze.pm"); curx += 1;
    		canvas({curx,0},0,"如果想加载地图,可在菜单界面选择加载地图确认,会读入文件maze.pm"); curx += 3;
    		canvas({curx,0},0,"按 Q 键退出");
    		char k =getch();
    		if(press( k, 'q'))return;
    	}
    }
    void enter_rule()
    {
    	int curx=0,cur=1,len=3;
    	
    	while(1)
    	{
    		curx=0;
    		cam_dp = {3,20};
    		system("cls");
    		canvas({curx,0},0,"游戏目标为移动至迷宫位于右下角的终点(符号*)"); curx += 2;
    		canvas({curx,0},0,"按方向键进行上下左右移动"); curx += 2;
    		canvas({curx,0},0,"你拥有道具,需要按下相应的键位使用,使用即可得分"); curx += 2;
    		canvas({curx,0},0,"当你遇到死局时,可双击 R 键紫砂"); curx += 3;
    		canvas({curx,0},0,"查看 道具介绍"); curx += 1;
    		canvas({curx,0},0,"查看 模式介绍"); curx += 1;
    		canvas({curx,0},0,"查看 编辑器介绍"); curx += 2;
    		canvas({curx,0},0,"按 W / S 键上下移动"); curx += 1;
    		canvas({curx,0},0,"按 O 键确认"); curx += 1;
    		canvas({curx,0},0,"按 Q 键退出");
    		for(rint i=1;i<=len;++i)
    			canvas({i+8,-1},0," ");
    		canvas({cur+8,-1},0,">");
    		char k =getch();
    		if(press( k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press( k, 's'))cur = cur%len+1;
    		if(press( k, 'q'))enter_menu();
    		if(press( k, 'o'))
    		{
    			if(cur==1)enter_rule_item();
    			if(cur==2)enter_rule_mode();
    			if(cur==3)enter_rule_editor();
    		}
    	}
    }
    void enter_rule_mode()
    {
    	system("cls");
    	cam_dp = {3,15};
    	int curx=0;
    	canvas({curx,0},0,"特殊道具: 场上会多出特殊道具"); curx += 2;
    	canvas({curx,0},0,"特殊道具2: 同上"); curx += 2;
    	canvas({curx,0},0,"迷宫塌方:迷宫坍塌,场上会随机出现方块"); curx += 1;
    	canvas({curx,0},0,"         (强制打开特殊道具)"); curx += 2;
    	canvas({curx,0},0,"收集钥匙:要收集一定钥匙后才能通往终点"); curx += 2;
    	canvas({curx,0},0,"爆炸伤害:炸弹会炸死范围内单位,包括你自己"); curx += 1;
    	canvas({curx,0},0,"         (强制打开特殊道具)"); curx += 2;
    	canvas({curx,0},0,"怪物追击:场上会存在一定的怪物,它们会随机游走,但当看到你时,它们会向你追击"); curx += 1;
    	canvas({curx,0},0,"          但是你可以甩开它们,同时要利用地形卡好视野,同时地图上会出现安全点"); curx += 1;
    	canvas({curx,0},0,"          相应的,地图的路径将不再单一,你拥有多种路径通往终点"); curx += 2;
    	canvas({curx,0},0,"灯光不足:玩家出生时会携带灯源,随着时间流逝灯光会减弱,视野也会相应变小,"); curx += 1;
    	canvas({curx,0},0,"          需要去地图上搜寻燃料补充灯光,视野也会相应变小,需要去地图上搜寻"); curx += 1;
    	canvas({curx,0},0,"          燃料补充灯光"); curx += 2;
    	canvas({curx,0},0,"双人对战:开启双人模式,玩家出生在地图对角线,需不断搜寻道具击败对方"); curx += 1;
    	canvas({curx,0},0,"         (强制打开特殊道具 & 2)"); curx += 2;
    	canvas({curx,0},0,"按 Q 键退出");
    	
    	while(1)
    	{
    		char k =getch();
    		if(press( k, 'q'))break;
    	}
    }
    void enter_rule_item()
    {
    	system("cls");
    	cam_dp = {3,15};
    	int curx=0;
    	canvas({curx,0},0,"道具1: 引导之星(guide)  U 键"); curx += 1;
    	canvas({curx,0},0,"       使用后可以显示通往终点的道路,但只能显示距离你最近的5格"); curx += 1;
    	canvas({curx,0},0,"       (迷宫塌方中不可用)"); curx += 2;
    	canvas({curx,0},0,"接下来的为特殊道具,只有打开特殊模式才能使用"); curx += 2;
    	canvas({curx,0},0,"道具2:闪现(flash) I 键"); curx += 1;
    	canvas({curx,0},0,"       使用后可以闪现至预瞄点"); curx += 2;
    	canvas({curx,0},0,"道具3:炸弹(bomb) O 键"); curx += 1;
    	canvas({curx,0},0,"       使用后可以炸掉预瞄点3*3范围内的墙壁(不可炸掉边界,别想着偷鸡)"); curx += 2;
    	canvas({curx,0},0,"道具4:探远星(vision) \\"); curx += 1;
    	canvas({curx,0},0,"       收集之后可以增加视野,但存在上限,非线性增长"); curx += 2;
    	canvas({curx,0},0,"按 Q 键退出");
    	
    	while(1)
    	{
    		char k =getch();
    		if(press( k, 'q'))break;
    	}
    }
    void enter_difficulty_setting()
    {
    	system("cls");
    	cam_dp = {3,20};
    	int cur = 1, len = 5;
    	while(1) 
    	{
    		system("cls");
    		if(1<=cur && cur<=5)
    			canvas({cur*2-1,0},0,">");
    		vector<string> text={"",
    			"迷宫:简单难度",	"迷宫:正常难度",	"迷宫:困难难度",
    			"迷宫:地狱难度",	"迷宫:自定义模式(尚未开放)",		"按 W / S 键改位置",
    			"按 O 键确认",	"按 Q 键退出并保存设置"
    		
    		};
    		for(rint i=1;i<=len+3;i++)
    		{
    			int col=0;
    			if(choose==i)col=2;
    			canvas({i*2-1,1},col,text[i]);
    		}
    		
    		char k =getch();
    		if(press( k, 'w'))cur = (cur-1+len-1)%len+1;
    		if(press( k, 's'))cur = cur%len+1;
    		if(press( k, 'o'))
    		{
    			if(1<=cur && cur<=5)
    			{
    				choose = cur;
    				if(cur==5)
    				{
    					system("cls");
    					canvas({1,1},0,"暂未开放 ");
    					choose = 4;
    //					canvas({-1,1},0,"尽量不要进行非合法/常规输入,否则会出bug ");
    //					canvas({1,1},0,"输入迷宫宽度: "); cin>>mode[5][1];
    //					canvas({3,1},0,"输入迷宫长度: "); cin>>mode[5][2];
    //					canvas({5,1},0,"输入迷宫引导之星数量: "); cin>>mode_item[5][1];
    //					canvas({7,1},0,"输入完毕 ");
    					Sleep(2000);
    				}
    			}
    		}
    		if(press( k, 'q'))enter_setting();
    	}
    }
    void lose()
    {
    	game_over = true;
    	ending_of_game();
    	system("cls");
    	cam_dp= {3,20};
    	string s=str(score);
    	int sx= vision.x>>1, sy= vision.y>>1;
    	Setpos( sx, sy ); Color(0); SlowDisplay(100,"You lost!"); 
    	Setpos( sx +1 , sy ); Color(0); SlowDisplay(100,"used time:"+str( (clock()-startTime)/1000 ) + " score:"+str(score)); 
    	Setpos( sx +2 , sy ); system("pause");
    }
    void win()
    {
    	game_over = true;
    	ending_of_game();
    	system("cls");
    	string s=str(score);
    	cam_dp= {3,20};
    	int sx= vision.x>>1, sy= vision.y>>1;
    	Setpos( sx, sy ); Color(0); SlowDisplay(100,"You won!"); 
    	Setpos( sx +1 , sy ); Color(0); SlowDisplay(100,"used time:"+str( (clock()-startTime)/1000 ) + " score:"+str(score)); 
    	Setpos( sx +2 , sy ); system("pause");
    }
    void ending_of_game()
    {
    	paint();
    	game_update();
    	for(int i=1;i<=3;i++)
    	{
    		Setpos(p.x-cam.x+1,p.y-cam.y+1); Color(4); cout<<"●";
    		Sleep(500);
    		Setpos(p.x-cam.x+1,p.y-cam.y+1); Color(3); cout<<"●";
    		Sleep(500);
    	}
    	for(int i=max(vision.y,vision.x);i>=-vision.y-vision.x+2; --i)
    	{
    		for(int j=0;vision.x-j>=1&&i+j<=vision.y; ++j)
    			if(i+j>=1){Setpos(vision.x-j,i+j); Color(0); cout<<"  ";}
    		Sleep(50);
    	}
    	
    }
    
    
    void HideCursor(){CONSOLE_CURSOR_INFO cursor_info = {1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);/*Po*/}
    void showCursor()
    {
    	HANDLE h_GAME = GetStdHandle(STD_OUTPUT_HANDLE);
    	CONSOLE_CURSOR_INFO cursor_info;
    	GetConsoleCursorInfo(h_GAME,&cursor_info);
    	cursor_info.bVisible = true;
    	SetConsoleCursorInfo(h_GAME,&cursor_info);
    } 
    void Setpos(int x,int y){RealSetpos(x+cam_dp.x,y+cam_dp.y);}
    void RealSetpos(int x,int y){COORD pos;pos.X=y*2,pos.Y=x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
    void SlowDisplay(int x,string p)
    {
    	for(int i=0;i<p.size();i++)
    	{
    		cout<<p[i];
    		if(kbhit())x = 0;
    		Sleep(x);
    	}
    }
    int sprand(int l,int r){return rand()%(r-l+1)+l;}
    void Color(int a)
    {
        if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
        if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
        if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
        if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
        if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
        if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
        if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
        if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_RED);
    }
    
    inline void read(int &x)
    {
    	int f=1;x=0;char ch=getchar();
    	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    	x=x*f;
    }
    inline void ffout(int x)
    {
        if(x<0){x=-x; putchar('-'); }
        short sta[63],top=0;
        do{ sta[top++]=x%10; x/=10; }while(x);
        while(top) putchar(sta[--top]+'0');
    }
    inline void ffout(int x,char b)
    {
        if(x<0){x=-x; putchar('-'); }
        short sta[63],top=0;
        do{ sta[top++]=x%10; x/=10; }while(x);
        while(top) putchar(sta[--top]+'0');
        putchar(b);
    }
    language
    ```
    
    
    ```
    ```#include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	ll n;
    	cin>>n;
    	string s;
    	cin>>s;
    	ll cnt=0,cnt2=0,cnt3=0;
    	for(int i=0;i<s.size();i++){
    		if(s[i]=='N'){
    			cnt++;
    		}else if(s[i]=='O'){
    			cnt2+=cnt;
    		}else if(s[i]=='I'){
    			cnt3+=cnt2;
    		}
    	}
    	cout<<cnt3;
    	return 0;
    }
    
    ```
    ```刷题是一种出路,枚举是一种思想
    
    打表是一种勇气,搜索是一种信仰
    
    剪枝是一种精神,骗分是一种日常
    
    爆零是一种宿命,WA是一种绝望
    
    TLE是一种痛苦,RE是一种放弃
    
    UKE是一种无奈,AC是一种原谅
    
    AK是一种幻想,弃赛是一种颓废
    
    吊打是一种必然,进队是一种奢望
    
    模拟只会猜题意,贪心只能过样例
    
    数学上来先打表,DP一般看规律
    
    组合数学靠运气,计算几何瞎暴力
    
    图论强行套模板,数论只会GCD
    
    递归递推伤不起,搜索茫然TLE
    
    分治做得像枚举,暴力枚举数第一
    
    数据结构干瞪眼,怒刷水题找信心
    
    涨姿势也不容易,考试一来全懵逼
    
    ```山重水复疑无路,make后面不加to。
    
    秦时明月汉时关,高价氧化低价还。
    
    君问归期未有期,点裂加倍匀两极。
    
    酒酣胸胆尚开张,GM=gR方。
    
    碧云天,黄叶地,高温高压催化剂。
    
    横看成岭侧成峰,洛伦兹力不做功。
    
    草树知春不久归,b方减去4ac。
    
    瀚海阑干百丈冰,酸脱羟基醇脱氢。 `
    
    各种老师一回头 语文老师一回头,此地空余黄鹤楼。 数学老师一回头,二次函数对称轴。 英语老师一回头,sorry加上三克油。 化学老师一回头,二氧化碳变汽油。 物理老师一回头,一跟杠杆撬地球。 生物老师一回头,试管婴儿水中游。 地理老师一回头,大陆版块乱漂流。 劳技老师一回头,破铜烂铁来走秀。 政治老师一回头,布什改行卖豆油。 美术老师一回头,蒙娜丽莎也风流。 体育老师一回头,奥运取消打篮球。 电脑老师一回头,学生全成阿Q友。 全体老师一回头,世界人民没自由。
    
    少年应有鸿鹄志,当骑骏马踏平川。
    山有木兮卿有意,昨夜星辰恰似你。
    终南有坟,名不老。
    于万人中万幸得以相逢,刹那间澈净明通。
    故人依稀天边去,十年孤襟迎秋风。
    江湖每逢一夜雨,为谁鞍前系灯笼。
    青山远去万里遥,苏澜城外雨潇潇。
    孤舟一叶问船家,何日重到苏澜桥。
      刷题是一种出路,枚举是一种思想
    
    打表是一种勇气,搜索是一种信仰
    
    剪枝是一种精神,骗分是一种日常
    
    爆零是一种宿命,WA是一种绝望
    
    TLE是一种痛苦,RE是一种放弃
    
    UKE是一种无奈,AC是一种原谅
    
    AK是一种幻想,弃赛是一种颓废
    
    吊打是一种必然,进队是一种奢望
    
    模拟只会猜题意,贪心只能过样例
    
    数学上来先打表,DP一般看规律
    
    组合数学靠运气,计算几何瞎暴力
    
    图论强行套模板,数论只会GCD
    
    递归递推伤不起,搜索茫然TLE
    
    分治做得像枚举,暴力枚举数第一
    
    数据结构干瞪眼,怒刷水题找信心
    
    涨姿势也不容易,考试一来全懵逼
    
    
  • 最近活动

  • Stat

  • Rating