zoukankan      html  css  js  c++  java
  • ATcoder D

    题目大意:

    给一个数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;
    }
  • 相关阅读:
    UVa 11389
    uva 1418
    uva 10905 Children's Game
    uva 471
    UVA 1508
    Uva120 Stacks of Flapjacks
    UVA 10020 Minimal coverage
    UVA434
    UVa 311
    决策树算法
  • 原文地址:https://www.cnblogs.com/Accepting/p/12221376.html
Copyright © 2011-2022 走看看