zoukankan      html  css  js  c++  java
  • 牛客小白月赛5 ADFGHIJ

    A 无关(relationship)

    链接:https://www.nowcoder.com/acm/contest/135/A
    来源:牛客网

    题目描述

      若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关。

      给出一个含有k个元素的集合A={a1,a2,a3,...,ak},求区间[L,R]内与A无关的正整数的个数。
      保证A内的元素都是素数

    输入描述:

    输入数据共两行:

    第一行三个正整数L,R,k,意义如“题目描述”。

    第二行k个正整数,描述集合A,保证k个正整数两两不相同。

    输出描述:

    输出数据共一行:

    第一行一个正整数表示区间[L,R]内与集合A无关的正整数的个数
    示例1

    输入

    复制
    1 10 4
    2 3 5 7

    输出

    复制
    1
    示例2

    输入

    复制
    2 10 4
    2 3 5 7

    输出

    复制
    0

    说明

    对于30%的数据:1<=L<=R<=10^6

    对于100%的数据:1<=L<=R<=10^18,1<=k<=20,2<=ai<=100

    排斥定理,先放下大佬的代码。
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll a[33], l, r, k;
     5 ll solve(ll lv, ll v) {
     6     if(lv == k) return v;
     7     return solve(lv+1,v)-solve(lv+1,v/a[lv]);
     8 }
     9 int main() {
    10     cin >> l >> r >> k;
    11     for(int i = 0; i < k; i ++) cin >> a[i];
    12     cout << solve(0, r) - solve(0,l-1) << endl;
    13     return 0;
    14 }

    D 阶乘(factorial)

    链接:https://www.nowcoder.com/acm/contest/135/D
    来源:牛客网

    题目描述

    输入描述:

    输入数据共一行,一个正整数n,意义如“问题描述”。

    输出描述:

    输出一行描述答案:

    一个正整数k,表示S的末尾有k个0
    示例1

    输入

    复制
    10

    输出

    复制
    7

    说明

      鸣谢真·dalao Tyxao

    求5的因子。没啥好说的,考察代码基本功吧。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 
     5 ll cal(ll n) {
     6     if(n<5) return 0;
     7     else {
     8         n /= 5;
     9         return n+cal(n);
    10     }
    11 }
    12 int main() {
    13     ll n, ans = 0, y;
    14     cin >> n;
    15     ll cnt1 = 1, cnt2 = 5;
    16     y = n;
    17     while(n > 4) {
    18         for(ll i = n-n%5; i <= n; i ++) ans += cnt1*cal(i);
    19         n = n-n%5-1;
    20         ll tmp = n/5;
    21         ans += cnt2*(tmp+1)*tmp/2;
    22         n /= 5;
    23         cnt1*=5;cnt2*=5;
    24     }
    25     cout << ans << endl;
    26     return 0;
    27 }

    F 圆(circle)

    链接:https://www.nowcoder.com/acm/contest/135/F
    来源:牛客网

    题目描述

        签到题来了,送你们一个Python秒的题。

        Apojacsleam来到了OI大陆,经过了连年征战,成为了一方国王。

        Apojacsleam把他的王国命名为“Apo国”,Apo国的领土是一个标准的圆形

        Apojacsleam现在想封赏他的大臣,他在国境上建立了n个城市,要求他的大臣对这n个城市两两之间修建道路(道路是笔直的),把整个王国分成尽量多的区域,使得每一个大臣都有封土并且不会太大(以免谋反)。

        于是Apojacsleam找你求助,他告诉你他打算建多少个城市,而你的任务是告诉他最多可以分成多少个部分。

        说的太慢可是要被处死的,所以你必须要在1s之内回答。

    输入描述:

    输入数据有多组,每组一行,一个正整数n,意义如“题目描述”

    输出描述:

    对于每一组数据输出一行描述答案:

    输出一个正整数k,表示最多分成k份。
    示例1

    输入

    复制
    2
    3

    输出

    复制
    2
    4

    说明

    样例解释(样例1和样例2一起解释了):
    示例2

    输入

    复制
    4
    5
    6

    输出

    复制
    8
    16
    31

    说明

     
    找规律,找不到就在http://oeis.org/这个网站查了下,还真查到了。规律为a(n) = (n^4 - 6*n^3 + 23*n^2 - 18*n + 24)/24.
     
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 
     5 int main() {
     6     ll n;
     7     while(cin >> n) {
     8         cout << (n*n*n*n-6*n*n*n+23*n*n-18*n+24)/24<< endl;
     9     }
    10     return 0;
    11     
    12 }

    G 异或(xor)

    链接:https://www.nowcoder.com/acm/contest/135/g
    来源:牛客网

    题目描述

        从前,Apojacsleam家的水族箱里,养了一群热带鱼。

        在这几条热带鱼里,Apojacsleam特别喜欢一条叫做TbGx(请勿人肉)的热带鱼,所以每次都让她第一个吃食物。对于每一条鱼,Apojacsleam都有一个顺序,鱼会按照这个顺序排序,越靠前的地位越高。

       吃饱喝足是要睡觉的,这是人的刚需,也是鱼的刚需。

        如果TbGx吃了Apojacsleam的食物,她就会睡觉(睡觉时长远小于一天)。这时第二条鱼还是饥肠辘辘的,第二条鱼就可以吃掉TbGx,那么第二条鱼又会睡觉......

        注意:Apojacsleam养的鱼比Apojacsleam的智商高到不知道哪里去了,他们都是绝顶聪明的;而他们又是极其守规矩的,即他们不会多鱼分食一条鱼或者食物,只是按照顺序吃;当某一条鱼前面的鱼睡着以后,他可以选择不吃这条鱼,那么别的鱼(还活着的)也不会吃这条,即按照顺序的吃。

        一开始,水族箱里只有TbGx一条鱼(未成年),但是,一条鱼成长两天就会成年,成年后就可以繁殖(无性繁殖?别问我我不知道),一天能繁殖一个后代。小鱼也会吃鱼的偶!

       请问在前n天中,TbGx最多多少天可以吃饭?

        Apojacsleam不希望TbGx饿着,所以你必须在1s内回答。

    输入描述:

    输入数据有多组,每组一个正整数n,意义如“题目描述”

    输出描述:

    对于每组输入数据,一行输出:

    即前n天中,最多有多少天TbGx可以吃饭。
    示例1

    输入

    复制
    6

    输出

    复制
    4

    说明

    第1天,1条鱼,能吃;
    第2天,1条鱼,能吃;
    第3天,2条鱼,不能吃;
    第4天,3条鱼,能吃;
    第5天,5条鱼,能吃;
    第6天,8条鱼,不能吃;。
     
    2n/3向上取整,还真想不到。。。
     1 #include <bits/stdc++.h>
     2 #define ll unsigned long long
     3 using namespace std;
     4 
     5 int main() {
     6     ll n;
     7     while(scanf("%lld", &n) != EOF){
     8         cout << n/3*2+n%3 << endl;
     9     }
    10     return 0;
    11 }

    H 最大公约数(lcm)

    送分题

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define ull unsigned long long
     4 using namespace std;
     5 int main() {
     6     ull l, r;
     7     cin >> l >> r;
     8     ull a = __gcd(l,r);
     9     cout << l/a*r<<endl;
    10     return 0;
    11 }

    I 区间 (interval)

    链接:https://www.nowcoder.com/acm/contest/135/i
    来源:牛客网

    题目描述

        Apojacsleam喜欢数组。

        他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:

            操作一:将a[L]-a[R]内的元素都加上P

            操作二:将a[L]-a[R]内的元素都减去P

        最后询问a[l]-a[r]内的元素之和?
        请认真看题干及输入描述。

    输入描述:

    输入共M+3行:

    第一行两个数,n,M,意义如“题目描述”

    第二行n个数,描述数组。

    第3-M+2行,共M行,每行四个数,q,L,R,P,若q为1则表示执行操作2,否则为执行操作1

    第4行,两个正整数l,r

    输出描述:

    一个正整数,为a[l]-a[r]内的元素之和
    示例1

    输入

    复制
    10 5
    1 2 3 4 5 6 7 8 9 10
    1 1 5 5
    1 2 3 6
    0 2 5 5 
    0 2 5 8
    1 4 9 6
    2 7

    输出

    复制
    23

    说明

    区间修改题目,只用一次查询,可以用前缀和来做,比赛没想到,用了线段树,

     1 #include <iostream>
     2 #include <stdio.h>
     3 #define ll long long
     4 #define lson l,m,rt<<1
     5 #define rson m+1,r,rt<<1|1
     6 using namespace std;
     7 const int N = 1e6+10;
     8 ll tree[N<<2], lazy[N<<2];
     9 
    10 void PushUp(int rt) {
    11     tree[rt] = tree[rt<<1] + tree[rt<<1|1];
    12 }
    13 
    14 void PushDown(int rt, int m) {
    15     if(lazy[rt]) {
    16         lazy[rt<<1] += lazy[rt];
    17         lazy[rt<<1|1] += lazy[rt];
    18         tree[rt<<1] += lazy[rt]*(m-(m>>1));
    19         tree[rt<<1|1] += lazy[rt]*(m>>1);
    20         lazy[rt] = 0;
    21     }
    22 }
    23 
    24 void build(int l, int r, int rt) {
    25     if(l == r) {
    26         scanf("%lld", &tree[rt]);
    27         return;
    28     }
    29     int m = (l+r)>>1;
    30     build(lson);
    31     build(rson);
    32     PushUp(rt);
    33 }
    34 
    35 void update(int L, int R, int val, int l, int r, int rt) {
    36     if(L <= l && r <= R) {
    37         lazy[rt] += val;
    38         tree[rt] += (ll)val*(r-l+1);
    39         return;
    40     }
    41     PushDown(rt, r-l+1);
    42     int m = (l+r)>>1;
    43     if(m >= L) update(L, R, val, lson);
    44     if(m < R) update(L, R, val, rson);
    45     PushUp(rt);
    46 }
    47 
    48 ll query(int L, int R, int l, int r, int rt) {
    49     if(L <= l && r <= R) {
    50         return tree[rt];
    51     }
    52     PushDown(rt, r-l+1);
    53     int m = (l+r)>>1;
    54     ll ans = 0;
    55     if(m >= L) ans += query(L, R, lson);
    56     if(m < R) ans += query(L, R, rson);
    57     return ans;
    58 }
    59 
    60 
    61 int main() {
    62     int n, q;
    63     scanf("%d%d",&n,&q);
    64     build(1,n,1);
    65     while(q--) {
    66         int o, l, r, p;
    67         scanf("%d%d%d%d", &o, &l, &r, &p);
    68         if(o == 1) update(l,r,-p,1,n,1);
    69         else update(l,r,p,1,n,1);
    70     }
    71     int l,r;
    72     cin >> l >> r;
    73     printf("%lld
    ",query(l,r,1,n,1));
    74     return 0;
    75 }

    前缀和代码:

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1e6+10;
     5 ll a[N], b[N];
     6 int main() {
     7     int n, m, o, l, r, p;
     8     cin >> n >> m;
     9     for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);
    10     while(m--) {
    11         scanf("%d%d%d%d", &o, &l, &r, &p);
    12         if(o == 1) b[l] -= p, b[r+1] += p;
    13         else b[l] += p, b[r+1] -= p;
    14     }
    15     scanf("%d%d", &l, &r);
    16     ll ans = 0;
    17     for(int i = 1; i <= r; i ++) {
    18         b[i] += b[i-1];
    19         if(i >= l) {
    20             ans += a[i];
    21             ans += b[i];
    22         }
    23     }
    24     printf("%lld
    ",ans);
    25     return 0;
    26 }

    J 时间(time)

    链接:https://www.nowcoder.com/acm/contest/135/j
    来源:牛客网

    题目描述

             Apojacsleam是一个喜欢特殊时刻的人。

            他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零)。例如00:00就是回文时刻。

            给定一个时刻,求此时刻的上一个和下一个回文时刻。
    J题附加:00:00就是24:00,没有24:00这一时刻
    J题附加:输入可能有前导0,输出不含前导0,例如10:1的意思是10:01,而10:10的输出为10:10 

    输入描述:

    两个正整数,用“:”隔开,表示小时和分钟,保证输入时间合法。

    输出描述:

    两行,两个时刻(不含前导0),用“:”隔开,表示上一个时刻和下一个时刻
    示例1

    输入

    复制
    09:33

    输出

    复制
    5:50
    10:1
    示例2

    输入

    复制
    23:32

    输出

    复制
    22:22
    0:0

    送分题。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define ull unsigned long long
     4 using namespace std;
     5 int main() {
     6     int a, b, flag = 0;
     7     scanf("%d:%d",&a,&b);
     8     for(int i = a; ; i--) {
     9         if(i < 0) i =  23;
    10         for(int j = (i==a)?b-1:59; j >= 0; j --) {
    11             if(i%10==j/10 && i/10==j%10) {
    12                 printf("%d:%d
    ",i,j);
    13                 flag = 1;
    14                 break;
    15             }
    16         }
    17         if(flag)break;
    18     }
    19     for(int i = a; ; i ++) {
    20         if(i == 24) i = 0;
    21         for(int j = (i==a)?b+1:0; j < 60; j ++) {
    22             if(i%10==j/10 && i/10==j%10) {
    23                 return 0*printf("%d:%d
    ",i,j);
    24             }
    25         }
    26     }
    27     return 0;
    28 }
  • 相关阅读:
    Spark面对OOM问题的解决方法及优化总结 (转载)
    spark rdd 宽窄依赖理解
    hive orc update
    hive sql 语句执行顺序及执行计划
    java 正则 贪婪匹配 匹配sql语句中的引号内容
    java 权重随机算法实现
    MySQL创建用户和加限权
    MySQL完整性约束
    MySQL基础操作与数据类型
    MySQL数据库初识
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/9353402.html
Copyright © 2011-2022 走看看