当前位置: 首页 > news >正文

codeforces C. Cows and Sequence 解题报告

题目链接:http://codeforces.com/problemset/problem/284/C

题目意思:给出3种操作:t = 1:在前 a 个数中每个数都加上x; t= 2:在数组末尾增加一个数k,数组长度相应增加1; t = 3:删除数组最后一个数,数组长度减少1。对于n次操作,都给出整个数组所有元素的平均值。

       一开始看见题目意思那么容易懂,于是以为很容易做,错足14次,15次终于成功了。先是TLE(对操作2直接暴力循环加),后在Test 10 wa wa wa~~~,说误差超了,全部不知道是什么回事!

      其实3个操作不需要都模拟出来,操作3是比较麻烦的,因为删除的数有可能经过 t = 1有所变化。所以很自然地想到要追踪当前要删除的数经过t = 1 时的改变,这样就需要开多一个数组来记录这些位置。

      代码中标上“关键”那里是很重要的,代表要清除操作1对数组中最后一个数的处理,否则新的一轮操作1会累加这种操作,这样结果就不正确了。

     

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 2*1e5 + 5;
 8 int a[maxn], mark[maxn];
 9 
10 int main()
11 {
12     int n, i, t, x, l, len;
13     while (scanf("%d", &n) != EOF)
14     {
15         memset(mark, 0, sizeof(mark));
16         a[len=1] = 0;
17         double sum = 0;
18         while (n--)
19         {
20             scanf("%d", &t);
21             if (t == 1)
22             {
23                 scanf("%d%d", &l, &x);
24                 sum += (double) l * x;
25                 mark[l] += x;
26             }
27             else if (t == 2)
28             {
29                 scanf("%d", &x);
30                 sum += x;
31                 a[++len] = x;
32             }
33             else 
34             {
35                 if (len >= 2)
36                 {
37                     sum -= a[len];         //减最后一个数
38                     sum -= mark[len];       //减最后一个数经过操作1时可能的变化
39                     mark[len-1] += mark[len];    
40                     mark[len] = 0;  // 这个是关键啊
41                     len--;
42                 }
43             }
44             printf("%.7lf\n", (double)sum/len);
45         }
46     }
47     return 0;
48 }

 

   ps:学完树状数组后会补上运用树状数组解决的方法

转载于:https://www.cnblogs.com/windysai/p/3556694.html

相关文章:

  • hdu1231(最大连续子序列)
  • Android Studio Gradle project refresh failed No such property classpath for class
  • 给hmailserver添加DKIM签名
  • SharePoint 2013 App 示例之图片墙
  • OAuth2.0 介绍
  • CCI_Q1.7
  • 服务器安全部署文档
  • [转]How to solve SSIS error code 0xC020801C/0xC004700C/0xC0047017
  • 【VC++学习笔记三】控件自绘
  • 长沙多校联合训练
  • Windows下修改Git bash的HOME路径(转)
  • 高性能javascript学习总结(3)--数据访问
  • 灵感不断
  • 各种触摸手势
  • Java对MySQL数据库进行连接、查询和修改【转载】
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • ES学习笔记(12)--Symbol
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • js对象的深浅拷贝
  • MySQL QA
  • nginx 配置多 域名 + 多 https
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 简单易用的leetcode开发测试工具(npm)
  • 老板让我十分钟上手nx-admin
  • 利用jquery编写加法运算验证码
  • 面试总结JavaScript篇
  • 区块链共识机制优缺点对比都是什么
  • 携程小程序初体验
  • 用 Swift 编写面向协议的视图
  • elasticsearch-head插件安装
  • Java数据解析之JSON
  • Prometheus VS InfluxDB
  • 我们雇佣了一只大猴子...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​第20课 在Android Native开发中加入新的C++类
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define用法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #QT(智能家居界面-界面切换)
  • #单片机(TB6600驱动42步进电机)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (4)Elastix图像配准:3D图像
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Scala的“=”符号简介
  • (转)关于pipe()的详细解析
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • ******之网络***——物理***