46分,求思路

P1567 统计天数

你的 `cin` 炸了。 你需要读入 $n$ 个数字,而 $n$ 最大是 $10 ^ 6$。 `cin` 的常数非常大,在读入这么多个数字的时候会超时。
by xiaosuan @ 2023-07-24 18:36:17


@[xiaosuan](/user/529574) 蒟蒻不知如何改
by HuangGuangWu666 @ 2023-07-24 19:40:21


用 `scanf`、快读快写或关同步。 具体怎么写可以上百度查。 推荐使用第一种方法; 第二种方法可能会比第一种方法要快一点,但相差不大,而且要手写,容易出 bug,依个人取舍; 第三种方法在某些比赛中没法用,不推荐。
by xiaosuan @ 2023-07-24 19:55:13


注:关同步指关掉 `cin` 与 `scanf` 之间的同步。
by xiaosuan @ 2023-07-24 19:56:52


~~等等,为什么你 A 的题比我还多?~~
by xiaosuan @ 2023-07-24 19:59:44


我已经试过了,还是照旧
by HuangGuangWu666 @ 2023-07-24 20:35:38


@[xiaosuan](/user/529574)
by HuangGuangWu666 @ 2023-07-24 20:36:33


2. 你的数组只开了 $10^5$; 3. 你的代码会越界。 ```c++ for(int i=0;i<n;i++){ if(a[i]<=a[i+1]){ ``` 当 $i = n - 1$ 时,你的代码会访问数组 $a$ 的第 $n$ 个元素,但这个值其实不存在。
by xiaosuan @ 2023-07-24 20:55:05


4. 你把数组开到了函数里面。有时候这么做会导致 RE。
by xiaosuan @ 2023-07-24 20:56:42


```cpp inline void read(int& a) { int s=0,w=1; char ch=getchar(); while (ch<'0'||ch>'9') { if (ch=='-') w=-1; ch=getchar(); } while (ch>='0'&&ch<='9') { s = s*10+ch-'0'; ch=getchar(); } a=s*w; } int n,a[1000001]; int main(){ read(n); for(int i=0;i<n;i++){ read(a[i]); } int cnt=1,max=1; for(int i=0;i<n-1;i++){ if(a[i]<=a[i+1]){ cnt++; if(max<cnt){ max=cnt; } } else{ if(max<cnt){ max=cnt; } cnt=1; } } cout<<max<<endl; return 0; } ``` 已 _AC_ ,感谢大佬
by HuangGuangWu666 @ 2023-07-24 21:05:30


|