2022暑期个人训练赛第09场
链接
A题:魔法部落
等比数列求和,问题在数据范围太大然后有除法的取模。
忘记逆元怎么求了,然后在草稿纸实验,发现除以2然后对1e9+7取模的话和乘(1e9+7)/2+1然后取模结果一样,此题解决
B题:圆盘
当时没有做
C题:棋盘行走
95分。
D题:走方格
这个是个前缀和,一开始没有考虑到去掉非最后一个格子会交换两人剩下的权值,然后30?数据这么水的吗
嗯,可以把数组开的稍微大点,可以在后续偷懒。
思路就是奇数偶数各自存一个前缀和,遍历一下,去掉第i点符合条件就ans++;
#include<iostream>
using namespace std;
typedef unsigned long long ll;
ll ans,n;
int suma[200010],sumb[200010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
suma[i]=suma[i-1];
sumb[i]=sumb[i-1];
if(i%2)
suma[i]+=x;
else sumb[i]+=x;
}
for(int i=1;i<=n;i++)
{
if(i==1&&sumb[n]==suma[n]-suma[1])ans++;
else if(suma[i-1]+sumb[n]-sumb[i]==sumb[i-1]+suma[n]-suma[i])ans++;
}
cout<<ans;
return 0;
}
E题:滑稽果
没有做
F题:数列
没有做
G题:小球
没有做
H题:游戏
没有做
I题:T-shirt
水题,if else解决的那种
J题:Minimize Ordering
也有点水,意思是给你一段字符串,让你输出最小字典序的排列
直接,sort下就可了,中间用个int数组过渡下
K题:1111gal password
要求相邻两位之间差值不大于1,设a[i][j]是第i位选j的种数,我们不难想出 a[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]
可以把数组设大点,偷懒而且防止re,最后ans是a[n][i]累加,注意最后输出一定要取余,,不然就像我这样wa一次了
#include<iostream>
#include<cmath>
using namespace std;
typedef unsigned long long ll;
ll ans,n;
const ll mod=998244353;
ll a[2000001][11];
int main()
{
cin>>n;
for(int i=1;i<=9;i++)a[1][i]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=9;j++)
{
a[i][j]=a[i-1][j-1]%mod+a[i-1][j+1]%mod+a[i-1][j]%mod;
a[i][j]%=mod;
}
}
ll ans=0;
for(int i=1;i<=9;i++)ans+=(a[n][i]%mod);
cout<<ans%mod;
return 0;
}
剩下的,还没做有空再补
作者:qbning
-------------------------------------------
个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!