栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1198 Single

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1198 Single

#include<iostream> #include<string>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>using namespace std; #define rep(i,n) for(int i=0; i<(n); i++)#define repf(i,n,m) for(int i=(n); i<=(m); i++)//正循环的#define repd(i,n,m) for(int i=(n); i>=(m); i--) //负循环的 #define max(a,b) (a)>(b)?(a):(b)#define min(a,b) (a)<(b)?(a):(b)#define ll __int64#define arc(a) ((a)*(a))#define inf 10000000   //最大值的#define exp 0.0000001     //浮点型的#define N   10005  //记录开的数组double a[104][N];int n;int test=0;struct node{    int st,p;    node() {};    node(int st,int p):st(st),p(p){};};vector<node>q[N];void dfs(int i,int l,double r){     rep(j,q[l].size())    {        if(q[l][j].st==2)          dfs(i,q[l][j].p,r/q[l].size());        if(q[l][j].st==1)         a[i][q[l][j].p]-=r/q[l].size();        if(q[l][j].st==0)         a[i][n+1]+=q[l][j].p*r/q[l].size();    }}void fun(){    memset(a,0,sizeof(a));    char s[N];    int len;    repf(i,1,n)    {        rep(j,N)        q[j].clear();        gets(s);        len=strlen(s);        stack<int>r;        int now=0,t=0,m=0;        int sign=0;        r.push(0);        int l;        a[i][i]=1;        rep(j,len) if(s[j]=='(') {l=j+1; break;}        repf(j,l,len-1)        { if(isdigit(s[j]))  { m=m*10+s[j]-'0';if(sign==0)  sign=1;} else {     if(sign!=0) {q[now].push_back(node(0,m*sign)); m=sign=0;}     if(isalpha(s[j]))  q[now].push_back(node(1,s[j]-'a'+1));     if(s[j]=='(')  {r.push(now); q[now].push_back(node(2,++t)); now=t;}     if(s[j]==')') { now=r.top();r.pop();}     if(s[j]=='-') sign=-1; }        }        dfs(i,0,1);    }}double fab(double x){    if(fabs(x-0)<exp) return true; return false;}void guess(){    repf(i,1,n)    {        int k=n+1;        repf(j,i,n) if(!fab(a[j][i]))  {k=j; break;}        if(k>n)  continue;        repf(j,1,n+1)          swap(a[i][j],a[k][j]);        repf(j,1,n)        { if(j!=i) {  double x=a[j][i]/a[i][i];  repf(k,i,n+1)   a[j][k]-=a[i][k]*x;}        }    }    repf(i,1,n)      if(fab(a[i][i]))        repf(j,1,n)          if(!fab(a[j][i])) a[j][j]=0;    printf("Game %dn",++test);    repf(i,1,n)      if(fab(a[i][i]))        printf("Expected score for %c undefinedn",i+'a'-1);    else     printf("Expected score for %c = %0.3lfn",i+'a'-1,a[i][n+1]/a[i][i]);    printf("n");}int main(){    while(scanf("%d",&n))    {        if(n==0)         break;        getchar();        fun();        guess();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号