USACO 2.3.5 Controlling Companies

来源:互联网 发布:淘宝 评价 不见了 编辑:程序博客网 时间:2024/05/13 13:24

分析:其实题目中给出了三个条件:1.自己可以控制自己的公司2.公司A拥有大于50%的公司B的股票3.公司A控制K(K >= 1)个公司,记为C1, ..., CK,每个公司Ci拥有xi%的公司B的股票,并且x1+ .... + xK > 50%。所以就设法编程满足这三个条件就好了。

源代码:

/*ID: supersnow0622PROG: testLANG: C++*/#include <iostream>#include <fstream>#include <string>#include<memory.h>using namespace std;int have[101][101];int control[101][101];int main() {    ofstream fout ("test.out");    ifstream fin ("test.in");    int N,i,j,p,num;    cin>>N;    memset(control,0,sizeof(control));    for(int a=0;a<101;a++)      control[a][a]=1;    for(int a=0;a<N;a++)    {      cin>>i>>j>>p;      have[i][j]=p;      if(p>50)      control[i][j]=true;    }    bool judge=true;    while(judge)    {      judge=false;      for(int a=1;a<101;a++)        for(int b=1;b<101;b++)        {          if(!control[a][b])//在不知道a是否能控制b的情况下           {             num=0;             for(int c=1;c<101;c++)//累加通过a控制多个c从而使a拥有的b的股份达到50以上                if(b!=c&&control[a][c])                  num+=have[c][b];             if(num>50)            {                control[a][b]=true;                   judge=true;            }           }        }    }   for(int a=1;a<101;a++)     for(int b=1;b<101;b++)     {       if(control[a][b]&&a!=b)        cout<<a<<" "<<b<<endl;     }    return 0;}



       

原创粉丝点击