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 133 -D — Rain Flows into Dams
[AtCoder Grand Contest 025 Problem D]Choosing Points
AtCoder Beginner Contest 259 - D - Circumferences - 题解