ATcoder D - Handstand 2

Posted accepting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ATcoder D - Handstand 2相关的知识,希望对你有一定的参考价值。

题目大意:

给一个数N,在小于N的所有数中,找到(A,B)的数量,其中A的第一个数字要等于B的最后的一个数字,A的最后一个数字要等于B的第一个数字。

题解:对从1到N的所有数x,用一个二维数组保存dp[a][b]其中a是x的第一个数字,b是x的最后一个数字。答案就是dp[a][b]*dp[b][a]。。嗯嗯~~~秒

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100;
ll dp[N][N];
ll find(ll x){
    while(x){
        if(x/10==0){
            return x;
        }
        x/=10;
    }
}
int main()
{
    ll n;
    cin>>n;
    for(ll i=1;i<=n;i++){
        ll h=i;
        ll a1=h%10;
        ll a2=find(h);
        dp[a2][a1]++;
    }
    ll ans=0;
    for(ll i=1;i<=9;i++){
        for(ll j=1;j<=9;j++){
            ans+=dp[i][j]*dp[j][i];
        }
    }
    cout<<ans<<endl;
    return 0;
}

以上是关于ATcoder D - Handstand 2的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Beginner Contest 152

AtCoder Beginner Contest 133 -D — Rain Flows into Dams

[AtCoder Grand Contest 025 Problem D]Choosing Points

AtCoder Beginner Contest 259 - D - Circumferences - 题解

AtCoder Grand Contest 025 Problem D - Choosing Points

AtCoder 199 D - RGB Coloring 2(枚举,暴力)