2021“MINIEYE杯”中国大学生算法设计超级联赛

Posted 满天星!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021“MINIEYE杯”中国大学生算法设计超级联赛相关的知识,希望对你有一定的参考价值。

2021“MINIEYE杯”中国大学生算法设计超级联赛(2)

6961 I love cube

题意:
给你一个边长为 n-1 的立方体。求立方点上三个点的等边三角形的数目。每边必须平行于oxy、oxz、oyz的某个表面。现在你需要数一数这样的三角形有多少个。每个点只能在立方体的边界或内点上,每个点的三个坐标x、y、z必须是整数。

思路:
通过推导得出结论
sum=(n-1)^2 * (n^2) * 2

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000007;
ll qmi(ll base,ll power)
{
    ll res=1;
    while(power)
    {
        if(power&1)
        {
            res=res*base%mod;
        }
        power>>=1;
        base=base*base%mod;
    }return res;
}
int main()
{
    ll t;
    cin>>t;
    ll n;
    while(t--)
    {
        cin>>n;
        cout<<qmi((n-1)%mod,2)*qmi((n%mod),2)%mod*2%mod<<endl;
    }return 0;
}

6965 I love string

题意:
有一个操作顺序。这个操作序列可以写成字符串。对于每个操作,可以在当前字符串之前或之后插入操作序列的下一个字符。比如我的操作顺序是“aabac”,假设前四次操作后得到的顺序是“baaa”,那么最后一次操作后,字符串可能会变成“baaac”或“cbaaa”。可以看出,第一次操作只有一种操作方法。对于其他操作,只有两种操作方法。对于每种操作方法,都会有一个分数。最终字符串的字典序越小,最终得分越高。然后,对于给定的操作序列,两种操作方法不同。当且仅当存在某个操作(不是第一个操作)时,一个操作会被插入到当前字符串之前,另一个操作会被插入到当前字符串之后。

思路:
容易发现,假设我要模拟出字典序最小的序列,只有最前面一段相同的字符才可以有两种选择,令最初一段相同的字符长度为x ,答案就是 2 ^ x -1。

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000007;
ll qmi(ll a,ll b)
{
    ll res=1;
    while(b)
    {
        if(b&1)
        {
            res=res*a%mod;
        }
        b>>=1;
        a=a*a%mod;
    }return res;
}
int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        string s;
        cin>>s;
        ll sum=0;
        for(int i=1;i<n;i++)
        {
            if(s[i]==s[0])
            {
                sum++;
            }
            else{
                break;
            }
        }cout<<qmi(2,sum)%mod<<endl;
    }return 0;
}

6972 I love 114514
AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    string s;
    cin>>t;
    while(t--)
    {
        cin>>s;
        int flag=0;
        for(int i=0;i<s.size();i++)
        {if (s.find("114514") != string::npos)flag=1;}
       if(flag)  cout<<"AAAAAA"<<endl;
        else cout<<"Abuchulaile"<<endl;
    }return 0;
}

如果觉得写的还不错,点个赞吧^ ^

以上是关于2021“MINIEYE杯”中国大学生算法设计超级联赛的主要内容,如果未能解决你的问题,请参考以下文章

2021“MINIEYE杯”中国大学生算法设计超级联赛补题

2021“MINIEYE杯”中国大学生算法设计超级联赛题解

2021杭电多校赛2021“MINIEYE杯”中国大学生算法设计超级联赛签到题3题

2021“MINIEYE杯”中国大学生算法设计超级联赛

2021“MINIEYE杯”中国大学生算法设计超级联赛题解

6983 杭电多校(2021“MINIEYE杯”中国大学生算法设计超级联赛3) [记忆化搜索]