首页 > 其他 > 详细

topcoder 673

时间:2015-11-19 23:58:48      阅读:442      评论:0      收藏:0      [点我收藏+]

DiV1

300:给一组士兵再给一组战马都有权值。

       安排战马的顺序的方案数,是第一个士兵和其战马的权值乘积最大。

       做法:随便暴力就好。

               枚举战马和第一个士兵匹配。其他士兵按权值从大到小排序,战马权值按从小到大排序。1.

               举个例子:士兵,A,B,C,D,E

                             战马,a,b,c,d,e

                             第一个士兵和其战马的乘积是:tmp 

                             A 可以A*c<tmp;

                            B 可以 B*d<tmp;

                                B 与战马的乘积小于tmp,其战马的权值一定大于等于c,因为 1.

所以答案就是ans = (c-第几个士兵+1)*(d-第几个士兵+1)...

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 typedef long long ll;
 5 
 6 #define mod 1000000007
 7 
 8 int a[12345],b[12345];
 9 
10 class BearCavalry {
11     public:
12     int countAssignments(vector <int> warriors, vector <int> horses) {
13     int n=warriors.size();
14     for (int i=0;i<n;i++)
15     a[i]=warriors[i];
16     sort(a+1,a+n);
17     reverse(a+1,a+n);
18 
19     ll ans=0;
20 
21     for (int i=0;i<n;i++)
22     {
23         int t=0;
24         for (int j=0;j<n;j++)
25         if (i!=j) b[t++]=horses[j];
26         sort(b,b+t);
27 
28         int tmp=a[0]*horses[i];
29 
30 
31         ll num=1;
32         for (int i=1;i<n;i++){
33              int x=-1;
34              for (int j=0;j<t;j++)
35              {
36                  if (a[i]*b[j]<tmp)
37                  {
38                      x=j;
39                  }
40                  else break;
41              }
42              //if (x==-1&&i>1) x=0;
43              int xx=x+1-(i-1);
44              if (xx<0) xx=0;
45              num=num*xx%mod;
46          }
47          ans=(ans+num)%mod;
48        // cout<<num<<endl;
49 
50     }
51     return ans;
52     }
53 };
54 
55 
56 int main()
57 {
58     BearCavalry p;
59     int n;
60     cin>>n;
61     vector<int>aa,ba;
62     for (int i=1;i<=n;i++)
63     {
64       int x;
65       cin>>x;
66       aa.push_back(x);
67     }
68         for (int i=1;i<=n;i++)
69     {
70       int x;
71       cin>>x;
72       ba.push_back(x);
73     }
74 
75     cout<<p.countAssignments(aa,ba);
76     return 0;
77 }

 

                               

topcoder 673

原文:http://www.cnblogs.com/blankvoid/p/4979430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!