牛客小白月赛7

A.送分题
 

题目描述

做水题就是在浪费时间,但是一场比赛要是没有送分的签到题,大家的比赛体验就会很差。为了优化你的比赛体验又不浪费你的读题时间,我并不打算给你很复杂的故事背景,你只需要复制下面的代码并选择正确的语言提交即可通过此题。

#include<iostream>
using namespace std;
long long f(long long n)
{
    if (n < 20180001) return n + 2017;
    return f(f(n - 2018));
}
int main()
{
    long long n;
    cin >> n;
    cout << f(n) << endl;
    return 0;
}

输入描述:

输入一个整数n。(1 ≤ n ≤ 1018)

输出描述:

输出一个整数表示答案。

示例1

输入

复制

20182017

输出

复制

20182017

小于20182017输出n + 2017 否则输出20182017

//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;
 
const int MAXN = 1e6 + 10;
 
char arr[MAXN];
 
int main()
{
    //ios::sync_with_stdio(false);
 
    //cin.tie(0);     cout.tie(0);
 
    bool flag = false;
 
    string s;
 
    cin>>s;
 
    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] <= 'Z')
            s[i] += 32;
    }
 
    for(int i = 0; i < s.length() - 1; i++)
    {
        if(s[i] == 'b' && s[i + 1] == 'o' && s[i + 2] == 'b')
        {
            cout<<i<<endl;
            flag = true;
            break;
        }
    }
    if(!flag)
        cout<<"-1"<<endl;
    return 0;
}

C.谁是神射手

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

题目描述

有一天,MWH突然来了兴致,想和CSL比比谁枪法好。于是他们找来了一个瓶子,比比看谁先打中这个瓶子。 给定MWH的命中率和CSL的命中率。 两人轮流射击,MWH先手,问谁获胜的概率大?

输入描述:

输入两个整数和,表示MWH和CSL的命中率。.

输出描述:

若MWH获胜的概率大,则输出"MWH"。 若CSL获胜的概率大,则输出"CSL",否则输出"equal"。

示例1

输入

复制

100 100

输出

复制

MWH

示例2

输入

复制

0 100

输出

复制

CSL

分析事件 计算概率并比较

//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 10;

const double eps = 0.0001;


int main()
{
    //ios::sync_with_stdio(false);

    //cin.tie(0);     cout.tie(0);

    double a, b;

    cin>>a>>b;

    a /= 100;
    b /= 100;

    b = (1 - a) * b;

    if(fabs(a - b) <= eps)
        cout<<"equal"<<endl;
    else if(a > b)
        cout<<"MWH"<<endl;
    else 
        cout<<"CSL"<<endl;

    return 0;
}

C.app的超能力

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

64bit IO Format: %lld

题目描述

Applese有个神奇的能力,TA可以把m个硬币融合成1个硬币,是不是很厉害。现在Applese有n个硬币,TA想把这个n个硬币融合成1个,请问他能完成吗?

输入描述:

输入两个整数n,m(1 ≤ n, m ≤ 109)

输出描述:

如果Applese能完成,输出"Yes",否则输出"No"。

示例1

输入

复制

10 7

输出

复制

No

暴力可过 也可化简

#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 10;


int main()
{
    //ios::sync_with_stdio(false);

    //cin.tie(0);     cout.tie(0);

    int n, m;

    cin>>n>>m;
	
	if(m == 1)
	{
        if(n == 1)
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
		return 0;
	}
    if((n - 1) % (m - 1) == 0)
        cout<<"Yes"<<endl;
	else
    	cout<<"No"<<endl;

    return 0;
}

G 分苹果

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

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

CSL手上有n个苹果,第i个苹果的质量是wi,现在他想把这些苹果分给他的好朋友wavator和tokitsukaze。但是CSL为了不让他们打架,根据质量决定尽量地均分成两堆分给他们。现在CSL想知道到底给每个人分多少质量的苹果。

注意:苹果不能劈开来,并且如果不能正好均分,tokitsukaze小姐姐会拿到重的那一堆。

输入描述:

第一行输入一个整数n(2 ≤ n ≤ 100),第二行n个整数,表示每个苹果的质量wi(1 ≤ wi ≤ 100)。

输出描述:

输出两个整数,分别表示wavator和tokitsukaze得到的苹果的质量。

示例1

输入

复制

3
2 2 2

输出

复制

2 4

一半总和容量并装入最大

//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 10;

int n, sum = 0;

int arr[MAXN] = {0};

int dp[MAXN] = {0};

int main()
{
    //ios::sync_with_stdio(false);

    //cin.tie(0);     cout.tie(0);

    cin>>n;

    for(int i = 1; i <= n; i++)
        cin>>arr[i], sum += arr[i];

    int halfsum = sum / 2;

    for(int i = 1; i <= halfsum; i++)
    {
        for(int j = halfsum; j >= arr[i]; j--)
            dp[j] = max(dp[j], dp[j - arr[i]] + arr[i]);
    }

    cout<<dp[halfsum]<<' '<<sum - dp[halfsum]<<endl;

    return 0;
}

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

题目描述

CSL正在学习《计算机办公自动化》文件的建立与删除。

CSL发现,当他新建一个word文档时,会得到一个名为"新建 Microsoft Office Word 文档.doc"的文件,再新建一个,则名为"新建 Microsoft Office Word 文档(2).doc",再新建,便是"新建 Microsoft Office Word 文档(3).doc"。不断新建,编号不断递增。倘若他已经新建了三个文档,然后删除了"新建 Microsoft Office Word 文档(2).doc",再新建一个就又会得到一个"新建 Microsoft Office Word 文档(2).doc"。

严格来说,Windows在每次新建文档时,都会选取一个与已有文件编号不重复的最小正整数作为新文档的编号。

现在,请你编程模拟以上过程,支持以下两种操作:

New:新建一个word文档,反馈新建的文档的编号;

Delete id:删除一个编号为id的word文档,反馈删除是否成功。

初始时一个文件都没有,"新建 Microsoft Office Word 文档.doc"的编号算作1。

输入描述:

第一行一个正整数n表示操作次数,接下来n行,每行表示一个操作。若该行为"New",则表示新建,为:Delete id"则表示要删除编号为id的文档,其中id为一个正整数。操作按输入顺序依次进行。操作次数不超过100000,删除编号的数值不超过100000。

输出描述:

对于输入的每一个操作,输出其反馈结果。对于新建操作,输出新建的文档的编号;对于删除操作,反馈删除是否成功:如果删除的文件存在,则删除成功,输出"Successful",否则输出"Failed"。

示例1

输入

复制

12
New
New
New
Delete 2
New
Delete 4
Delete 3
Delete 1
New
New
New
Delete 4

输出

复制

1
2
3
Successful
2
Failed
Successful
Successful
1
3
4
Successful

优先队列维护 数组记录

#pragma GCC optimize(3)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;
 
const int MAXN = 1e6 + 10;
 
int arr[MAXN] = {0}, flag = 1;
 
priority_queue <int> PQ;
 
int main()
{
    ios::sync_with_stdio(false);
 
    cin.tie(0);     cout.tie(0);
 
    int N, x;
 
    cin>>N;
 
    string oprt;
 
    while(N--)
    {
        cin>>oprt;
 
        if(oprt == "New")
        {
            if(PQ.empty())
            {
                arr[flag] = 1;
                cout<<flag++<<endl;
            }
            else
            {
                int x = -PQ.top();
 
                if(x < flag)
                {
                    cout<<x<<endl;
                    arr[x] = 1;
                    PQ.pop();
                }
                else
                {
                    arr[flag] = 1;
                    cout<<flag++<<endl;
                }
            }
        }
         
        else
        {
            cin>>x;
            if(arr[x] == 0)
                cout<<"Failed"<<endl;
            else
            {
                arr[x] = 0;
                PQ.push(-x);
                cout<<"Successful"<<endl;
            }
        }
    }
 
    return 0;
}
原文地址:https://www.cnblogs.com/zeolim/p/12270445.html