博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 831 A Unimodal Array 模拟(我感觉我现在比任何时候都理解程序员就是专门写各种Bug这句话)...
阅读量:6257 次
发布时间:2019-06-22

本文共 3217 字,大约阅读时间需要 10 分钟。

  题目链接: http://codeforces.com/problemset/problem/831/A

  题目描述: 让你判断数列是不是符合题目描述的规律增长

  解题思路: 我知道我的思路是对的, 但是肯定是不好的, 因为BUG·特别难找

  代码: 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define meminf(a) memset(a,-0x3f,sizeof(a))#define fi(n) for(i=0;i
= a[i-1] ) { flag = 0; break; } } if( flag ) { yes; return 0; } if( a[1] > a[2] || a[n] > a[n-1] ) { no; return 0; } flag = 1; for( int i = 2; i <= n; i++ ) { if( a[i] != a[1] ) flag = 0; } if( flag ) { // 平着 yes; return 0; } flag = 1; int cnt = 0;// cout << cnt << endl; for( int i = 2; i <= n; i++ ) { if( a[i] == a[i-1] && flag ) {// cout << i << " " << flag << endl; cnt++; flag = 0; } else if( a[i] != a[i-1] ) flag = 1; }// cout << cnt << endl; if( cnt > 1 ) { // 保证了至多有一段儿是平着的 no; return 0; } flag = 1; if( a[1] == a[2] ) { int i; for( i = 2; i <= n; i++ ) { if( a[i] != a[i+1] ) break; } for( int j = i; j <= n-1; j++ ) { if( a[j+1] >= a[j] ) { flag = 0; break; } } if( flag == 1 ) { // 先平再down yes; return 0; } } flag = 1;// cout << a[n] << " " << a[n-1] << endl; if( a[n] == a[n-1] ) {// de; int i; for( i = n; i >= 2; i-- ) { if( a[i] != a[i-1] ) break; }// cout << i << endl; for( int j = 2; j <= i; j++ ) {// if( a[j] == 921 ) {// cout << a[j+1] << endl;// } if( a[j] <= a[j-1] ) { flag = 0; break; } } if( flag ) { // 先上升再平着// de; yes; return 0; } } int start = -1; for( int i = 2; i <= n; i++ ) { if( a[i] == a[i-1] ) { start = i-1; break; } } int end = -1; for( int i = n; i >= 2; i-- ) { if( a[i] == a[i-1] ) { end = i; break; } }// cout << start << end << endl; if( start == -1 ) { for( int i = 2; i <= n; i++ ) { if( a[i] < a[i-1] ) { start = end = i-1; break; } } }// cout << start << end << endl; flag = 1; for( int i = 2; i <= start; i++ ) { if( a[i] <= a[i-1] ) { flag = 0; break; } } for( int i = n; i > end; i-- ) { if( a[i] >= a[i-1] ) { flag = 0; break; } } if( flag ) { yes; return 0; } no; return 0;}
View Code

  思考: 如题目所说, 哎.......我一开始看到这道题的时候觉得应该枚举一些不可以的特殊情况, 但是不可以的情况实在太多了.....所以我就想干脆直接把所有合法情况都判断出来, 剩下的都是不行的, 就是这个傻逼思路让我苦苦调BUG调了小两个小时.......我的代码能力很渣, 所以应该想一些巧的思路的, 但是我一直觉得自己暴力的话是能够写出来的........然后就是各种烦, 自己也越来越不想换一个思路, 宁愿死磕到......哎, 以后要长记性啊, 明确思路, 这次CF只做出来一道题.......说好的看D呢......这两天有的忙了.....组合数学, 数论, 今天的CF, 昨天的Hihocoder, 今天晚上的CF教育场, 再加上自己要做线段树和DP的专题.......好多好多题要补啊.....先不打比赛了.......哎

  代码: 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define meminf(a) memset(a,-0x3f,sizeof(a))#define fi(n) for(i=0;i
a[i+1] ) { dec = 1; } } if( flag ) { printf( "YES\n" ); } else { printf( "NO\n" ); } return 0;}
View Code

  思考*2: 这他妈才是正确思路啊......我们只需要从几个角度去考虑问题,平稳之后不能上升, 下降之后不能平稳, 平稳之前可以上升这几点来考虑, 代码没几行就写完了啊.....正确性保证就根据连续判断每一个区间之差, 根据正负和三个变量来确定

转载于:https://www.cnblogs.com/FriskyPuppy/p/7405135.html

你可能感兴趣的文章
走红日本 阿里云如何能够赢得海外荣耀
查看>>
qt 学习之路2
查看>>
线上应用故障排查之二:高内存占用
查看>>
第四次作业
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
BFS --- 素数环
查看>>
PCIE_DMA:xapp1052学习笔记
查看>>
python ----字符串基础练习题30道
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
Spring Boot中使用MyBatis注解配置详解
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
【代码小记】无
查看>>
BarTender 2016表单中的“秤显示”控件
查看>>
11月20日学习内容整理:jquery插件
查看>>
Redis客户端集群
查看>>