zoukankan      html  css  js  c++  java
  • 2019牛客暑期多校训练营 第九场

    为什么没有第八场呢?因为我上次咕了(之后会补的

    题目链接:https://ac.nowcoder.com/acm/contest/889#question


    B:

    队友说是乱搞题。

     1 #include<iostream>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 
     9 typedef long long ll;
    10 
    11 const ll MOD = 1000000007;
    12 long long mod_exp(long long a, long long b) { //二分快速幂
    13     long long res = 1;
    14     while (b > 0) {
    15         if (b & 1) res = (res * a) % MOD;
    16         a = (a * a) % MOD;
    17         b >>= 1;
    18     }
    19     return res;
    20 }
    21 
    22 long long solve(long long n, long long p) {
    23     int Q = p - 1, S = 0;
    24     while (Q % 2 == 0) {
    25         Q >>= 1;
    26         S++;
    27     }
    28     if (S == 1) {
    29         return mod_exp(n, (p + 1) / 4);
    30     }
    31     int z;
    32     while (1) {
    33         z = 1 + rand() % (p - 1);
    34         if (mod_exp(z, (p - 1) / 2) != 1) break;
    35     }
    36     long long c = mod_exp(z, Q);
    37     long long R = mod_exp(n, (Q + 1) / 2);
    38     long long t = mod_exp(n, Q);
    39     long long M = S, b, i;
    40     while (1) {
    41         if (t % p == 1) break;
    42         for (i = 1; i < M; i++) {
    43             if (mod_exp(t, 1 << i) == 1) break;
    44         }
    45         b = mod_exp(c, 1 << (M - i - 1));
    46         R = (R * b) % p;
    47         t = (t * b * b) % p;
    48         c = (b * b) % p;
    49         M = i;
    50     }
    51     return (R % p + p) % p;
    52 }
    53 
    54 int main() {
    55     int T;
    56     cin >> T;
    57     while (T--) {
    58         ll b, c;
    59         cin >> b >> c;
    60         ll dex = b * b - 4 * c;
    61         dex = (dex + MOD) % MOD;
    62         if (dex == 0) {
    63             ll x1 = b * mod_exp(2, MOD - 2) % MOD;
    64             cout << x1 << " " << x1 << endl;
    65             continue;
    66         }
    67         if (mod_exp(dex, (MOD - 1) / 2) != 1) {
    68             cout << "-1 -1" << endl;
    69             continue;
    70         }
    71         ll rx = solve(dex, MOD);
    72         ll x1 = (rx + b) * mod_exp(2, MOD - 2) % MOD;
    73         ll x2 = (b - x1 + MOD) % MOD;
    74         cout << min(x1, x2) << " " << max(x1, x2) << endl;
    75     }
    76 }
    Code via. rsqppp

    D:

    乱搞的签到,给出的wiki毫无作用。二分按位枚举即可,之所以可以这么做是因为sum很小。

     1 /* Nowcoder Contest 889
     2  * Problem D
     3  * Au: SJoshua
     4  */
     5 #include <unordered_map>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <string>
     9 #include <iostream>
    10 #include <algorithm>
    11  
    12 using namespace std;
    13  
    14 int main(void) {
    15     int n;
    16     unsigned long long int s;
    17     cin >> n >> s;
    18     vector <unsigned long long int> nums(n);
    19     unordered_map <unsigned long long int, int> mp;
    20     for (int i = 0; i < n; i++) {
    21         cin >> nums[i];
    22     }
    23     int half = n / 2;
    24     for (int i = 0; i < (1 << half); i++) {
    25         unsigned long long int cur = 0;
    26         for (int j = 0; j < half; j++) {
    27             cur += ((i >> j) & 1) * nums[j];
    28         }
    29         mp[cur] = i;
    30     }
    31     for (int i = 0; i < (1 << (n - half)); i++) {
    32         unsigned long long int cur = 0;
    33         for (int j = 0; j < n - half; j++) {
    34             cur += ((i >> j) & 1) * nums[half + j];
    35         }
    36         if (cur <= s) {
    37             if (mp.count(s - cur)) {
    38                 int a = mp[s - cur];
    39                 for (int j = 0; j < half; j++) {
    40                     cout << ((a >> j) & 1);
    41                 }
    42                 for (int j = half; j < n; j++) {
    43                     cout << ((i >> (j - half)) & 1);
    44                 }
    45                 cout << endl;
    46                 return 0;
    47             }
    48         }
    49     }
    50     return 0;
    51 }
    View Code

    E:

    H:

    主席树(几乎)裸题,但是当时被二分check卡住了没想到怎么写,后来发现并不用二分。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 const int maxn = 2e5 + 10;
    21 int root[maxn], cnt = 0;
    22 ll preLen = 0;
    23 
    24 struct Node {
    25     ll sum;
    26     int num, l, r; // 主席树维护区间元素个数,区间和
    27 } segt[maxn * 40];
    28 
    29 void insert(int pos, int &cr, int lr, int curl, int curr) {
    30     cr = ++cnt; segt[cr].num = segt[lr].num + 1; segt[cr].sum = segt[lr].sum + pos;
    31     if (curl == curr) return;
    32     int mid = curl + curr >> 1;
    33     segt[cr].l = segt[lr].l, segt[cr].r = segt[lr].r;
    34     if (pos <= mid) insert(pos, segt[cr].l, segt[lr].l, curl, mid);
    35     else insert(pos, segt[cr].r, segt[lr].r, mid + 1, curr);
    36 }
    37 
    38 double query(int cr, int lr, int curl, int curr, double k, int remainNum) {
    39     if (curl == curr) return (k - preLen) / remainNum;
    40     int mid = curl + curr >> 1, currNum = segt[segt[lr].l].num - segt[segt[cr].l].num;
    41     ll sum = preLen + segt[segt[lr].l].sum - segt[segt[cr].l].sum + (ll)mid * (remainNum - currNum);
    42     if (sum - k < eps) {
    43         preLen += segt[segt[lr].l].sum - segt[segt[cr].l].sum;
    44         return query(segt[cr].r, segt[lr].r, mid + 1, curr, k, remainNum - currNum);
    45     } else
    46         return query(segt[cr].l, segt[lr].l, curl, mid, k, remainNum);
    47 }
    48 
    49 int main() {
    50     int n, q; scanf("%d%d", &n, &q);
    51     for (int i = 1; i <= n; i++) {
    52         int x; scanf("%d", &x);
    53         insert(x, root[i], root[i - 1], 1, 1e5);
    54     }
    55     while (q--) {
    56         int l, r, x, y; scanf("%d%d%d%d", &l, &r, &x, &y);
    57         ll totalLen = segt[root[r]].sum - segt[root[l - 1]].sum;
    58         double perCutLen = (double)totalLen / y;
    59         double remainLen = totalLen - perCutLen * x;
    60         if (fabs(remainLen < eps)) remainLen = 0;
    61         preLen = 0;
    62         printf("%.10f
    ", query(root[l - 1], root[r], 1, 1e5, remainLen, r - l + 1));
    63     }
    64     return 0;
    65 }
    View Code

    J:

    一道解法非常巧妙的题。实际上是要求一个分段函数的最小值,因为解出现的位置只有3种情况。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,a) sort(a+1,a+1+a)
     9 #define rep1(i,a,a) for(int i=a;i<=a;++i)
    10 #define rep0(i,a,a) for(int i=a;i<a;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 const int maxn = 9e5 + 10;
    21 ll a[maxn];
    22 
    23 int main() {
    24     ll n; scanf("%lld", &n);
    25     for (int i = 0; i < n; i++) {
    26         ll l, r; scanf("%lld%lld", &l, &r);
    27         a[i * 3] = l * 4, a[i * 3 + 1] = r * 4, a[i * 3 + 2] = (l + r) * 2 + 1;
    28     }
    29     sort(a, a + 3 * n);
    30     ll ans = 0, cnt = 0, nu = 0, last = 0;
    31     for (int i = 0; i < 3 * n; i++) {
    32         nu += cnt * (a[i] / 2 - last);
    33         ans = max(ans, nu);
    34         last = a[i] / 2;
    35         if (a[i] & 1) cnt -= 2; else cnt++;
    36     }
    37     printf("%lld
    ", ans);
    38     return 0;
    39 }
    View Code 
  • 相关阅读:
    Linux-003-Resource temporarily unavailable
    JMeter学习-041-响应数据中文乱码解决方法
    Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
    Java学习-049-正则工具类
    JMeter学习-040-JMeter图形化 HTML 报表概要说明
    JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码
    JMeter学习-038-JMeter Linux 环境配置
    Linux-002-执行命令时,提示: -bash: {命令}: command not found
    JMeter学习-037-JMeter调试工具之四-BeanShell+jmeter.log
    JMeter学习-036-JMeter调试工具之三---Debug Sampler
  • 原文地址:https://www.cnblogs.com/JHSeng/p/11365419.html
Copyright © 2011-2022 走看看