2021“MINIEYE杯”中国大学生算法设计超级联赛
Posted 满天星!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021“MINIEYE杯”中国大学生算法设计超级联赛相关的知识,希望对你有一定的参考价值。
2021“MINIEYE杯”中国大学生算法设计超级联赛(2)
题意:
给你一个边长为 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;
}
题意:
有一个操作顺序。这个操作序列可以写成字符串。对于每个操作,可以在当前字符串之前或之后插入操作序列的下一个字符。比如我的操作顺序是“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杯”中国大学生算法设计超级联赛的主要内容,如果未能解决你的问题,请参考以下文章