• 牛客OI赛制测试赛1


    A 斐波那契

    题目描述

    设f[i]表示斐波那契数论的第i项
    f[1]=1,f[2] =1,f[i] = f[i - 1] + f[i - 2]
    给定一个n


    输入描述:

    一个整数n

    输出描述:

    一个整数,表示答案
    示例1

    输入

    复制
    4

    输出

    复制
    1

    备注:

    对于
    的数据,
    对于的数据,

    对于
    的数据,

    对于
    的数据,
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 const int N = 1e6+10;
     6 char s[N];
     7 int main() {
     8     cin >> s;
     9     int len = strlen(s);
    10     if((s[len-1]-'0')%2==0)printf("1
    ");
    11     else printf("-1
    ");
    12     return 0;
    13 }

    B 送分题

    题目描述

    对于一套题来说,没有一道送分题,就很不符合常理,但是我又懒得写送分题,所以你可以直接复制以下代码,即可ac本题.
    1. #include<cstdio>#include<iostream>  using namespace std; int a,b,c;  int main(){long long l=1,r=int(1e9)<<1:cin》a>>b;while(r-l>1){c=(l+r)>>1;if(c-b<a)l=c;else if(c-b>a)r=c;else return printf("%d ",c); }     if(l!=r)return printf("%d ",r);      }

    输入描述:

    输入共一行,两个整数a和b,范围在int之间

    输出描述:

    输出一个整数表示答案
    示例1

    输入

    复制
    5 123

    输出

    复制
    128

    备注:

    喵喵喵
     1 #include <iostream>
     2 #include <stdio.h>
     3 #define ll long long
     4 using namespace std;
     5 
     6 int main() {
     7     ll a, b;
     8     cin >> a >> b;
     9     cout << a+b<<endl;
    10     return 0;
    11 }

    C序列

    题目描述

    小a有n个数,他想把他们划分为连续的权值相等的k段,但他不知道这是否可行。
    每个数都必须被划分
    这个问题对他来说太难了,于是他把这个问题丢给了你。

    输入描述:

    第一行为两个整数n,q,分别表示序列长度和询问个数。
    第二行有n个数,表示序列中的每个数。
    接下来的q行,每行包含一个数k,含义如题所示。

    输出描述:

    输出q行,每行对应一个数Yes或者No,分别表示可行/不可行
    示例1

    输入

    复制
    5 3
    2 1 3 -1 4
    3
    2
    1

    输出

    复制
    Yes
    No
    Yes

    备注:

    对于的数据,
    对于的数据,
    对于的数据,
    设ai表示数列中的第i个数,保证
    保证数据完全随机
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <set>
     5 #define ll long long
     6 using namespace std;
     7 const int N = 1e5+10;
     8 ll a[N], s, k;
     9 set<ll> st;
    10 int main() {
    11     int n, q;
    12     scanf("%d%d",&n,&q);
    13     for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);
    14     for(int i = 1; i <= n; i ++) {
    15         s += a[i];
    16         st.insert(s);
    17     }
    18     while(q--) {
    19         scanf("%lld",&k);
    20         if(s%k != 0) {
    21             printf("No
    ");
    22             continue;
    23         }
    24         ll tmp = s/k;
    25         bool flag = true;
    26         for(int i = 1; i <= k; ++i) {
    27             if(!st.count(tmp*i)) {
    28                 flag = false;
    29                 break;
    30             }
    31         }
    32         if(flag) printf("Yes
    ");
    33         else printf("No
    ");
    34     }
    35     return 0;
    36 }

    D 小叶的巡查

    题目描述

    8102年,牛客系列竞赛空前繁荣。为了更好地管理竞赛,小叶决定巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了小叶最常做的事情。小叶有一个钱袋,用于存放往来城市间的路费。

    这个国家有一套优秀的交通方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。

    如果不在某个城市停下来修整,在连续行进过程中,小叶所花的路费与他已走过的距离有关,在走第x-1千米到第x千米这一千米中(x是整数),他花费的路费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。

    因为国家力挺牛客系列竞赛,所以国家会给小叶报销全部的路费。

    现在组织想知道:小叶从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?

    输入描述:

    输入的第一行包含一个整数n,表示包括首都在内的城市数
    城市从1开始依次编号,1号城市为首都。
    接下来n-1行,描述高速路(高速路一定是n-1条)
    每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。

    输出描述:

    输出一个整数,表示小叶最多花费的路费是多少。
    示例1

    输入

    复制
    5
    1 2 2
    1 3 1
    2 4 5
    2 5 4

    输出

    复制
    135

    备注:

    n<23333


     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define INF 0x3f3f3f3f
     4 using namespace std;
     5 const int N = 3e4+10;
     6 typedef pair<ll,ll> P;
     7 vector<P> vs[N];
     8 ll n, v, u, w, MAX, s;
     9 bool vis[N];
    10 void dfs(ll u, ll fa, ll w) {
    11     if(w > MAX) {
    12         MAX = w;
    13         s = u;
    14     }
    15     for(int i = 0; i < vs[u].size(); i ++) {
    16         P p = vs[u][i];
    17         if(p.first == fa) continue;
    18         dfs(p.first, u, w+p.second);
    19     }
    20 }
    21 int main() {
    22     cin >> n;
    23     for(int i = 1; i < n; i ++) {
    24         cin >> u >> v >> w;
    25         vs[u].push_back(P(v,w));
    26         vs[v].push_back(P(u,w));
    27     }
    28     dfs(1, -1, 0);
    29     dfs(s, -1, 0);
    30     cout << MAX*10+MAX*(1+MAX)/2 << endl;
    31     return 0;
    32 }

    E 旅行青蛙

    题目描述

    一只青蛙出去旅游,因为中国有一句古话说的好:“由简入奢易,由奢入俭难”,所以这只青蛙当看的当前景点比前面看过的景点差的时候,青蛙就会说“不开心”为了避免这只青蛙说“不开心”,并且使青蛙看的景点尽量的多,所以他请你帮忙给他安排一条线路,使青蛙可以看到尽量多的景点,并且不走回头路。

    输入描述:

    第一行为一个整数n,表示景点的数量
    接下来n行,每行1个整数,分别表示第i个景点的质量

    输出描述:

    一个整数,表示青蛙最多可以看到几个景点
    示例1

    输入

    复制
    10
    3
    18
    7
    14
    10
    12
    23
    30
    16
    24

    输出

    复制
    6

    备注:

    景点质量为1到n+23的整数
    10<=n<23 10%

    23<=n<233 30%

    233<=n<2333 60%

    2333<=n<23333 100%
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 #include <string.h>
     5 #define INF 0x3f3f3f3f
     6 using namespace std;
     7 const int N = 3e4+10;
     8 int a[N];
     9 int main() {
    10     int n, x;
    11     cin >> n;
    12     memset(a,INF,sizeof(a));
    13     for(int i = 1; i <= n; i ++) {
    14         cin >> x;
    15         *upper_bound(a,a+n,x) = x;
    16     }
    17     printf("%d
    ",lower_bound(a,a+n,INF)-a);
    18     return 0;
    19 }

    F 子序列

    题目描述

    给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果

    输入描述:

    第一行一个整数T,表示数据组数。
    对于每组数据,第一行两个整数N,k,含义如题所示

    接下来一行N个整数,表示给出的序列

    保证序列内的数互不相同

    输出描述:

    对于每组数据,输出一个整数表示答案,对
    取模
    每组数据之间以换行分割
    示例1

    输入

    复制
    3
    4 3 
    5 3 1 4
    5 4
    3 7 5 2 1
    10 3 
    100 1020 2050 102 12 235 4 57 32135 54354 

    输出

    复制
    144
    81000
    521918013

    说明

    第一组数据解释
    所有长度为3的子序列为
    最终答案为

    备注:

    对于
    的数据:

    对于
    的数据:

    对于
    的数据:

    保证序列中的元素互不相同且
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const ll mod = 1e9+7;
     5 const ll md = 1e9+6;
     6 const int N = 1010;
     7 ll a[N], c[N][N];
     8 ll pow_mod(ll x, ll n){  
     9     ll res=1;  
    10     while(n>0){  
    11         if(n&1)res=res*x%mod;  
    12         x=x*x%mod;  
    13         n>>=1;  
    14     }  
    15     return res;  
    16 }
    17 
    18 int main() {
    19     memset(c, 0, sizeof(c));
    20     c[0][0] = 1;
    21     for (int i = 1; i <= 1000; i++) {
    22         c[i][0] = 1;
    23         for (int j = 1; j <= i; j++) {
    24             c[i][j] = (c[i-1][j-1] + c[i-1][j]) % md;
    25         }
    26     }
    27     int t, n, k;
    28     scanf("%d", &t);
    29     while(t--) {
    30         scanf("%d%d", &n, &k);
    31         for(int i = 1; i <= n; i ++) cin >> a[i];
    32         sort(a+1,a+1+n);
    33         ll res = 1;
    34         for(int i = 1; i <= n; i ++) {
    35             ll ans = ((c[n-1][k-1] - c[i-1][k-1] - c[n-i][k-1])%md + md) % md;
    36             res = res*pow_mod(a[i],ans)%mod;
    37         }
    38         printf("%lld
    ",res);
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    【转】iOS WKWebView基本使用总结
    【转】让JS在Android/iOS WebView中反调接口统一,调用更容易
    关于Xcode的Other Linker Flags
    SonarQube+Jenkins+Cppcheck实现C++代码扫描
    YAPI工具配置LDAP统一用户认证
    LDAP脚本批量导出用户
    软件配置库备份之删除指定日期前的备份文件
    软件测试中测试环境独立性的原因
    [SVN]TortoiseSVN工具培训5─常见问题解决
    [SVN]TortoiseSVN工具培训4─客户端常用操作命令
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/9565352.html
Copyright © 2020-2023  润新知