关于可能更简单的贪心实现方式

P1970 [NOIP2013 提高组] 花匠

@[lxy07830](/user/363322) ```in 3 1 1 1 ```
by dk_qwq @ 2022-09-07 06:16:59


@[dkqwq](/user/311306) 谢谢大佬,不过这种数据的话似乎只用判断一下全部相等就行吧,请问还有别的问题吗
by lxy07830 @ 2022-09-07 22:45:44


我又修改了一下我的代码,现在可以通过hack了 ```cpp #include <bits/stdc++.h> using namespace std; int n, ans = 1, flag; int a[100005]; int main(){ scanf("%d" ,&n); for(int i = 1; i <= n; ++i){ scanf("%d" ,&a[i]); } for(int i = 2, last = 1; i < n; ++i){ if((a[last] > a[i] && a[i] < a[i + 1]) || (a[last] < a[i] && a[i] > a[i + 1])){ last = i; flag = 1; ans++; } } printf("%d\n" ,ans + flag); return 0; } ```
by lxy07830 @ 2022-09-08 22:44:37


没有问题的 就是找到谷峰谷底有多少个,把它们连起来就行了,可以保证没有更优的方法,感性理解一下 致敬lxy!
by jimhuang @ 2023-01-25 21:38:00


HACK: 3 1 2 3 ```cpp #include <bits/stdc++.h> using namespace std; int n, ans = 1, flag; int a[100005]; int main(){ scanf("%d" ,&n); for(int i = 1; i <= n; ++i){ scanf("%d" ,&a[i]); } for(int i = 2, last = 1; i < n; ++i){ if((a[last] > a[i] && a[i] < a[i + 1]) || (a[last] < a[i] && a[i] > a[i + 1])){ last = i; ans++; } if(a[i]!=a[1]) flag = 1; } printf("%d\n" ,ans + flag); return 0; } ``` 这样就可以了
by 林瀚旭 @ 2023-08-17 20:58:19


|