Codeforces Round #654 (Div. 2)

A.Magical Sticks

题意:

个长度为的木棒,木棒可以拼接在一起。问最多可以拼接出多少根长度相等的木棒。

题解:

最终都拼成长度为的,组合,组合...最终答案为

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 2e5 + 5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
void solve()
{
    ll n;
    scanf("%lld", &n);
    printf("%lld\n", (n - 1) / 2 + 1);
}
int main()
{
    int t;
    for (scanf("%d", &t); t >= 1; t--)
        solve();
}

B.

题意:

规定每个周期为天,你可以从任意一天开始连续涂色天,询问可以形成多少种不同的形状
图片说明

题解:

可以分成两种情况。
时,都只有一种形状,而,有个形状,因此答案为
时,都有个形状,因此答案为

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 2e5 + 5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
void solve()
{
    ll n, r;
    scanf("%lld%lld", &n, &r);
    if (n <= r)
        printf("%lld\n", n * (n - 1) / 2 + 1);
    else
        printf("%lld\n", r * (r + 1) / 2);
}
int main()
{
    int t;
    for (scanf("%d", &t); t >= 1; t--)
        solve();
}

C.A Cookie for You

题意:

个食物个食物,有个客人个客人,客人每人会吃一个当前数量较多的那个食物,客人每人会吃一个当前数量较少的那个食物,判断是否存在一种排列方式使得每个客人都能吃到食物

题解:

可以知道至多有个客人可以吃到食物,且客人全吃数量较少的那种食物才能取到最大值,因此将客人排在最前面,客人全排在后面,如果则每个客人都能吃到

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 2e5 + 5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
void solve()
{
    ll a, b, n, m;
    scanf("%lld%lld%lld%lld", &a, &b, &n, &m);
    if (min(a, b) >= m && a + b >= n + m)
        puts("Yes");
    else
        puts("No");
}
int main()
{
    int t;
    for (scanf("%d", &t); t >= 1; t--)
        solve();
}

D.Grid-00100

题意:

给定一个的全矩阵,现在要将个位置填为。定义矩阵,其中为第行中的数量,为第列中的数量,现在要求最小,输出最小的方案

题解:

可以发现在一个位置放,对该行和该列的贡献都为,为了使贡献最小,那么应该尽量放到不同行和不同列,所以每次可以在不同行不同列放,同时可以发现,当时,否则为

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 2e5 + 5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
void solve()
{
    int n, k;
    scanf("%d%d", &n, &k);
    printf("%d\n", k % n ? 2 : 0);
    for (int i = n - 1; i >= 0; i--)
    {
        for (int j = n - 1; j >= 0; j--)
            printf("%d", (i + j) % n * n + i < k);
        puts("");
    }
}
int main()
{
    int t;
    for (scanf("%d", &t); t >= 1; t--)
        solve();
}

E1. Asterism (Easy Version)

题意:

给定个怪兽,每个怪兽有个糖果,一开始有个糖果,现在依次和怪兽比糖果数,如果,则获胜,糖果数为初始有个糖果,对怪兽的出场顺序进行排序,能全胜的排序数。同时给定一个质数,如果则输出这个,其中

题解:

进行排序,首先可以确定时均不行,因为此时,而,因此一定包含
那么由于不妨枚举,对于每个,可以确定在位置的值为,那么二分可得的数记为,那么该位置可以放置的数为个,那么,因此只要对每个位置判断一下是否为即可。

#include <bits/stdc++.h>
using namespace std;
int a[2005];
vector<int> ans;
int main()
{
    int n, p;
    scanf("%d%d", &n, &p);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    sort(a + 1, a + n + 1);
    for (int x = 1; x < a[n]; x++)
    {
        int flag = 1;
        for (int i = 1; i <= n; i++)
        {
            int pos = upper_bound(a + 1, a + n + 1, x + i - 1) - a - 1;
            if ((pos - i + 1) % p == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag)
            ans.push_back(x);
    }
    printf("%d\n", ans.size());
    for (auto i : ans)
        printf("%d ", i);
    puts("");
    return 0;
}

E2.Asterism (Hard Version)

题意:

E2和E1的题意相同,

题解:

因为,所以不可能再去枚举了,其实从E1的结果可以发现答案都为连续的数,最开始的那个数也很好确定就为,那么只要确定最大的数即可。想到如果很大,答案就是,那么如果,那么至少前个数可以随意取,因此答案一定包含,由此可以想到上界就是最多前个数可以自由移动,但是第个数要固定,那么想想什么时候第个数固定,就是时,,因此答案为

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
int main()
{
    ll n, p, ans1 = 0, ans2 = 2e9;
    scanf("%lld%lld", &n, &p);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &a[i]);
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++)
    {
        ans1 = max(ans1, a[i] - i + 1);
        if (i >= p)
            ans2 = min(ans2, a[i] - i + p);
    }
    printf("%lld\n",max(ans2 - ans1, 0ll));
    for (int i = ans1; i < ans2; i++)
        printf("%lld ", i);
    return 0;
}
全部评论

相关推荐

头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器-&gt;这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题-&gt;后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务