分享一个转载游戏
#include<windows.h>
#include<bits/stdc++.h>
using namespace std;
void Think(int x);
struct node{
int num;
int Need[5];
int Time[5];
int real_time[5];
int Needab[5];
int codeTime[5];
int code[5];
int real_code[6];
int now_code;
int all_think[6];
int Now_think;
int now_think;
int code_better;
int gua_num1;
int gua_num2;
int gua_num3;
int Yangli;
int Yangli_strength[6];
int duipai;
int duipai_baoli;
int duipai_OK;
int bufen;
int bufen_fen[6];
int maybe_socer;
int socer;
void clear(){
memset(Need,0,sizeof(Need));
memset(Time,0,sizeof(Time));
memset(real_time,0,sizeof(real_time));
memset(Needab,0,sizeof(Needab));
memset(codeTime,0,sizeof(codeTime));
memset(code,0,sizeof(code));
memset(real_code,0,sizeof(real_code));
memset(all_think,0,sizeof(all_think));
num=now_code=Now_think=now_think=code_better=gua_num1=gua_num2=gua_num3=Yangli=duipai=duipai_baoli=duipai_OK=bufen=socer=maybe_socer=0;
memset(Yangli_strength,0,sizeof(Yangli_strength));
memset(bufen_fen,0,sizeof(bufen_fen));
}
}Q[5],QQ[5];
int diff,st,en;
int Your[100];
int Gua;
int fact[50][20];
int jing[50][20];
int whk[50];
int zhuanxin[50];
int Guaping[50];
int Your_bei[100];
int Gua_bei;
int Food;
int Bathroom;
int Rand(int x,int y){
int A=rand(),B=rand();
return A*1ll*B%(y-x+1)+x;
}
map<int,string> ma;
int flag[10],maxn;
int testtime=240;
int kkk[5];
void look(int x,int flag){
kkk[x]=1;
printf("你打开了T%d\n",x);
if(!flag){
printf("你花了1分钟阅读了T%d\n你判断出这道题需要如下的知识点:\n",x);
}else{
printf("你迅速回顾了T%d\n你回忆起这道题需要如下的知识点:\n",x);
}
for(int i=1;i<=Q[x].num;i++) cout<<ma[Q[x].Need[i]]<<'\n';
int Y=0,N=0;
for(int i=1;i<=Q[x].num;i++) Y+=Your[Q[x].Need[i]],N+=Q[x].Needab[i];
printf("一共有%d个样例\n",Q[x].Yangli);
if(!Q[x].duipai) printf("不");
printf("支持对拍\n");
if(Q[x].bufen-1){
printf("有%d个部分分:",Q[x].bufen-1);
for(int i=1;i<Q[x].bufen;i++){
if(i^1)printf(",");printf("%d分",Q[x].bufen_fen[i]);
}
printf("\n");
}else{
printf("没有部分分\n");
}
if(Q[x].all_think[Q[x].bufen]<=5){
printf("你觉得这道题很水");
}else if(Q[x].all_think[Q[x].bufen]<=15){
printf("你觉得这道题有点简单");
}else if(Q[x].all_think[Q[x].bufen]<=30){
printf("你觉得这道题可做");
}else if(Q[x].all_think[Q[x].bufen]<=60){
printf("你觉得这道题有点难");
}else{
printf("你觉得这道题几乎不可做");
}
printf(",");
if(Q[x].real_code[Q[x].bufen]<=5){
printf("代码量非常小");
}else if(Q[x].real_code[Q[x].bufen]<=15){
printf("代码量还好");
}else if(Q[x].real_code[Q[x].bufen]<=30){
printf("代码量一般");
}else if(Q[x].real_code[Q[x].bufen]<=60){
printf("代码量有点大");
}else{
printf("代码量大得像个猪国杀");
}
printf("\n");
}
void Do(int x,int y){
double a=x*1.0/y;
if(a==0.0){
printf("还没开始");
}else if(0.0<a&&a<0.2){
printf("不到一小半");
}else if(0.2<=a&&a<0.4){
printf("比一小半多");
}else if(0.4<=a&&a<0.6){
printf("一半左右");
}else if(0.6<=a&&a<0.8){
printf("一大半左右");
}else if(0.8<=a&&a<1){
printf("快完了");
}else{
printf("完成了");
}
}
int duipai;
void check(int x){
int a;
while(1){
printf("考试剩余时间:%dmin\n你决定检查T%d\n",testtime,x);
printf("T%d",x);
if(!Q[x].duipai){
printf("不");
}
printf("支持对拍\n你打算怎么检查?\n");
printf("1.测试样例(无耗时)\n2.静态差错\n3.对拍(第一次写对拍程序1min,数据生成器以及暴力代码时间%dmin)\n",Q[x].duipai_baoli);
printf("4.干点别的事情\n");
scanf("%d",&a);
if(a<=0){
printf("输入不合法\n"),Sleep(1000),system("cls");
continue;
}
if(a==1||a==2||a==3||a==4)break;
printf("输入不合法\n"),Sleep(1000),system("cls");
continue;
}
if(a==4){
return;
}
system("cls");
if(a==1){
printf("你决定测试样例\n");
for(int i=1;i<=Q[x].Yangli;i++){
printf("正在测试样例%d......",i);
if(Q[x].Yangli_strength[i]<=Q[x].gua_num1*5+Q[x].gua_num2*10+Q[x].gua_num3*50+100-Q[x].bufen_fen[Q[x].Now_think]){
printf("该样例未通过!\n");
}else{
printf("该样例通过!\n");
}
}
}else if(a==2){
while(1){
printf("考试剩余时间:%dmin\n你决定静态差错\n你打算检查多久?\n",testtime);
scanf("%d",&a);
if(testtime<=0){
printf("考试结束了!\n"),Sleep(1000);
return;
}
if(a<0){
printf("输入不合法\n"),Sleep(1000),system("cls");
continue;
}
if(a==0){
printf("你检查了个寂寞!\n"),Sleep(1000),system("cls");
continue;
}
if(a>testtime){
printf("你没有那么多时间了!\n"),Sleep(1000),system("cls");
continue;
}
break;
}
printf("你决定检查%dmin\n",a);
int OK=0;
int num1=0,num2=0,num3=0,Next=-1;
for(int i=1;i<=a;i++){
int asd;
while(1){
asd=Rand(1,100);
if(asd^Next)break;
}
Next=asd;
if(asd<=99&&Q[x].gua_num3){
OK=3,Q[x].gua_num3--,num3++;
}else if(asd<=20&&Q[x].gua_num2){
OK=2,Q[x].gua_num2--,num2++;
}else if(asd<=1&&Q[x].gua_num1){
OK=1,Q[x].gua_num1--,num1++;
}
}
printf("过去了%dmin",a);
testtime-=a;
if(!OK){
printf(",你什么错误也没有检查出来\n");
}else{
int print=0;
if(num1){
printf(",你检查出了%d个小错误",num1),print=1;
}
if(num2){
printf(",");
if(!print)printf("你检查出了");
printf("%d个一般错误",num2);
print=1;
}
if(num3){
printf(",");
if(!print)printf("你检查出了");
printf("%d个严重错误",num3);
print=1;
}
printf(",并且迅速改正了它们!\n");
}
}else if(a==3){
if(!Q[x].duipai){
printf("这道题目不支持对拍!\n");
}else{
int Need=0;
if(!duipai){
Need++;
}
Need+=Q[x].duipai_baoli;
if(Need>testtime){
printf("你没有那么多时间了!\n");
return;
}
printf("你决定对拍\n");
if(!duipai){
duipai=1,testtime-=(Q[x].duipai_baoli+1);
printf("你发现你没有打对拍程序\n你花了1min打完了对拍程序\n你又花了%dmin打完了数据生成器以及暴力程序\n",Q[x].duipai_baoli);
}else{
if(!Q[x].duipai_OK){
printf("你");
printf("花了%dmin打完了数据生成器以及暴力程序\n",Q[x].duipai_baoli);
testtime-=Q[x].duipai_baoli;
}
}
Q[x].duipai_OK=1;
int asdasdasd=0,Next=-1;
printf("对拍中......\n");
Sleep(1000);
for(int i=1;i<=200;i++){
int asd;
while(1){
asd=Rand(1,100);
if(asd^Next)break;
}
Next=asd;
if(asd<=Q[x].gua_num1*5+Q[x].gua_num2*10+Q[x].gua_num3*50-(100-Q[x].bufen_fen[Q[x].Now_think]))asdasdasd++;
}
printf("你一共对拍了200组,挂掉了%d组\n",asdasdasd);
}
}
Sleep(1000);
system("pause");
system("cls");
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
printf("考试剩余时间:%dmin\n",testtime);
printf("现在你要干什么?\n");
printf("1.继续检查\n2.干点别的事情\n");
scanf("%d",&a);
if(a==1||a==2){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(a==1){
check(x);
}else{
return;
}
}
void code(int x){
int a;
while(1){
printf("考试剩余时间:%dmin\n",testtime);
printf("你决定写T%d的%d分做法\n当前代码进度:",x,Q[x].bufen_fen[Q[x].Now_think]);
Do(Q[x].now_code,Q[x].real_code[Q[x].Now_think]);
printf("\n你打算写多久?\n");
scanf("%d",&a);
if(testtime<=0){
printf("考试结束了!\n"),Sleep(1000);return;
}
if(a<0){
printf("输入不合法\n");Sleep(1000);system("cls");continue;
}
if(a==0){
printf("你写了个寂寞!\n");Sleep(1000);system("cls");continue;
}
if(a>testtime){
printf("你没有那么多时间了!\n");Sleep(1000);system("cls");continue;
}
break;
}
system("cls");
printf("你决定写%dmin\n",a);
if(Q[x].now_code+a<Q[x].real_code[Q[x].Now_think]){
testtime-=a;
Q[x].now_code+=a;
int z,Next=-1;
for(int i=1;i<=a;i++){
int asd;
while(1){
asd=Rand(1,100000);
if(asd^Next)break;
}
Next=asd;
if(asd<=65*Gua-100*Q[x].gua_num1){
Q[x].gua_num1++;
}else if(asd<=95*Gua-100*Q[x].gua_num2){
Q[x].gua_num2++;
}else if(asd<=100*Gua-100*Q[x].gua_num3){
Q[x].gua_num3++;
}
}
printf("%d分钟过去了\n你的代码进度:",a);
Do(Q[x].now_code,Q[x].real_code[Q[x].Now_think]);
printf("\n");
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
printf("考试剩余时间:%dmin\n",testtime);
printf("现在你要干什么?\n");
printf("1.继续写\n2.干点别的事情\n");
scanf("%d",&z);
if(z==1||z==2){
break;
}else{
printf("输入不合法!\n"),Sleep(1000),system("cls");
}
}
system("cls");
if(z==1){
code(x);
}else{
return;
}
}else{
int Next=-1;
for(int i=1;i<=Q[x].real_code[Q[x].Now_think]-Q[x].now_code;i++){
int asd;
while(1){
asd=Rand(1,100000);
if(asd^Next) break;
}
Next=asd;
if(asd<=65*Gua-100*Q[x].gua_num1){
Q[x].gua_num1++;
}else if(asd<=95*Gua-100*Q[x].gua_num2){
Q[x].gua_num2++;
}else if(asd<=100*Gua-100*Q[x].gua_num3){
Q[x].gua_num3++;
}
}
testtime-=max(Q[x].real_code[Q[x].Now_think]-Q[x].now_code,0);
printf("只过去了%dmin,你就写完了这道题的%d分做法!\n",max(Q[x].real_code[Q[x].Now_think]-Q[x].now_code,0),Q[x].bufen_fen[Q[x].Now_think]);
kkk[x]=3;
Q[x].now_code+=max(Q[x].real_code[Q[x].Now_think]-Q[x].now_code,0);
Q[x].maybe_socer=max(Q[x].maybe_socer,Q[x].bufen_fen[Q[x].Now_think]);
Q[x].code_better=max(Q[x].code_better,Q[x].Now_think);
int z;
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
printf("考试剩余时间:%dmin\n",testtime);
printf("现在你要干什么?\n1.检查这道题\n2.重新思考\n3.干点别的事情\n");
scanf("%d",&z);
if(z==1||z==2||z==3){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(z==1){
check(x);
}else if(z==2){
kkk[x]=1;
Think(x);
}else{
return;
}
}
}
void Think(int x){
int a;
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
if(Q[x].Now_think){
int z;
while(1){
printf("考试剩余时间:%dmin\n你决定思考T%d\n",testtime,x);
look(x,1);
printf("你打算做什么?\n");
printf("1.继续思考此题的%d分做法(当前进度:",Q[x].bufen_fen[Q[x].Now_think]);
Do(Q[x].now_think,Q[x].all_think[Q[x].Now_think]);
printf(")\n2.思考此题的其它分数的做法\n3.干点别的事情\n");
scanf("%d",&z);
if(z==1||z==2||z==3)break;
printf("输入不合法\n");
Sleep(1000);
system("cls");
}
if(z==1){
break;
}else if(z==2){
Q[x].Now_think=0,system("cls");
}else{
return;
}
}else{
int b;
while(1){
printf("考试剩余时间:%dmin\n你决定思考T%d\n",testtime,x);
look(x,1);
printf("你打算做什么?\n");
for(int i=1;i<=Q[x].bufen;i++)printf("%d.思考%d分的代码\n",i,Q[x].bufen_fen[i]);
printf("%d.干点别的事情\n",Q[x].bufen+1);
scanf("%d",&b);
if(1<=b&&b<=Q[x].bufen+1)break;
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
if(b==Q[x].bufen+1){
return;
}
Q[x].Now_think=b;
break;
}
}
system("cls");
while(1){
printf("考试剩余时间:%dmin\n",testtime);
printf("你决定思考T%d的%d分做法\n",x,Q[x].bufen_fen[Q[x].Now_think]);
printf("你的思考进度:");
Do(Q[x].now_think,Q[x].all_think[Q[x].Now_think]);
printf("\n");
printf("你决定思考多久?\n");
scanf("%d",&a);
if(a<0){
printf("输入不合法\n");
Sleep(1000);
system("cls");
continue;
}
if(a==0){
printf("你思考了个寂寞!\n");
Sleep(1000);
system("cls");
continue;
}
if(a>testtime){
printf("你没有那么多时间了!\n");
Sleep(1000);
system("cls");
continue;
}
break;
}
system("cls");
printf("你决定思考%dmin\n",a);
if(Q[x].now_think+a<Q[x].all_think[Q[x].Now_think]){
testtime-=a,Q[x].now_think+=a;
int z;
printf("%d分钟过去了\n你的思考进度:",a);
Do(Q[x].now_think,Q[x].all_think[Q[x].Now_think]);
printf("\n");
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
printf("考试剩余时间:%dmin\n",testtime);
printf("现在你要干什么?\n");
printf("1.继续思考\n2.干点别的事情\n");
scanf("%d",&z);
if(z==1||z==2){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(z==1){
Think(x);
}else{
return;
}
}else{
int QaQ=max(Q[x].all_think[Q[x].Now_think]-Q[x].now_think,0);
Q[x].now_think+=QaQ,testtime-=QaQ;
printf("只过去了%dmin,你就想出了这道题!\n",QaQ);
kkk[x]=2;
int z;
while(1){
if(testtime<=0){
printf("考试结束了!\n");
Sleep(1000);
return;
}
printf("考试剩余时间:%dmin\n现在你要干什么?\n1.写这道题\n2.干点别的事情\n",testtime);
scanf("%d",&z);
if(z==1||z==2){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(z==1){
code(x);
}else{
return;
}
}
}
int ans;
void test(){
while(1){
if(testtime<=0)break;
int x;
while(1){
printf("考试剩余时间:%dmin\n现在你要干什么?\n",testtime);
for(int i=1;i<=4;i++){
if(kkk[i]==0){
printf("%d.看T%d\n",i,i);
}else if(kkk[i]==1){
printf("%d.想T%d\n",i,i);
}else if(kkk[i]==2){
printf("%d.写T%d\n",i,i);
}else{
printf("%d.再看看T%d\n",i,i);
}
}
printf("5.浪费时间\n");
printf("6.吃食物(还可执行%d次,耗时1min,可以让你有去厕所的资格)\n",Food);
printf("7.去厕所(还可执行%d次,耗时3min,有大概率让你灵光乍现,但有极极极小概率被困厕所)\n",Bathroom);
scanf("%d",&x);
if(1<=x&&x<=7){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
if(x==7){
if(!Bathroom){
printf("你现在不需要去厕所!\n");
Sleep(1000);
system("cls");
continue;
}
if(testtime<3){
printf("你现在没有时间了!\n");
Sleep(1000);
system("cls");
continue;
}
testtime-=3;
Bathroom--;
printf("你花了3min去了厕所\n");
if(Rand(1,10000)==5408){
printf("然后你发现你忘了带纸QAQ\n");
Sleep(1000);
printf("于是你绝望地等到了考试结束\n");
testtime=0;
Sleep(1000);
system("cls");
}else{
int OK1=0,OK2=0;
for(int i=1;i<=4;i++){
if(Q[i].gua_num1+Q[i].gua_num2+Q[i].gua_num3){
OK1=1;
break;
}
}
for(int i=1;i<=4;i++){
if(kkk[i]==1&&Q[x].Now_think!=0){
OK2=1;
break;
}
}
if(OK1||OK2){
int Which=Rand(1,2);
for(int iii=1;iii<=2;iii++){
if(Which==1){
if(!OK1){
Which=2;
}
}
if(Which==2){
if(!OK2){
Which=1;
}
}
}
if(Which==1){
int ee=Rand(1,4);
while(1){
if(Q[ee].gua_num1+Q[ee].gua_num2+Q[ee].gua_num3)break;
ee++;
if(ee==5)ee=1;
}
if(Q[ee].gua_num1){
int asdasd=Rand(min(Q[ee].gua_num1,2),min(Q[ee].gua_num1,5));
Q[ee].gua_num1-=asdasd;
printf("然后你立马意识到你的T%d有%d个小错误\n",ee,asdasd);
}else if(Q[ee].gua_num2){
int asdasd=Rand(min(Q[ee].gua_num2,2),min(Q[ee].gua_num2,5));
Q[ee].gua_num2-=asdasd;
printf("然后你立马意识到你的T%d有%d个一般错误\n",ee,asdasd);
}else{
int asdasd=Rand(min(Q[ee].gua_num3,2),min(Q[ee].gua_num3,5));
Q[ee].gua_num3-=asdasd;
printf("然后你立马意识到你的T%d有%d个大错误\n",ee,asdasd);
}
printf("并且回来立马改正了它们\n");
Sleep(2000);
system("cls");
}
if(Which==2){
int ee=Rand(1,4);
while(1){
if(kkk[ee]==1)break;
ee++;
if(ee==5)ee=1;
}
printf("然后你灵感乍现,对于T%d有了思路!\n",ee);
Q[ee].now_think+=Rand(min(Q[ee].all_think[Q[ee].Now_think]-Q[ee].now_think,0),min(Q[ee].all_think[Q[ee].Now_think]-Q[ee].now_think,20));
Sleep(2000);
system("cls");
}
}else{
printf("然后什么也没有发生\n");
}
Sleep(1000);
system("cls");
}
continue;
}
if(x==6){
if(!Food){
printf("你现在没有食物!\n");
Sleep(1000);
system("cls");
continue;
}
if(testtime<=0){
printf("你现在没有时间了!\n");
Sleep(1000);
system("cls");
continue;
}
testtime--;
Food--;
Bathroom++;
printf("你花了1min吃了一个食物\n");
Sleep(1000);
system("cls");
continue;
}
system("cls");
if(x==5){
int y;
while(1){
printf("考试剩余时间:%dmin\n",testtime);
printf("你打算浪费多久时间?\n");
scanf("%d",&y);
if(y<0){
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}else if(y==0){
printf("你浪费了个寂寞!\n");
Sleep(1000);
system("cls");
}else{
if(y>testtime){
printf("你没有那么多时间了!\n");
Sleep(1000);
system("cls");
}else{
break;
}
}
}
testtime-=y;
printf("你浪费了%dmin\n",y);
Sleep(1000);
system("cls");
}else{
if(kkk[x]==0){
testtime--;
int y;
while(1){
look(x,0);
printf("现在你要干什么?\n");
printf("1.想这道题\n2.干点别的事情\n");
scanf("%d",&y);
if(y==1||y==2){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(y==1){
Think(x);
}
}else if(kkk[x]==1){
system("cls");
Think(x);
}else if(kkk[x]==2){
int y;
while(1){
look(x,1);
printf("你正在写这道题的%d分做法\n",Q[x].bufen_fen[Q[x].Now_think]);
printf("你的代码进度:");
Do(Q[x].now_code,Q[x].real_code[Q[x].Now_think]);
printf("\n现在你要干什么?\n1.写这道题\n2.干点别的事情\n");
scanf("%d",&y);
if(y==1||y==2){
break;
}else{
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
}
system("cls");
if(y==1){
code(x);
}
}else{
int q;
while(1){
printf("你决定再看看T%d\n",x);
printf("你打算怎么做?\n1.检查此题的%d分做法\n2.重新思考\n3.干点别的事情\n",Q[x].bufen_fen[Q[x].code_better]);
scanf("%d",&q);
if(1<=q&&q<=3){
break;
}
printf("输入不合法!\n");
Sleep(1000);
system("cls");
}
system("cls");
if(q==1){
check(x);
}else if(q==2){
kkk[x]=1;
Think(x);
}
}
}
system("cls");
}
printf("考试结束了!\n你的测试结果:\n");
ans=0;
for(int i=1;i<=4;i++){
Q[i].socer=Q[i].maybe_socer;
printf("T%d:\n",i);
int print=0;
if(Q[i].gua_num1+Q[i].gua_num2+Q[i].gua_num3==0||Q[i].socer==0){
Q[i].socer=max(Q[i].socer,0);
ans+=Q[i].socer;
printf("你这道题没有犯任何错误\n预计分数:%d,实际分数:%d\n",Q[i].maybe_socer,Q[i].socer);
continue;
}
printf("你");
if(Q[i].gua_num1){
printf("犯了%d个小错误",Q[i].gua_num1);
print=1;
for(int j=1;j<=Q[i].gua_num1;j++){
Q[i].socer-=Rand(1,4)*5;
}
}
if(Q[i].gua_num2){
if(print)printf(",");
printf("犯了%d个一般错误",Q[i].gua_num2);
print=1;
for(int j=1;j<=Q[i].gua_num2;j++){
Q[i].socer-=Rand(6,10)*5;
}
}
if(Q[i].gua_num3){
if(print)printf(",");
printf("犯了%d个严重错误",Q[i].gua_num3);
print=1;
for(int j=1;j<=Q[i].gua_num3;j++){
Q[i].socer-=Rand(16,20)*5;
}
}
Q[i].socer=max(Q[i].socer,0);
ans+=Q[i].socer;
printf("\n预计分数:%d,实际分数:%d\n",Q[i].maybe_socer,Q[i].socer);
}
printf("总分:%d\n",ans);
system("pause");
}
void code_robot(int now_x,int Time){
int Next=-1;
for(int i=1;i<=Time;i++){
int asd;
while(1){
asd=Rand(1,100000);
if(asd^Next){
break;
}
}
Next=asd;
if(asd<=65*Gua-100*Q[now_x].gua_num1){
Q[now_x].gua_num1++;
}else if(asd<=95*Gua-100*Q[now_x].gua_num2){
Q[now_x].gua_num2++;
}else if(asd<=100*Gua-100*Q[now_x].gua_num3){
Q[now_x].gua_num3++;
}
}
}
int check_robot_yangli(int now_x){
for(int i=1;i<=Q[now_x].Yangli;i++){
if(Q[now_x].Yangli_strength[i]<=Q[now_x].gua_num1*5+Q[now_x].gua_num2*10+Q[now_x].gua_num3*50+100-Q[now_x].bufen_fen[Q[now_x].bufen]){
return 1;
}
}
return 0;
}
int check_robot_duipai(int now_x,int &Give_you_time,int &Duipai,int &zhuangtai){
if(Give_you_time<=0){
return 0;
}
if(Q[now_x].duipai){
int asd=Q[now_x].duipai_baoli;
if(!Duipai){
asd++;
}
if(asd>=Give_you_time){
Give_you_time-=asd;
if(!Duipai){
Duipai=1;
}
}else{
return 0;
}
int asdasdasd=0,Next=-1;
for(int i=1;i<=200;i++){
int asd;
while(1){
asd=Rand(1,100);
if(asd^Next){
break;
}
}
Next=asd;
if(asd<=Q[now_x].gua_num1*5+Q[now_x].gua_num2*10+Q[now_x].gua_num3*50-100+Q[now_x].bufen_fen[Q[now_x].bufen]){
asdasdasd=1;
break;
}
}
if(asdasdasd){
zhuangtai=-1;
return 1;
}else{
zhuangtai=-2;
return 0;
}
}else{
zhuangtai=-2;
return 0;
}
}
int No[6]={};
void check_robot_jingtai(int now_x,int &Give_you_time,int &Duipai){
if(Give_you_time==0){
return;
}
int check_time;
if(Give_you_time<=10){
check_time=Give_you_time;
}else{
check_time=10;
}
Give_you_time-=check_time;
int num1=0,num2=0,num3=0,Next=-1;
for(int i=1;i<=check_time;i++){
int asd;
while(1){
asd=Rand(1,100);
if(asd^Next)break;
}
Next=asd;
if(asd<=99&&Q[now_x].gua_num3){
Q[now_x].gua_num3--;
num3++;
}else if(asd<=20&&Q[now_x].gua_num2){
Q[now_x].gua_num2--;
num2++;
}else if(asd<=1&&Q[now_x].gua_num1){
Q[now_x].gua_num1--;
num1++;
}
}
if(check_robot_yangli(now_x)){
check_robot_jingtai(now_x,Give_you_time,Duipai);
return;
}
if(check_robot_duipai(now_x,Give_you_time,Duipai,No[now_x])){
check_robot_jingtai(now_x,Give_you_time,Duipai);
return;
}
}
int test_robot(){
for(int i=0;i<=5;i++){
No[i]=0;
}
int opop=0,now_x=1,all=0,Duipai=0;
testtime-=4;
while(1){
if(all){
break;
}
if(testtime<=0)break;
int Give_you_time=opop+59;
int beifen=Give_you_time;
int youthink=Q[now_x].all_think[Q[now_x].bufen];
if(youthink<=30){
Give_you_time-=youthink;
Give_you_time-=Q[now_x].real_code[Q[now_x].bufen];
if(testtime<youthink+Q[now_x].real_code[Q[now_x].bufen]){
testtime=0;
continue;
}
code_robot(now_x,Q[now_x].real_code[Q[now_x].bufen]);
Q[now_x].maybe_socer=100;
int have_gua=check_robot_yangli(now_x);
if(have_gua){
check_robot_jingtai(now_x,Give_you_time,Duipai);
}else{
if(check_robot_duipai(now_x,Give_you_time,Duipai,No[now_x])){
check_robot_jingtai(now_x,Give_you_time,Duipai);
}
}
now_x++;
opop=Give_you_time;
testtime=testtime-(beifen-Give_you_time);
}else if(youthink<=60){
if(Give_you_time>=90){
Give_you_time-=youthink,Give_you_time-=Q[now_x].real_code[Q[now_x].bufen];
if(testtime<youthink+Q[now_x].real_code[Q[now_x].bufen]){
testtime=0;
continue;
}
code_robot(now_x,Q[now_x].real_code[Q[now_x].bufen]);
Q[now_x].maybe_socer=100;
int have_gua=check_robot_yangli(now_x);
if(have_gua){
check_robot_jingtai(now_x,Give_you_time,Duipai);
}else{
if(check_robot_duipai(now_x,Give_you_time,Duipai,No[now_x])){
check_robot_jingtai(now_x,Give_you_time,Duipai);
}
}
}else{
int Choose=0;
for(int i=Q[now_x].bufen-1;i>=1;i--){
if(Q[now_x].all_think[i]<=30){
Choose=i;
break;
}
}
if(!Choose){
Give_you_time-=Q[now_x].all_think[Choose],Give_you_time-=Q[now_x].real_code[Choose];
if(testtime<Q[now_x].all_think[Choose]+Q[now_x].real_code[Choose]){
testtime=0;
continue;
}
code_robot(now_x,Q[now_x].real_code[Choose]);
No[now_x]=Choose;
Q[now_x].maybe_socer=Q[now_x].bufen_fen[Choose];
}else{
No[now_x]=114514;
}
}
testtime=testtime-(beifen-Give_you_time);
now_x++;
opop=Give_you_time;
}else{
int Choose=0;
for(int i=Q[now_x].bufen-1;i>=1;i--){
if(Q[now_x].all_think[i]<=30){
Choose=i;
break;
}
}
if(!Choose){
Give_you_time-=Q[now_x].all_think[Choose];
Give_you_time-=Q[now_x].real_code[Choose];
if(testtime<Q[now_x].all_think[Choose]+Q[now_x].real_code[Choose]){
testtime=0;
continue;
}
code_robot(now_x,Q[now_x].real_code[Choose]);
No[now_x]=Choose,Q[now_x].maybe_socer=Q[now_x].bufen_fen[Choose];
}else{
No[now_x]=114514;
}
testtime=testtime-(beifen-Give_you_time);
now_x++;
opop=Give_you_time;
}
if(now_x==5){
all=1;
}
}
while(1){
if(!Food)break;
if(testtime<4)break;
Food--,testtime-=4;
int OK1=0;
for(int i=1;i<=4;i++){
if(Q[i].gua_num1+Q[i].gua_num2+Q[i].gua_num3){
OK1=1;
break;
}
}
if(!OK1){
break;
}
int ee=Rand(1,4);
while(1){
if(Q[ee].gua_num1+Q[ee].gua_num2+Q[ee].gua_num3)break;
ee++;
if(ee==5)ee=1;
}
if(Q[ee].gua_num1){
int asdasd=Rand(min(Q[ee].gua_num1,2),min(Q[ee].gua_num1,5));
Q[ee].gua_num1-=asdasd;
}else if(Q[ee].gua_num2){
int asdasd=Rand(min(Q[ee].gua_num2,2),min(Q[ee].gua_num2,5));
Q[ee].gua_num2-=asdasd;
}else{
int asdasd=Rand(min(Q[ee].gua_num3,2),min(Q[ee].gua_num3,5));
Q[ee].gua_num3-=asdasd;
}
}
int OK=0,I=0;
while(1){
if(testtime<=0){
break;
}
OK=0;
for(int i=I+1;i<=4;i++){
if(No[i]>0&&No[i]!=114514){
OK=1,I=i;
break;
}
}
if(OK){
int youthink=Q[now_x].all_think[Q[now_x].bufen]-Q[now_x].all_think[No[I]];
if(youthink+15<=testtime){
testtime=testtime-youthink-(Q[now_x].real_code[Q[now_x].bufen]-Q[now_x].real_code[No[I]]);
if(testtime<0){
break;
}
code_robot(I,Q[now_x].real_code[Q[now_x].bufen]-Q[now_x].real_code[No[I]]);
}
}else{
break;
}
}
OK=I=0;
while(1){
if(testtime<=0){
break;
}
OK=0;
for(int i=I+1;i<=4;i++){
if(No[i]==-1){
OK=1,I=i;
break;
}
}
if(OK){
while(1){
if(testtime<=0){
break;
}
check_robot_jingtai(I,testtime,Duipai);
if(!check_robot_yangli(I)){
if(!check_robot_duipai(I,testtime,Duipai,No[I])){
break;
}
}
}
}else{
break;
}
}
I=4;
while(1){
if(testtime<=0){
break;
}
check_robot_jingtai(I,testtime,Duipai);
}
int ans=0;
for(int i=1;i<=4;i++){
Q[i].socer=Q[i].maybe_socer;
if(Q[i].gua_num1+Q[i].gua_num2+Q[i].gua_num3==0||Q[i].socer==0){
Q[i].socer=max(Q[i].socer,0);
ans+=Q[i].socer;
continue;
}
if(Q[i].gua_num1){
for(int j=1;j<=Q[i].gua_num1;j++)Q[i].socer-=Rand(1,4)*5;
}
if(Q[i].gua_num2){
for(int j=1;j<=Q[i].gua_num2;j++)Q[i].socer-=Rand(6,10)*5;
}
if(Q[i].gua_num3){
for(int j=1;j<=Q[i].gua_num3;j++)Q[i].socer-=Rand(16,20)*5;
}
Q[i].socer=max(Q[i].socer,0);
ans+=Q[i].socer;
}
return ans;
}
struct asd{
int num,pre;
bool operator<(const asd other)const{
return pre<other.pre;
}
}a[10],aa[10];
char saf[114514];
void weakness_and_strengh(){
for(int i=1;i<=8;i++){
a[i]=aa[i];
}
sort(a+1,a+1+8);
int kkk=1;
while(1){
if(a[1].pre==a[kkk].pre){
kkk++;
}else{
kkk--;
break;
}
}
printf("你的弱项有:\n");
for(int i=1;i<=kkk;i++) cout<<ma[a[i].num]<<'\n';
kkk=8;
while(1){
if(a[8].pre==a[kkk].pre){
kkk--;
}else{
kkk++;
break;
}
}
printf("你的强项有:\n");
for(int i=kkk;i<=8;i++) cout<<ma[a[i].num]<<'\n';
}
void prepare_you(int x){
en=diff*20,st=en-19;
for(int i=0;i<=8;i++){
Your[i]=Rand(st,en);
if(i>=1){
aa[i].num=i,aa[i].pre=Your[i];
}
}
Food=Rand(0,2);
if(x)printf("你带了%d个食物\n",Food),weakness_and_strengh();
Gua=Rand(0,400);
if(x){
if((diff-1)*20+1<=Your[0]&&Your[0]<=(diff-1)*20+4){
printf("你的码力弱爆了\n");
}else if((diff-1)*20+5<=Your[0]&&Your[0]<=(diff-1)*20+8){
printf("你的码力有点弱\n");
}else if((diff-1)*20+9<=Your[0]&&Your[0]<=(diff-1)*20+12){
printf("你的码力一般\n");
}else if((diff-1)*20+13<=Your[0]&&Your[0]<=(diff-1)*20+16){
printf("你的码力很好\n");
}else{
printf("你的码力非常强\n");
}
printf("你的挂分概率:");
if(Gua<=20){
printf("极低\n");
}else if(Gua<=130){
printf("较低\n");
}else if(Gua<=270){
printf("一般\n");
}else if(Gua<=380){
printf("较高\n");
}else{
printf("极高\n");
}
}
}
void prepare_ti(){
for(int i=1;i<=4;i++){
Q[i].num=rand()%2+1,Q[i].bufen=Rand(0,2);
if(Q[i].bufen==1){
Q[i].bufen_fen[1]=Rand(1,19)*5,Q[i].bufen_fen[2]=100;
}else if(Q[i].bufen==2){
Q[i].bufen_fen[1]=Rand(1,10)*5,Q[i].bufen_fen[2]=Rand(11,19)*5,Q[i].bufen_fen[3]=100;
}else{
Q[i].bufen_fen[1]=100;
}
Q[i].bufen++;
bool A[5]={};
for(int j=1;j<=Q[i].num;j++){
int x;
x=Rand(1,8);
while(1){
if(!flag[x]&&!A[x]){
flag[x]=1,A[x]=1,maxn++;
if(maxn==5){
for(int kk=1;kk<=8;kk++)flag[kk]=0;
maxn=0;
}
break;
}
x++;
if(x==8+1)x=1;
}
Q[i].Need[j]=x;
if(i==1){
Q[i].Time[j]=Rand(5,20);
Q[i].Needab[j]=Rand((diff-1)*20+1,(diff-1)*20+5);
Q[i].codeTime[j]=Rand(5,15);
}else if(i==2){
Q[i].Time[j]=Rand(10,20);
Q[i].codeTime[j]=Rand(10,20);
Q[i].Needab[j]=Rand((diff-1)*20+3,(diff-1)*20+10);
}else if(i==3){
Q[i].Time[j]=Rand(20,40);
Q[i].Needab[j]=Rand((diff-1)*20+5,(diff-1)*20+15);
Q[i].codeTime[j]=Rand(10,40);
}else{
Q[i].Time[j]=Rand(30,60);
Q[i].Needab[j]=Rand((diff-1)*20+7,(diff-1)*20+20);
Q[i].codeTime[j]=Rand(20,60);
Q[i].codeTime[j]=Rand(20+diff*2,60+diff*2);
}
Q[i].real_time[j]=max(1,Q[i].Time[j]-2*(Your[Q[i].Need[j]]-Q[i].Needab[j]));
}
Q[i].code[Q[i].bufen]=0;
Q[i].all_think[Q[i].bufen]=0;
for(int j=1;j<=Q[i].num;j++){
Q[i].code[Q[i].bufen]+=Q[i].codeTime[j];
Q[i].all_think[Q[i].bufen]+=Q[i].real_time[j];
}
Q[i].code[Q[i].bufen]=(int)(ceil((int)(Q[i].code[Q[i].bufen])/Q[i].num));
Q[i].real_code[Q[i].bufen]=Q[i].code[Q[i].bufen]-(Your[0]-10-(diff-1)*20);
Q[i].real_code[Q[i].bufen]=max(1,Q[i].real_code[Q[i].bufen]);
for(int j=1;j<Q[i].bufen;j++){
Q[i].all_think[j]=(int)(Q[i].all_think[Q[i].bufen]*1.0*(Q[i].bufen_fen[j]/100.0)+0.5);
Q[i].all_think[j]=max(Q[i].all_think[j],1);
Q[i].real_code[j]=(int)(Q[i].real_code[Q[i].bufen]*1.0*(Q[i].bufen_fen[j]/100.0)+0.5);
Q[i].real_code[j]=max(Q[i].real_code[j],1);
}
Q[i].Yangli=Rand(2,5);
for(int j=1,kkk=Q[i].Yangli;j<=Q[i].Yangli;j++,kkk--){
Q[i].Yangli_strength[j]=Rand(1+(kkk-1)*(100/Q[i].Yangli),kkk*(100/Q[i].Yangli));
}
Q[i].duipai=Rand(0,1);
if(Your[0]<=10){
Q[i].duipai_baoli=1;
}else{
Q[i].duipai_baoli=2;
}
}
}
void prepare_ti_robot(){
for(int i=1;i<=4;i++){
for(int j=1;j<=Q[i].num;j++){
Q[i].real_time[j]=Q[i].Time[j]-2*(Your[Q[i].Need[j]]-Q[i].Needab[j]);
Q[i].real_time[j]=max(1,Q[i].real_time[j]);
}
Q[i].all_think[Q[i].bufen]=0;
for(int j=1;j<=Q[i].num;j++){
Q[i].all_think[Q[i].bufen]+=Q[i].real_time[j];
}
Q[i].real_code[Q[i].bufen]=Q[i].code[Q[i].bufen]-(Your[0]-10-(diff-1)*20);
Q[i].real_code[Q[i].bufen]=max(1,Q[i].real_code[Q[i].bufen]);
for(int j=1;j<Q[i].bufen;j++){
Q[i].all_think[j]=(int)(Q[i].all_think[Q[i].bufen]*1.0*(Q[i].bufen_fen[j]/100.0)+0.5);
Q[i].all_think[j]=max(Q[i].all_think[j],1);
Q[i].real_code[j]=(int)(Q[i].real_code[Q[i].bufen]*1.0*(Q[i].bufen_fen[j]/100.0)+0.5);
Q[i].real_code[j]=max(Q[i].real_code[j],1);
}
}
}
int fenshuxian[120];
void peiyangshengcheng(int x){
int lei=Rand(1,1000);
if(lei<=140){
if(!x){
printf("你是一个不会OI,文化课也很一般的学生。一次阴差阳错的机会,你进入了竞赛班学习OI\n");
for(int i=1;i<=8;i++){
aa[i].num=i;
}
}
whk[x]=Rand(301,600);
zhuanxin[x]=Rand(1,60);
Guaping[x]=Rand(100,400);
}else if(lei<=480){
if(!x){
printf("你是一个优秀的文化课学生,在老师建议下,你进入了竞赛班学习OI\n");
for(int i=1;i<=8;i++){
aa[i].num=i;
}
}
whk[x]=Rand(1,150);
zhuanxin[x]=Rand(1,100);
Guaping[x]=Rand(0,400);
}else if(lei<=630){
if(!x)printf("你是一个有一定OI基础的学生,但是文化课不咋地\n");
for(int i=1;i<=8;i++){
fact[x][i]=Rand(1,5);
if(!x)aa[i].num=i;
}
fact[x][0]=Rand(1,5);
whk[x]=Rand(300,600);
zhuanxin[x]=Rand(1,80);
Guaping[x]=Rand(100,400);
}else if(lei<=960){
if(!x)printf("你是一个有一定OI基础的学生,文化课成绩也不错\n");
for(int i=1;i<=8;i++){
fact[x][i]=Rand(1,5);
if(!x)aa[i].num=i;
}
fact[x][0]=Rand(1,5);
whk[x]=Rand(150,300);
zhuanxin[x]=Rand(1,100);
Guaping[x]=Rand(0,400);
}else{
if(!x)printf("你是一个“种子选手”,不仅文化课成绩不错,OI学习也比普通人优秀一点\n");
for(int i=1;i<=8;i++){
fact[x][i]=Rand(2,6);
if(!x)aa[i].num=i;
}
fact[x][0]=Rand(2,6);
whk[x]=Rand(1,150);
zhuanxin[x]=Rand(20,100);
Guaping[x]=Rand(0,200);
}
if(x){
return ;
}
if(zhuanxin[x]>90){
printf("你上课时几乎不走神");
}else if(zhuanxin[x]>60){
printf("你上课时偶尔走神");
}else if(zhuanxin[x]>40){
printf("你上课时可能走神");
}else if(zhuanxin[x]>10){
printf("你上课时会走神");
}else{
printf("你上课时经常走神");
}
printf(",");
if(Guaping[x]<=20){
printf("几乎不犯粗心的错误\n");
}else if(Guaping[x]<=130){
printf("偶尔会犯粗心的错误\n");
}else if(Guaping[x]<=270){
printf("可能会犯粗心的错误\n");
}else if(Guaping[x]<=380){
printf("会犯粗心的错误\n");
}else{
printf("经常犯粗心的错误\n");
}
}
void PeiYang(){
for(int i=1;i<=50;i++){
peiyangshengcheng(i);
}
}
int main(){
srand(time(0)),ma[1]="暴力",ma[2]="树论",ma[3]="数学",ma[4]="图论",ma[5]="思维",ma[6]="数据结构",ma[7]="动态规划",ma[8]="模拟";
int x;
while(1){
printf("请选择你的模式:\n1.单次测试\n2.赛季模拟\n3.培养一个OIer(测试)\n");
scanf("%d",&x);
if(x==1||x==2||x==3) break;
printf("输入不合法!");
Sleep(500);
system("cls");
}
if(x==1){
diff=1,prepare_you(1),prepare_ti(),printf("请记下你的数据,准备开始游戏\n"),system("pause"),system("cls"),test();return 0;
}
if(x==3){
peiyangshengcheng(0);
printf("记录下你的数据,即将开始\n");
system("pause");
PeiYang();
return 0;
}
diff=Rand(1,5);
prepare_you(1);
for(int i=0;i<=8;i++){
Your_bei[i]=Your[i];
}
Gua_bei=Gua;
printf("\n");
if(diff==1){
printf("你的水平:CSP初赛");
}else if(diff==2){
printf("你的水平:CSP复赛");
}else if(diff==3){
printf("你的水平:NOIP");
}else if(diff==4){
printf("你的水平:省选");
}else{
printf("你的水平:NOI");
}
printf("\n\n");
printf("请记下你的数据,准备开始游戏\n");
system("pause");
system("cls");
for(int i=1;i<=5;i++){
if(i==1){
printf("当前测试:CSP初赛");
}else if(i==2){
printf("当前测试:CSP复赛");
}else if(i==3){
printf("当前测试:NOIP");
}else if(i==4){
printf("当前测试:省选");
}else{
printf("当前测试:NOI");
}
printf("\n");
system("pause");
testtime=240;
diff=i;
for(int j=1;j<=4;j++){
Q[j].clear();
kkk[j]=0;
}
Food=Rand(0,2);
prepare_ti();
for(int j=1;j<=4;j++){
QQ[j]=Q[j];
}
test();
for(int i=1;i<=100;i++){
prepare_you(0);
for(int j=1;j<=4;j++){
Q[j].clear();
kkk[j]=0;
Q[j]=QQ[j];
}
prepare_ti_robot();
testtime=240;
fenshuxian[i]=test_robot();
}
Sleep(1000);
sort(fenshuxian+1,fenshuxian+1+100);
int Die=0;
if(i==1){
Die=fenshuxian[50];
}else if(i==2){
Die=fenshuxian[55];
}else if(i==3){
Die=fenshuxian[60];
}else if(i==4){
Die=fenshuxian[65];
}else if(i==5){
Die=fenshuxian[70];
}
printf("分数线:%d\n",Die);
Sleep(1000);
if(ans<Die){
printf("你没能通过本次测试\n所以结束啦QAQ\n");
system("pause");
return 0;
}
for(int i=0;i<=8;i++){
Your[i]=Your_bei[i];
}
Gua=Gua_bei;
system("cls");
}
printf("恭喜!你通过了所有的测试!");
system("pause");
return 0;
}