BC 74 div2

T1:


*****当and mod 1e9+7时,若是2个小于1e9+7的数相加,则不需要用ll。

但这道题是乘25!!!!!!!!!

以后不能惯性思维直接用int。******



如果 s[i]!=0,那么s[i+1]=s[i]-1;

首先查一遍,如果出现错误,ans=0;

记0出现的次数为o

则ans=26*25^o;


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long mo=1e9+7;
int a[100005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
    int ans=26;
        int n;
        cin>>n;
        memset(a,0,sizeof(a));
        for(int i=1;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=1;i<n;i++)
        {
            if(!a[i])
            {
                ans=(ans*25)%mo;
            }
            else if(a[i]!=a[i+1]+1)
            {
                ans=0;
                break;
            }
        }
        cout<<ans<<endl;
    }
}


T2:

对于每组数据的6个点做一次floyd,然后对于每两个点有共6*6种情况,总复杂度约36n;

代码:

注意别老忘了scanf!!!!

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int mo=1e9+7;
int s[7][7],a[7];


inline jdz(int x)
{
if (x<0)
return -x;
else
return x;
}


#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mo=1e9+7;
int t,n,m,a[7],s[7][7],x,y;


int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (int i=1;i<=6;i++) 
scanf("%d",&a[i]);
for (int i=1;i<=6;i++) 
for (int j=1;j<=6;j++) 
s[i][j]=abs(a[i]-a[j]);

s[1][2]=s[2][1]=s[3][4]=s[4][3]=s[5][6]=s[6][5]=1;

for (int i=1;i<=6;i++)
for (int j=1;j<=6;j++)
for (int k=1;k<=6;k++)
s[j][k]=min(s[j][k],s[j][i]+s[i][k]);

ll sum=0;
for (ll k=1;k<=m;k++)
{
scanf("%d%d",&x,&y);
int ans=abs(x-y);
for (int i=1;i<=6;i++)
for (int j=1;j<=6;j++)
ans=min(ans,abs(x-a[i])+s[i][j]+abs(y-a[j]));
sum=(sum+k*ans)%mo;
}
printf("%lld\n",sum);
}
return 0;
}


T3:

初步一想这样写比较保险:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;
int dp[1<<17],a;
ll ans,mo=1e9+7;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
    int n,m,ma=0;
    int x,y;
    ll ans=0;
    memset(dp,30,sizeof(dp));
    dp[0]=0;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
    {
    scanf("%d",&a);
    for (int j=1;j<=(1<<17);j++)
    {
    dp[j]=min(dp[j],dp[j^a]+1);//方法二的情况
    for (int k=0;k<=17;k++)
    dp[j]=min(dp[j],dp[j^(1<<k)]+1);//方法一的情况
    }
    }
    for (int i=1;i<=m;i++)
    {
    scanf("%d%d",&x,&y);
    ans=(ans+dp[x^y]*i)%mo;
    }
    cout<<ans<<endl;
    }

一想这样时间应该会超。

但居然过了。。。。。。。。1600ms。





<div class="scene-inner" style="--backgroundImage1920:url(https\:\/\/p\.ampmake\.com\/lilibrary\/20220916\/sync20220916\/28fd1387-0e31-48a7-9877-951b8f99a53b\.jpg\@d_progressive); --backgroundImage1024:url(https\:\/\/p\.ampmake\.com\/lilibrary\/892163417397753\/7b4fcb9c-7a9b-477d-abc2-9f7d667536ee\.jpg\@d_progressive); --backgroundImage768:url(https\:\/\/p\.ampmake\.com\/lilibrary\/892162356787600\/46a2e7fd-9735-4bb0-9926-3e861073b2c5\.jpg\@d_progressive); --backgroundImage720:url(https\:\/\/p\.ampmake\.com\/lilibrary\/20220916\/sync20220916\/99f01e42-a3d6-49bf-960b-431e90f222bc\.jpg\@d_progressive);"><div class="product-fadebox top-default active"><div class="product-fadebox-item"><div class="product-model">理想L9 </div></div><div class="product-fadebox-item"><div class="product-title">家庭智能旗舰SUV</div></div><div class="product-fadebox-item"><div class="product-model-image" style="--logo:url(https\:\/\/p\.ampmake\.com\/lilibrary\/650629529518819\/e16dc66a-65c2-4eda-90d0-23721d32d738\.png);"></div></div><div class="product-fadebox-item"><div class="product-buttonlist"><div class="product-button sub firstscreen-button-vr">VR看车</div><div class="product-button main firstscreen-button-buy">预约试驾</div><div class="product-button main firstscreen-button-buy">立即定购</div></div></div><div class="product-fadebox-item"><div class="product-buttonlist"></div></div></div><div class="scene-arrow"><i class="iconfont iconfont-arrowdown"></i></div></div> 是什么意思
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值