题意:有两个人 每个人可以撒两个骰子 给出每个骰子的最大和最小值
谁撒出的数值和大谁获胜
思路: 把两个人可能的值区间算出 因为是均匀分布
所以两人重叠的区间胜率相同 那么 只需计算谁获胜的区间大即可得出结果
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<vector> #include<stdlib.h> #include<algorithm> using namespace std; int dir4[][2]={{0,1},{1,0},{0,-1},{-1,0}}; int dir8[][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; int main() { int a1,b1,a2,b2,A1,B1,A2,B2; while(scanf("%d%d%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&A1,&B1,&A2,&B2)!=EOF) { int minn1=a1+a2,maxn1=b1+b2,minn2=A1+A2,maxn2=B1+B2; //printf("%d %d %d %d",minn1,maxn1,minn2,maxn2); if(maxn2<=minn1 || maxn1<=minn2) { //printf("1... "); if(maxn2<=minn1) printf("Gunnar "); else printf("Emma "); } else if(minn1==minn2 && maxn1==maxn2) { // printf("2... "); printf("Tie "); //continue; } else if((minn2<=maxn1&&minn2>=minn1&&maxn2>=maxn1) || (minn1<=maxn2&&minn2<=minn1&&maxn1>=maxn2)) { //printf("3... "); if(minn2<=maxn1&&minn2>=minn1&&maxn2>=maxn1) printf("Emma "); else printf("Gunnar "); } else if((minn1>=minn2&&maxn2>=maxn1) || (minn2>=minn1&&maxn2<=maxn1)) { //printf("%d %d %d %d",minn1,maxn1,minn2,maxn2); if(minn1>=minn2&&maxn2>=maxn1) { int len1=minn1-minn2; int len2=maxn2-maxn1; if(len2>len1) printf("Emma "); else if(len1==len2) printf("Tie "); else printf("Gunnar "); } else { int len1=minn2-minn1; int len2=maxn1-maxn2; if(len2>len1) printf("Gunnar "); else if(len1==len2) printf("Tie "); else printf("Emma "); } } } return 0; }