zoukankan      html  css  js  c++  java
  • CodeChef--SEPT14小结

    这套题目只做了几个相对简单的。其他的做起来比较吃力。

    A 找下规律

     1 /*************************************************************************
     2     > File Name: A.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月06日 星期六 16时32分54秒
     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 const int MOD = 1e9 + 7;
    20 typedef long long LL;
    21 int t, n;
    22 char s[100005];
    23 
    24 int main(void) {
    25       ios::sync_with_stdio(false);
    26     cin >> t;
    27     while (t--) {
    28           cin >> s;
    29           n = strlen(s);
    30         LL res = 1;
    31         for (int i = 0; i < n; i++) {
    32               if ((i + 1) % 2 == 1) res = (res * 2) % MOD;
    33             else res = (res * 2 - 1) % MOD;
    34             if (s[i] == 'r') res = (res + 2) % MOD;
    35         }
    36         cout << res << endl;
    37     }
    38     return 0;
    39 }

    B 模拟

     1 n, m = map(int, raw_input().split());
     2 a = map(int, raw_input().split());
     3 now = 1;
     4 while m:
     5     m -= 1;
     6     Q = raw_input().split();
     7     if Q[0] == 'R':
     8           print a[(now + int(Q[1]) - 1) % n - 1]
     9     elif Q[0] == 'C':
    10         now = (now + int(Q[1])) % n;
    11     else :
    12         now = (now - int(Q[1]) + n) % n;

    C

    这题被我写烦了。。。是想烦了。

    我是枚举中间一堆的个数。然后就是组合数学了。。。。。。。

     1 /*************************************************************************
     2     > File Name: C.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月06日 星期六 11时08分09秒
     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 const int MOD = 1e9 + 7;
    20 typedef long long LL;
    21 LL fact[1000005], n;
    22 
    23 LL pow_mod(LL a, LL b) {
    24     LL res = 1;
    25     while (b) {
    26         if (b & 1) res = (res * a) % MOD;
    27         a = (a * a) % MOD;
    28         b >>= 1;
    29     }
    30     return res;
    31 }
    32 
    33 void init() {
    34     fact[5] = 1; fact[6] = 6;
    35     int now = 2;
    36     for (int i = 7; i <= 1000000; i++, now++) fact[i] = (fact[i - 1] * pow_mod(now, MOD - 2) % MOD * i) % MOD;
    37 }
    38 
    39 int main(void) {
    40     ios::sync_with_stdio(false);
    41     init();
    42     while (cin >> n) {
    43         if (n < 13) {
    44             cout << "0" << endl;
    45             continue;
    46         }
    47         LL res = 0;
    48         if (n % 2 == 0){
    49             for (int i = 2; i <= n - 12; i += 2) {
    50                res = (res + fact[(n - i)/2 - 1]) % MOD;
    51             }
    52         } else {
    53             for (int i = 1; i <= n - 12; i += 2) {
    54                 res = (res + fact[(n - i)/2 - 1]) % MOD;
    55             }
    56         }
    57         cout << res << endl;
    58     }
    59 
    60     return 0;
    61 }

    D
    E

    题解上这题也是个Easy..可是当时愣是没有看出来,知道突破点是k比较小。

    正解是枚举数列中第一个和最后一个没有改变的位置, 这个不超过k^2,然后。。。

    这里getchar_unlocked是getchar()的线程不安全版本。。好像已经被windows弃用。

    还有,n*10可以表达为(n<<3) + (n<<1)

     1 /*************************************************************************
     2     > File Name: E.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月15日 星期一 21时04分57秒
     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 const int MAX_N = 100050;
    20 typedef long long LL;
    21 #define rep(i, a, b) for (int i = (a); i <= (b); i++)
    22 int n, k, a[MAX_N];
    23 
    24 void read(int &res) {
    25     char c = ' ';
    26     res = 0;
    27     int sign = 1;
    28     while (c < '0' || c > '9') {if (c == '-') sign = -1; c = getchar_unlocked();}
    29     while (c >= '0' && c <= '9') res = (res<<3) + (res<<1) + c - '0', c= getchar_unlocked();
    30     res *= sign;
    31 }
    32 
    33 int main(void) {
    34     read(n), read(k);
    35     rep (i, 1, n) read(a[i]);
    36 
    37     int a1 = 0x3f3f3f3f, d = 0x3f3f3f3f;
    38     rep (i, 1, k+1) rep (j, n-k+i-1, n) {
    39         int cnt = 0, tmp_d = (a[j] - a[i]) / (j - i), tmp_a1 = a[i] - (i - 1) * tmp_d;
    40         rep (t, 1, n) if (a[t] != tmp_a1 + (t - 1) * tmp_d) cnt++;
    41         if (cnt <= k) {
    42             if (a1 > tmp_a1) a1 = tmp_a1, d = tmp_d;
    43             else if (a1 == tmp_a1 && d > tmp_d) d = tmp_d;
    44         }
    45     }
    46 
    47     rep (i, 1, n) printf("%d%c", a1 + (i - 1) * d, i == n ? '
    ' : ' ');
    48 
    49     return 0;
    50 }

    F

     1 /*************************************************************************
     2     > File Name: F.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年09月08日 星期一 13时07分43秒
     6     > Propose: 
     7  ************************************************************************/
     8 #include <cmath>
     9 #include <string>
    10 #include <cstdio>
    11 #include <vector>
    12 #include <fstream>
    13 #include <cstring>
    14 #include <iostream>
    15 #include <algorithm>
    16 using namespace std;
    17 /*Let's fight!!!*/
    18 
    19 typedef long long LL;
    20 LL N, M;
    21 
    22 /*
    23  * (a / b) % c 等价于 (a % (b * c)) / b;
    24  *  适用于bc不大而且b在c的剩余系中逆元不存在的情况
    25  */
    26 LL sum(LL n) {
    27       LL m = M * 30;
    28       n %= m;
    29       return (n * (6 * n % m * n % m * n % m * n % m + 15 * n % m * n % m * n % m + 10 * n % m * n % m - 1 + m) % m) % m / 30;
    30 }
    31 
    32 int main(void) {
    33     ios::sync_with_stdio(false);
    34     int T;
    35     cin >> T;
    36     while (T--) {
    37         cin >> N >> M;
    38         if (N == 1) {
    39             cout << N % M << endl;
    40             continue;
    41         } else if (N == 2) {
    42             cout << (N + 16) % M << endl;
    43             continue;
    44         } else if (N == 3) {
    45             cout << (N + 16 + 81) % M << endl;
    46             continue;
    47         }
    48 
    49         LL res = 0, i = 1, fst = 0, last = N, j;
    50         while (true) {
    51             LL r = N / (i + 1), l = i;
    52             j = N / i;
    53             res = (res + (sum(last) - sum(r) + M) % M * (i % M) % M) % M;
    54             if (r != fst || last != l)
    55                 res = (res + (sum(l) - sum(fst) + M) % M * (j % M) % M) % M;
    56             if (l >= r) break;
    57             i++;
    58             last = r;
    59             fst = l;
    60         }
    61 
    62         cout << res << endl;
    63     }
    64 
    65     return 0;
    66 }

    G

    需要维护每个区间内比右短点小的个数和比左端点小的个数,BIT系列。。是个不错的题。

      1 /*************************************************************************
      2     > File Name: E.cpp
      3     > Author: Stomach_ache
      4     > Mail: sudaweitong@gmail.com
      5     > Created Time: 2014年09月08日 星期一 17时18分23秒
      6     > Propose: 
      7  ************************************************************************/
      8 
      9 #include <cmath>
     10 #include <string>
     11 #include <cstdio>
     12 #include <fstream>
     13 #include <vector>
     14 #include <cstring>
     15 #include <iostream>
     16 #include <algorithm>
     17 using namespace std;
     18 /*Let's fight!!!*/
     19 
     20 #define rep(i, n) for (int i = (1); i <= (n); i++)
     21 #define per(i, n) for (int i = (n); i >= (1); i--)
     22 const int MAX_N = 200050;
     23 typedef long long LL;
     24 int N, M, w, A[MAX_N], c[MAX_N];
     25 struct node {
     26     int id, l, r, ltr, ltl, eql, eqr;
     27     node () {}
     28     node (int id, int l, int r):id(id), l(l), r(r),ltr(0), ltl(0) {}
     29     friend bool operator < (const node &x, const node &y) {
     30           return x.id < y.id;
     31     }
     32 }Q[MAX_N];
     33 
     34 int lowbit(int x) {
     35       return x & -x;
     36 }
     37 
     38 void add(int x) {
     39       while (x <= w) {
     40         c[x]++;
     41         x += lowbit(x);
     42     }
     43 }
     44 
     45 int sum(int x) {
     46       int res = 0;
     47       while (x > 0) {
     48         res += c[x];
     49         x -= lowbit(x);
     50     }
     51     return res;
     52 }
     53 
     54 int main(void) {
     55     ios::sync_with_stdio(false);
     56     while (cin >> N >> M) {
     57         vector<int> var;
     58         rep (i, N) {
     59             cin >> A[i];
     60             var.push_back(A[i]);
     61         }
     62         sort(var.begin(), var.end());
     63         var.resize(unique(var.begin(), var.end()) - var.begin());
     64         w = var.size();
     65 
     66         memset(c, 0, sizeof(c));
     67         LL res = 0;
     68         rep (i, N) {
     69             int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + 1;
     70             res += i - 1 - sum(pos - 1) - (sum(pos) - sum(pos - 1));    
     71             add(pos);
     72         }
     73         
     74 //        cerr << res << endl;
     75 
     76         vector<int> lft[MAX_N], rgt[MAX_N];
     77         int x, y;    
     78         rep (i, M) {
     79             cin >> x >> y;
     80             if (x > y) swap(x, y);
     81             Q[i] = node(i, x, y);
     82             lft[x].push_back(i);
     83             rgt[y].push_back(i);
     84         }
     85 
     86         memset(c, 0, sizeof(c));
     87         rep (i, N) {
     88               int szl = lft[i].size(), szr = rgt[i].size();    
     89             for (int j = 0; j < szl; j++) {
     90                 int id = lft[i][j];
     91                 int pos = lower_bound(var.begin(), var.end(), A[Q[id].r]) - var.begin() + 1;
     92                 Q[id].eqr = sum(pos) - sum(pos - 1);
     93                 Q[id].ltr = sum(pos - 1);
     94             }
     95 
     96             int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + 1;
     97             for (int j = 0; j < szr; j++) {
     98                 int id = rgt[i][j];
     99                 Q[id].ltr = sum(pos - 1) - Q[id].ltr;
    100                 Q[id].eqr = sum(pos) - sum(pos - 1) - Q[id].eqr;
    101             }
    102             add(pos);
    103         }
    104 
    105         memset(c, 0, sizeof(c));
    106         per (i, N) {
    107             int szl = lft[i].size(), szr = rgt[i].size();    
    108             for (int j = 0; j < szr; j++) {
    109                 int id = rgt[i][j];
    110                 int pos = lower_bound(var.begin(), var.end(), A[Q[id].l]) - var.begin() + 1;
    111                 Q[id].ltl = sum(pos - 1);
    112                 Q[id].eql = sum(pos) - sum(pos - 1);
    113             }
    114             int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + 1;
    115             for (int j = 0; j < szl; j++) {
    116                 int id = lft[i][j];
    117                 Q[id].ltl = sum(pos - 1) - Q[id].ltl;
    118                 Q[id].eql = sum(pos) - sum(pos - 1) - Q[id].eql;
    119             }
    120             add(pos);
    121         }
    122     //    cerr << "say hello
    ";
    123 
    124         sort (Q + 1, Q + M + 1);
    125         rep (i, M) {
    126             int l = Q[i].l, r = Q[i].r;
    127             LL tmp = Q[i].ltr - Q[i].ltl - (r - l + 1 - Q[i].ltr - Q[i].eqr) + (r - l + 1 - Q[i].ltl - Q[i].eql); 
    128             if (A[r] > A[l]) tmp--;
    129             else if (A[r] < A[l]) tmp++;
    130             cout << res + tmp << endl;
    131         }
    132     }
    133 
    134     return 0;
    135 }

    H

    I

    J

  • 相关阅读:
    设计模式之工厂模式-抽象工厂(02)
    1036 跟奥巴马一起编程 (15 分)
    1034 有理数四则运算 (20 分)
    1033 旧键盘打字 (20 分)
    1031 查验身份证 (15 分)
    大学排名定向爬虫
    1030 完美数列 (25 分)二分
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分)四舍五入
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3977206.html
Copyright © 2011-2022 走看看