CF1156A题解
MoSalah
·
·
题解
题目大意
给你一串数字,每个数字代表一个图形,1 代表圆,2 代表等边三角形,3 代表正方形,问这些图形从外到内嵌套后,有多少个交点?所有图形都为最大。
解题思路
考虑所有的方法,有:
他们的交点数分别是:$ 3 , 4 , 3 , + \infty ,4, + \infty $。
不难发现,三角形和正方形只要相邻,直接输出 $\texttt{Infinite}$。
然而这样,第三个点就无了。那一定就是算多啦。
那有没有重合的两个点呢?
嵌套方式为:$3$ 套 $1$ 套 $2$ 会出现一个共同交点。
如图:

蓝色点有两个点重合了,特判!这个图形只有 $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;
}
```