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

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;
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值