• LTIME16小结(CodeChef)


    题目链接

    最后一题是Splay...还没有学会。。蒟蒻!!!

    A

     1 /*************************************************************************
     2     > File Name: A.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月28日 星期日 13时33分32秒
     6     > Propose: 
     7  ************************************************************************/
     8 
     9 #include <cmath>
    10 #include <string>
    11 #include <cstdio>
    12 #include <fstream>
    13 #include <cstring>
    14 #include <iostream>
    15 #include <algorithm>
    16 using namespace std;
    17 /*Let's fight!!!*/
    18 
    19 int n, A[100005];
    20 
    21 int main(void) {
    22     ios::sync_with_stdio(false);
    23     int t;
    24     cin >> t;
    25     while (t--) {
    26         cin >> n;
    27         for (int i = 0; i < n; i++) cin >> A[i];
    28         sort(A, A + n);
    29         long long res = 0;
    30         for (int i = n - 1; i >= 0; i -= 2) res += A[i];
    31         cout << res << endl;
    32     }
    33     return 0;
    34 }

    B

    处理出每个素数在所有数中出现的次数最多的个数。

     1 /*************************************************************************
     2     > File Name: B.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月28日 星期日 13时36分46秒
     6     > Propose: 
     7  ************************************************************************/
     8 #include <map>
     9 #include <cmath>
    10 #include <string>
    11 #include <cstdio>
    12 #include <vector>
    13 #include <fstream>
    14 #include <cstring>
    15 #include <iostream>
    16 #include <algorithm>
    17 using namespace std;
    18 /*Let's fight!!!*/
    19 
    20 typedef pair<int, int> pii;
    21 const int MAX_N = 100005;
    22 const int MAX_M = 1000005;
    23 bool vis[MAX_M];
    24 int prime[MAX_N], A[MAX_N], cnt;
    25 
    26 void init() {
    27       cnt = 0;
    28       memset(vis, false, sizeof(vis));
    29     for (int i = 2; i < MAX_M; i++) {
    30           if (!vis[i]) {
    31               prime[++cnt] = i;
    32             for (int j = 2*i; j < MAX_M; j += i) vis[j] = true;
    33         }
    34     }
    35 }
    36 
    37 #define rep(i, n) for (int i = (1); i <= (n); i++)
    38 
    39 vector<pii> factor(MAX_M);
    40 vector<pii>::iterator it;
    41 
    42 void work(int x, int y) {
    43     if (factor[x].second == 0) { 
    44         factor[x].second = y; } 
    45     else {
    46         factor[x].second = max(y, factor[x].second);
    47     }
    48 }
    49 
    50 int main(void) {
    51     init();
    52     ios::sync_with_stdio(false);
    53     int t, n;
    54     cin >> t;
    55     while (t--) {
    56         rep (i, MAX_M) factor[i-1].second = 0;
    57         cin >> n;
    58         rep (i, n) cin >> A[i];
    59         rep (i, n) {
    60               int x = A[i];
    61             if (x == 1) continue;
    62               rep (j, cnt) {
    63                   if (prime[j]*prime[j] > A[i]) break;
    64                   if (x % prime[j] == 0) {
    65                       int tmp = 0;
    66                     while (x % prime[j] == 0) tmp++, x /= prime[j];
    67                     work(prime[j], tmp);
    68                 }
    69             }
    70             if (x > 1) work(x, 1);
    71         }
    72         int res = 0;
    73         for (it = factor.begin(); it != factor.end(); ++it) {
    74             res += it->second;
    75         }
    76         cout << res << endl;
    77     } 
    78 
    79     return 0;
    80 }

    C

    线段树。

    对于第一种修改,就是区间减1

    对于第二种修改,就是单点更新

    最后,查询每个点2,3,5因子的个数。

      1 /*************************************************************************
      2     > File Name: C.cpp
      3     > Author: Stomach_ache
      4     > Mail: sudaweitong@gmail.com
      5     > Created Time: 2014年09月28日 星期日 14时06分24秒
      6     > Propose: 
      7  ************************************************************************/
      8 #include <cmath>
      9 #include <string>
     10 #include <cstdio>
     11 #include <fstream>
     12 #include <cstring>
     13 #include <iostream>
     14 #include <algorithm>
     15 using namespace std;
     16 /*Let's fight!!!*/
     17 
     18 const int MAX_N = 100050;
     19 int factor[3][MAX_N], A[MAX_N], id[MAX_N];
     20 #define rep(i, n) for (int i = (1); i <= (n); i++)
     21 #define lson(x) ((x<<1))
     22 #define rson(x) ((x<<1) | 1)
     23 
     24 struct node {
     25     int l, r, Min[3];
     26 }Tr[MAX_N<<2];
     27 
     28 void build(int rt, int l, int r) {
     29     Tr[rt].l = l, Tr[rt].r = r;
     30     rep(i, 3) Tr[rt].Min[i-1] = 0;
     31     if (l == r) {
     32         rep (i, 3) Tr[rt].Min[i-1] = factor[i-1][l];
     33         id[l] = rt;
     34         return ;
     35     }
     36     int mid = (l + r) / 2;
     37     build(lson(rt), l, mid);
     38     build(rson(rt), mid + 1, r);
     39 }
     40 
     41 void pushdown(int rt, int p) {
     42     if (Tr[rt].Min[p] != 0) {
     43         Tr[lson(rt)].Min[p] += Tr[rt].Min[p];
     44         Tr[rson(rt)].Min[p] += Tr[rt].Min[p];
     45         Tr[rt].Min[p] = 0;
     46     }
     47 }
     48 
     49 void update1(int rt, int l, int r, int p) {
     50     if (Tr[rt].l >= l && Tr[rt].r <= r) {
     51         Tr[rt].Min[p]--;
     52         return ;
     53     }
     54     pushdown(rt, p);
     55     int mid = Tr[lson(rt)].r;
     56     if (l <= mid) update1(lson(rt), l, r, p);
     57     if (r > mid) update1(rson(rt), l, r, p);
     58 }
     59 
     60 void update2(int rt, int l, int p, int d) {
     61     if (Tr[rt].l == Tr[rt].r && Tr[rt].l == l) {
     62         Tr[rt].Min[p] = d;    
     63         return ;
     64     }
     65     pushdown(rt, p);
     66     int mid = Tr[lson(rt)].r;
     67     if (l <= mid) update2(lson(rt), l, p, d);
     68     else update2(rson(rt), l, p, d);
     69 }
     70 
     71 int query(int rt, int l, int p) {
     72     if (Tr[rt].l == Tr[rt].r && Tr[rt].l == l) {
     73         return max(Tr[rt].Min[p], 0);
     74     }
     75     pushdown(rt, p);
     76     int mid = Tr[lson(rt)].r;
     77     if (l <= mid) query(lson(rt), l, p);
     78     else query(rson(rt), l, p);
     79 }
     80 
     81 void read(int &res) {
     82     res = 0;
     83     char c = ' ';
     84     while (c < '0' || c > '9') c = getchar();
     85     while (c >= '0' && c <= '9') res = res*10+c-'0', c = getchar();
     86 }
     87 
     88 int POW(int a, int b) {
     89     int res = 1;
     90     while (b) {
     91         if (b & 1) res *= a;
     92         a *= a;
     93         b >>= 1;
     94     }
     95     return res;
     96 }
     97 
     98 int main(void) {
     99     int N, M, a[4] = {0, 2, 3, 5};
    100     read(N);
    101     rep (i, N) {
    102         read(A[i]);
    103         int x = A[i];
    104         factor[0][i] = factor[1][i] = factor[2][i] = 0;
    105         rep (j, 3) {
    106             int tmp = 0, p = a[j];
    107             while (x % p == 0) tmp++, x /= p;
    108             factor[j-1][i] = tmp;
    109         }
    110         A[i] = x;
    111     }
    112     build(1, 1, N);
    113     read(M);
    114     int t, l, r, p, d, tmp;
    115     while (M--) {
    116         read(t);
    117         if (t == 1) {
    118             read(l), read(r), read(p);
    119             update1(1, l, r, (p+1)/2-1);
    120         } else {
    121             read(l), read(d);
    122             rep (i, 3) {
    123                 tmp = 0, p = a[i];
    124                 while (d % p == 0) tmp++, d /= p;
    125                 update2(1, l, i-1, tmp);
    126             }
    127             A[l] = d;
    128         }
    129     }
    130     rep (i, N) {
    131          rep (j, 3) {
    132            tmp = query(1, i, j-1);
    133            A[i] *= POW(a[j], tmp);
    134        }
    135        printf("%d%c", A[i], i == N ? '
    ' : ' ');
    136     }
    137 
    138     return 0;
    139 }

    D

  • 相关阅读:
    省市区选择器
    查找算法 分享1:顺序查找
    查找算法 分享2:折半(二分)查找
    编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。
    查找算法 分享3:分块查找
    NSMutableDicitionary 的setValue和setObject的区别
    查找算法 分享4:哈希查找
    玩转博客园的5个小技巧
    WCF读书笔记安全:基础知识(身份验证、授权、传输安全)
    北京的房价
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3998897.html
Copyright © 2020-2023  润新知