码迷,mamicode.com
首页 > 数据库 > 详细

MemSQL Start[c]UP 2.0 - Round 1

时间:2014-07-30 23:51:35      阅读:464      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   2014   

搞了好久才把大部分题目题解看完了,真是太弱了。

A题简单暴力题一个一个匹配,对应位置字母要么相同,要么是‘.‘.

B题给定一个矩阵,左下角(0,0),右上角(n, m),取4个不同的点连成一段折线,要有最长的折线长度。

排除n == 0 和m == 0 ,剩下的情况中总共由4中情况:

枚举一下就可以了

1. (0,0)->(n,m)->(0, m)->(n, 0)

2. (0,0)->(n,m)->(n, 0)->(0, m)

3.(n,m-1)->(0,0)->(n,m)->(0,1)

4.(0,m-1)->(n,0)->(0,m)->(n,1)

代码:

bubuko.com,布布扣
  1 //Template updates date: 20140718
  2 #include <iostream>
  3 #include <sstream>
  4 #include <cstdio>
  5 #include <climits>
  6 #include <ctime>
  7 #include <cctype>
  8 #include <cstring>
  9 #include <cstdlib>
 10 #include <string>
 11 #include <stack>
 12 #include <set>
 13 #include <map>
 14 #include <cmath>
 15 #include <vector>
 16 #include <queue>
 17 #include <algorithm>
 18 #define  esp 1e-6
 19 #define  inf 0x3f3f3f3f
 20 #define  pi acos(-1.0)
 21 #define  pb push_back
 22 #define  lson l, m, rt<<1
 23 #define  rson m+1, r, rt<<1|1
 24 #define  lowbit(x) (x&(-x))
 25 #define  mp(a, b) make_pair((a), (b))
 26 #define  bit(k) (1<<(k))
 27 #define  iin  freopen("pow.in", "r", stdin);
 28 #define  oout freopen("pow.out", "w", stdout);
 29 #define  in  freopen("solve_in.txt", "r", stdin);
 30 #define  out freopen("solve_out.txt", "w", stdout);
 31 #define  bug puts("********))))))");
 32 #define  Inout iin oout
 33 #define  inout in out
 34 
 35 #define  SET(a, v) memset(a, (v), sizeof(a))
 36 #define  SORT(a)   sort((a).begin(), (a).end())
 37 #define  REV(a)    reverse((a).begin(), (a).end())
 38 #define  READ(a, n) {REP(i, n) cin>>(a)[i];}
 39 #define  REP(i, n) for(int i = 0; i < (n); i++)
 40 #define  VREP(i, n, base) for(int i = (n); i >= (base); i--)
 41 #define  Rep(i, base, n) for(int i = (base); i < (n); i++)
 42 #define  REPS(s, i) for(int i = 0; (s)[i]; i++)
 43 #define  pf(x) ((x)*(x))
 44 #define  mod(n) ((n))
 45 #define  Log(a, b) (log((double)b)/log((double)a))
 46 #define Srand() srand((int)time(0))
 47 #define random(number) (rand()%number)
 48 #define random_range(a, b) (int)(((double)rand()/RAND_MAX)*(b-a) + a)
 49 
 50 using namespace std;
 51 typedef long long  LL;
 52 typedef unsigned long long ULL;
 53 typedef vector<int> VI;
 54 typedef pair<int,int> PII;
 55 typedef vector<PII> VII;
 56 typedef vector<PII, int> VIII;
 57 typedef VI:: iterator IT;
 58 typedef map<string, int> Mps;
 59 typedef map<int, int> Mpi;
 60 typedef map<int, PII> Mpii;
 61 typedef map<PII, int> Mpiii;
 62 double ans[4];
 63 
 64 int main() {
 65 
 66     int n, m;
 67     cin>>n>>m;
 68     if(n == 0) {
 69         printf("%d %d\n", 0, 1);
 70         printf("%d %d\n", 0, m);
 71         printf("%d %d\n", 0, 0);
 72         printf("%d %d\n", 0, m-1);
 73     } else if(m == 0) {
 74         printf("%d %d\n", 1, 0);
 75         printf("%d %d\n", n, 0);
 76         printf("%d %d\n", 0, 0);
 77         printf("%d %d\n", n-1, 0);
 78     } else {
 79         ans[0] = m + 2*sqrt(pf(n)+pf(m));
 80         ans[1] = n + 2*sqrt(pf(n)+pf(m));
 81         ans[2] = sqrt(pf(n)+pf(m))+sqrt(pf(n)+pf(m-1))*2;
 82         ans[3] = sqrt(pf(n)+pf(m))+sqrt(pf(n-1)+pf(m))*2;
 83         int tmp = 0;
 84         REP(i, 4)
 85         if(ans[tmp] < ans[i])
 86             tmp = i;
 87         if(tmp == 0) {
 88             printf("%d %d\n", 0, 0);
 89             printf("%d %d\n", n, m);
 90             printf("%d %d\n", n, 0);
 91             printf("%d %d\n", 0, m);
 92         } else if(tmp == 1) {
 93             printf("%d %d\n", 0, 0);
 94             printf("%d %d\n", n, m);
 95             printf("%d %d\n", 0, m);
 96             printf("%d %d\n", n, 0);
 97         } else if(tmp == 3) {
 98             printf("%d %d\n", 1, m);
 99             printf("%d %d\n", n, 0);
100             printf("%d %d\n", 0, m);
101             printf("%d %d\n", n-1, 0);
102         } else {
103             printf("%d %d\n", n, m-1);
104             printf("%d %d\n", 0, 0);
105             printf("%d %d\n", n, m);
106             printf("%d %d\n", 0, 1);
107         }
108     }
109     return 0;
110 }
View Code

C题:有n种卡片,每种m张,魔术师每次从中选取n张然后给观众选取,自己再从中选出一张,问最后选得的和观众相同的概率是多少?

分析:由于最后选得的相同的卡片肯定是n种中一种,而且是哪种不重要,这样只需考虑,该种卡片在选出的n张牌占多少?

选出卡片中该种有i张,然后最后魔术师和观众选中该种卡片,这样概率就是:C(m,i)*C((n-1)m, n-i)*(i/n)^2/C(nm,n) 1<=i<=min(n, m)

由于对应n种卡片都是上面这样计算的,所以上面结果*n就是最后结果了。

最后计算时候可以用log这样乘除法转化为+,-,对于概率计算很方便,对结果取一下e^ans放就可以了。

 

bubuko.com,布布扣
 1 //Template updates date: 20140718
 2 #include <iostream>
 3 #include <sstream>
 4 #include <cstdio>
 5 #include <climits>
 6 #include <ctime>
 7 #include <cctype>
 8 #include <cstring>
 9 #include <cstdlib>
10 #include <string>
11 #include <stack>
12 #include <set>
13 #include <map>
14 #include <cmath>
15 #include <vector>
16 #include <queue>
17 #include <algorithm>
18 #define  esp 1e-6
19 #define  inf 0x3f3f3f3f
20 #define  pi acos(-1.0)
21 #define  pb push_back
22 #define  lson l, m, rt<<1
23 #define  rson m+1, r, rt<<1|1
24 #define  lowbit(x) (x&(-x))
25 #define  mp(a, b) make_pair((a), (b))
26 #define  bit(k) (1<<(k))
27 #define  iin  freopen("pow.in", "r", stdin);
28 #define  oout freopen("pow.out", "w", stdout);
29 #define  in  freopen("solve_in.txt", "r", stdin);
30 #define  out freopen("solve_out.txt", "w", stdout);
31 #define  bug puts("********))))))");
32 #define  Inout iin oout
33 #define  inout in out
34 
35 #define  SET(a, v) memset(a, (v), sizeof(a))
36 #define  SORT(a)   sort((a).begin(), (a).end())
37 #define  REV(a)    reverse((a).begin(), (a).end())
38 #define  READ(a, n) {REP(i, n) cin>>(a)[i];}
39 #define  REP(i, n) for(int i = 0; i < (n); i++)
40 #define  VREP(i, n, base) for(int i = (n); i >= (base); i--)
41 #define  Rep(i, base, n) for(int i = (base); i < (n); i++)
42 #define  REPS(s, i) for(int i = 0; (s)[i]; i++)
43 #define  pf(x) ((x)*(x))
44 #define  mod(n) ((n))
45 #define  Log(a, b) (log((double)b)/log((double)a))
46 #define Srand() srand((int)time(0))
47 #define random(number) (rand()%number)
48 #define random_range(a, b) (int)(((double)rand()/RAND_MAX)*(b-a) + a)
49 
50 using namespace std;
51 typedef long long  LL;
52 typedef unsigned long long ULL;
53 typedef vector<int> VI;
54 typedef pair<int,int> PII;
55 typedef vector<PII> VII;
56 typedef vector<PII, int> VIII;
57 typedef VI:: iterator IT;
58 typedef map<string, int> Mps;
59 typedef map<int, int> Mpi;
60 typedef map<int, PII> Mpii;
61 typedef map<PII, int> Mpiii;
62 double nCr(int n, int m) {
63     double res  = 0;
64     Rep(i, 1, m+1)
65     res += -log(i)+log(n-i+1);
66     return res;
67 }
68 void solve(int n, int m) {
69     int M = min(n, m);
70     double ans = 0;
71     Rep(i, 1, M+1) {
72         double tmp = 2*(log(i)-log(n))+log(n)+nCr(m, i)+nCr((n-1)*m, n-i)-nCr(n*m, n);
73         ans += exp(tmp);
74     }
75     printf("%.9f\n", ans);
76 }
77 int main() {
78         int n, m;
79     cin>>n>>m;
80     solve(n, m);
81     return 0;
82 }
View Code

D题:有k件衣服,每件必须先后并且连续经过3种操作,洗涤,烘干,折叠,分别由3种机器来完成,其中机器数目为n1,n2,n3,一个机器只能同时对一件衣服进行对应操作。其中衣服完成每种操作的时间为t1,t2,t3.求最后完成所有衣服3种操作的最短时间。

分析:由于每种操作最多可能处理ni件衣服所以第ni+1件衣服和第1件衣服的开始处理时间必须相差ti,根据这个可以推理最终完成时间。

代码:

bubuko.com,布布扣
//Template updates date: 20140718
#include <bits/stdc++.h>
#define  esp 1e-6
#define  inf 0x3f3f3f3f
#define  pi acos(-1.0)
#define  pb push_back
#define  lson l, m, rt<<1
#define  rson m+1, r, rt<<1|1
#define  lowbit(x) (x&(-x))
#define  mp(a, b) make_pair((a), (b))
#define  bit(k) (1<<(k))
#define  iin  freopen("pow.in", "r", stdin);
#define  oout freopen("pow.out", "w", stdout);
#define  in  freopen("solve_in.txt", "r", stdin);
#define  out freopen("solve_out.txt", "w", stdout);
#define  bug puts("********))))))");
#define  Inout iin oout
#define  inout in out

#define  SET(a, v) memset(a, (v), sizeof(a))
#define  SORT(a)   sort((a).begin(), (a).end())
#define  REV(a)    reverse((a).begin(), (a).end())
#define  READ(a, n) {REP(i, n) cin>>(a)[i];}
#define  REP(i, n) for(int i = 0; i < (n); i++)
#define  VREP(i, n, base) for(int i = (n); i >= (base); i--)
#define  Rep(i, base, n) for(int i = (base); i < (n); i++)
#define  REPS(s, i) for(int i = 0; (s)[i]; i++)
#define  pf(x) ((x)*(x))
#define  mod(n) ((n))
#define  Log(a, b) (log((double)b)/log((double)a))
#define Srand() srand((int)time(0))
#define random(number) (rand()%number)
#define random_range(a, b) (int)(((double)rand()/RAND_MAX)*(b-a) + a)

using namespace std;
typedef long long  LL;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<PII> VII;
typedef vector<PII, int> VIII;
typedef VI:: iterator IT;
typedef map<string, int> Mps;
typedef map<int, int> Mpi;
typedef map<int, PII> Mpii;
typedef map<PII, int> Mpiii;
int n, n1, n2, n3, t1, t2, t3;
const int maxn = 10000 + 100;

int w[maxn];
int main() {
    
    scanf("%d%d%d%d%d%d%d", &n, &n1, &n2, &n3, &t1, &t2, &t3);
    Rep(i, 1, n+1) {
        int c = 0;
        if(i > n1) c = max(c, w[i-n1]+t1);
        if(i > n2) c = max(c, w[i-n2]+t2);
        if(i > n3) c = max(c, w[i-n3]+t3);
        w[i] = c;
        if(i == n)
            cout<<c+t1+t2+t3<<endl;
    }
    return 0;
}
View Code

 

 

E题:给定3个串s1,s2,s3,对每一个l(1<=l<=min(|s1|,|s2|,|s3|))求三元组(i,j,k)的个数,三元组是指满足

s1[i,i+l-1], s2[j,j+l-1],s3[k,k+l-1]是完全相同字符串的条件。

分析:表示知道用后缀数组处理,然后就不知道怎么做了,看了题解还是有点不明白,先留个坑,

F题:给定一个数组a[1...n],为1....n的数的排列, n<=300000,是否存在两个数a,b,a+b/2在这数组中位于这两个数之间。实际就是判断是否三个数构成等差数列。

分析:这题要用线段树+hash来维护,首先容易知道,a,b,c构成等差那么 a,b之差与b,c之差是相等的,那么过程是这样的依次每次取出一个数a[i],然后把a[i]和n-a[i]+1插入到两棵线段树中;如果不存在两个数与a[i]构成等差数列,例如数组中10个元素,对于2,5,8,5不能和2,8构成等差,2,8在数组中位置要么在5前面,要么在5后面,如果2,8在前面,那么将2,8以及10-2+1 = 9,10-8+1=3插入后,两棵线段树相应位置均会被增加相同元素,这样对应的线段树就应该都是序列2...8,那么比较两棵线段树相应区间hash值就可以了。同样对于2,8出现在5后面也可以判断。

一旦遇到hash值不同的情况说明存在等差数列。

代码:

 

bubuko.com,布布扣
  1 //Template updates date: 20140718
  2 #include <bits/stdc++.h>
  3 #define  esp 1e-6
  4 #define  inf 0x3f3f3f3f
  5 #define  pi acos(-1.0)
  6 #define  pb push_back
  7 #define  lson l, m, rt<<1
  8 #define  rson m+1, r, rt<<1|1
  9 #define  lowbit(x) (x&(-x))
 10 #define  mp(a, b) make_pair((a), (b))
 11 #define  bit(k) (1<<(k))
 12 #define  iin  freopen("pow.in", "r", stdin);
 13 #define  oout freopen("pow.out", "w", stdout);
 14 #define  in  freopen("solve_in.txt", "r", stdin);
 15 #define  out freopen("solve_out.txt", "w", stdout);
 16 #define  bug puts("********))))))");
 17 #define  Inout iin oout
 18 #define  inout in out
 19 
 20 #define  SET(a, v) memset(a, (v), sizeof(a))
 21 #define  SORT(a)   sort((a).begin(), (a).end())
 22 #define  REV(a)    reverse((a).begin(), (a).end())
 23 #define  READ(a, n) {REP(i, n) cin>>(a)[i];}
 24 #define  REP(i, n) for(int i = 0; i < (n); i++)
 25 #define  VREP(i, n, base) for(int i = (n); i >= (base); i--)
 26 #define  Rep(i, base, n) for(int i = (base); i < (n); i++)
 27 #define  REPS(s, i) for(int i = 0; (s)[i]; i++)
 28 #define  pf(x) ((x)*(x))
 29 #define  mod(n) ((n))
 30 #define  Log(a, b) (log((double)b)/log((double)a))
 31 #define Srand() srand((int)time(0))
 32 #define random(number) (rand()%number)
 33 #define random_range(a, b) (int)(((double)rand()/RAND_MAX)*(b-a) + a)
 34 
 35 using namespace std;
 36 typedef long long  LL;
 37 typedef unsigned long long ULL;
 38 typedef vector<int> VI;
 39 typedef pair<int,int> PII;
 40 typedef vector<PII> VII;
 41 typedef vector<PII, int> VIII;
 42 typedef VI:: iterator IT;
 43 typedef map<string, int> Mps;
 44 typedef map<int, int> Mpi;
 45 typedef map<int, PII> Mpii;
 46 typedef map<PII, int> Mpiii;
 47 
 48 const int maxn = 300000 + 100;
 49 const int L = 100003;
 50 
 51 LL b[maxn];
 52 
 53 int n;
 54 int a[maxn];
 55 LL ans;
 56 struct SegTree {
 57     LL h[maxn<<2];
 58     void build(int l, int r, int rt) {
 59         if(l == r) {
 60             h[rt] = 0;
 61             return;
 62         }
 63         int m = (l+r)>>1;
 64         build(lson);
 65         build(rson);
 66     }
 67     void PushUp(int l, int r, int rt) {
 68         int m = (l+r)>>1;
 69         int ll = r-m;
 70         h[rt] = h[rt<<1]*b[ll]+h[rt<<1|1];
 71     }
 72     void update(int l, int r, int rt, int pos) {
 73         if(pos == l && pos == r) {
 74             h[rt] = b[1];
 75             return;
 76         }
 77         int m = (l+r)>>1;
 78         if(pos <= m)
 79             update(lson, pos);
 80         else update(rson, pos);
 81         PushUp(l, r, rt);
 82     }
 83     void query(int L, int R, int l, int r, int rt) {
 84         if(L > R)
 85             return;
 86         if(L <= l && R >= r) {
 87             ans = ans*b[r-l+1]+h[rt];
 88             return;
 89         }
 90         int m = (l+r)>>1;
 91         if(L <= m)
 92             query(L, R, lson);
 93         if(R > m)
 94             query(L, R, rson);
 95     }
 96 } t1, t2;
 97 int main() {
 98 
 99     scanf("%d", &n);
100     b[0] = 1;
101     Rep(i, 1, n+1) {
102         scanf("%d", a+i);
103         b[i] = b[i-1]*L;
104     }
105     t1.build(1, n, 1);
106     t2.build(1, n, 1);
107     Rep(i, 1, n+1) {
108         int v = a[i];
109         int l = min(v-1, n-v);
110         ans = 0;
111         t1.query(v-l, v-1, 1, n, 1);
112         LL tmp = ans;
113         ans = 0;
114         t2.query(n-v-l+1, n-v, 1, n, 1);
115         if(tmp != ans) {
116             puts("YES");
117             return 0;
118         }
119         t1.update(1, n, 1, v);
120         t2.update(1, n, 1, n-v+1);
121     }
122     puts("NO");
123     return 0;
124 }
View Code

 

MemSQL Start[c]UP 2.0 - Round 1,布布扣,bubuko.com

MemSQL Start[c]UP 2.0 - Round 1

标签:style   blog   http   color   os   io   for   2014   

原文地址:http://www.cnblogs.com/rootial/p/3876596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!