C. 城市重建

来源:互联网 发布:拼音域名 编辑:程序博客网 时间:2024/05/22 01:29

C. 城市重建

在城市的边缘有n个连续的建筑,包工头阿飞负责把这些建筑的高度改建为一致。他每次会有连续两个操作:
1.在最后一个建筑后面建造一个和当前建筑中第m个建筑高度相同的建筑。
2.拆除当前建筑中最前面的建筑。
阿飞是一个理智的人,他在开工之前想知道他是否能完成这个任务。
Input
案例有多组,第一行给出n和m,(1<=m<=n<=10^5),第二行给出n个数,a1,a2….an(1<=ai<=10^5),表示建筑的高度。

Output
每行输出一个答案,如果阿飞能完成任务,输出他需要操作的最少次数,否则输出No。

Sample Input
4 2
3 1 1 1
4 1
3 1 1 1
Sample Output
1
No

蛇皮题 直接看代码

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<cctype>#include<functional>using namespace std;#define swap(a,b) {long long c=a;a=b;b=c;}const int MAX = 999999;const double Eps = 1e-12;const double PI = acos(-1.0);int gcd(int x, int y){    return x%y == 0 ? y : gcd(y, x%y);}//int a[111111];int a[111111];int main(){    int n, m;    while (~scanf("%d %d",&n,&m))    {        int flag = 1;        for (int i = 1; i <= n; i++)        {            scanf("%d",&a[i]);        }        for (int i = n; i >1; i--)        {            if (a[i] != a[i - 1])            {                flag = i;                break;            }        }        if (flag>m)        {            puts("No");        }        else        {            printf("%d\n", flag - 1);        }    }}
原创粉丝点击