CF1156A题解

· · 题解

题目大意

给你一串数字,每个数字代表一个图形,1 代表圆,2 代表等边三角形,3 代表正方形,问这些图形从外到内嵌套后,有多少个交点?所有图形都为最大。

解题思路

考虑所有的方法,有:

他们的交点数分别是:$ 3 , 4 , 3 , + \infty ,4, + \infty $。 不难发现,三角形和正方形只要相邻,直接输出 $\texttt{Infinite}$。 然而这样,第三个点就无了。那一定就是算多啦。 那有没有重合的两个点呢? 嵌套方式为:$3$ 套 $1$ 套 $2$ 会出现一个共同交点。 如图: ![](https://cdn.luogu.com.cn/upload/image_hosting/doszv4mb.png) 蓝色点有两个点重合了,特判!这个图形只有 $6$ 个交点而刚才却计算出了 $7$ 个。 #### 代码 ```cpp #include <bits/stdc++.h.> using namespace std; int a[105]={0}; int main(int argc, const char * argv[]) { // insert code here... int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } long long Count=0; for(int i=2;i<=n;i++){ if(a[i]==2&&a[i-1]==1&&a[i-2]==3){ Count--; } if(a[i]==1){ if(a[i-1]==2){ Count+=3; }else if(a[i-1]==3){ Count+=4; } }else if(a[i]==2){ if(a[i-1]==1){ Count+=3; }else if(a[i-1]==3){ printf("Infinite"); return 0; } }else if(a[i]==3){ if(a[i-1]==1){ Count+=4; }else if(a[i-1]==2){ printf("Infinite"); return 0; } } } printf("Finite\n%lld",Count); return 0; } ```