【博客园的第一条随笔,值得纪念一下】

均分纸牌【传送门】

洛谷上的算法标签是


这道题是一道贪心题,过了四遍才过(蒟蒻有点废)

第一遍的时候考虑的非常少,只想到了求出平均数→求差值→从左往右加差值;

这样出来的结果永远是n-1,只过了一个点。

附上错误想法(不要被误导):

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[],sum=,c[],b,ans=;
int t();
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
b=sum/n;
t();
}
int t()
{
for(int i=;i<=n;i++)
c[i]=a[i]-b;
for(int j=;j<=n;j++)
{
c[j]+=c[j-];
ans++;
}
cout<<ans<<endl; }

第二遍就慌了,也只过了一个点。

第二遍的时候在第一步基础上加了if语句,然鹅还是错的。

连错两遍,我慌了。第三遍仔细的拿纸笔想了一下错误是怎么造成的(但只是拿洛谷下载下来的错误的测试数据),虽然测试数据对了,然鹅只是对于测试数据程序是合适的,对其他例子就不合适了【所以提醒做题一定不能看个例,要看整体】

第四次真的深思熟虑了一番,改进了许多,终于过了。

附上ac代码:

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[],sum=,c[],b,ans=;
int t();
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
b=sum/n;
t();
}
int t()
{
for(int i=;i<=n;i++)
c[i]=a[i]-b;
int i=,j=n;
while(c[i]==&&i<n) i++;
while(c[j]==&&j>) j--;
while(i<j)
{
c[i+]+=c[i];
c[i]=;
ans++;
i++;
while(c[i]==&&i<j)i++;
}
cout<<ans<<endl; }

end-

【洛谷p1031】均分纸牌的更多相关文章

  1. 洛谷P1031 均分纸牌

    P1031 均分纸牌 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌 ...

  2. 洛谷 P1031 均分纸牌

    P1031 均分纸牌 这道题告诉我们,对于实在想不出算法的题,可以大胆按照直觉用贪心,而且在考试中永远不要试着去证明贪心算法,因为非常难证,会浪费大量时间. (这就是你们都不去证的理由??) 这道题贪 ...

  3. 洛谷 P1031 均分纸牌 Label:续命模拟QAQ

    题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  4. 洛谷 P1031 均分纸牌【交叉模拟】

    题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  5. [NOIP2002] 提高组 洛谷P1031 均分纸牌

    题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  6. 洛谷——P1031 均分纸牌

    https://www.luogu.org/problem/show?pid=1031#sub 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以 ...

  7. (Java实现) 洛谷 P1031 均分纸牌

    题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...

  8. 洛谷P1368 均分纸牌(加强版)

    P1368 均分纸牌(加强版) 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,纸牌总数必为 N 的倍数.可以在任一堆上取1张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取 ...

  9. 洛谷P1368 均分纸牌(加强版) [2017年6月计划 数论14]

    P1368 均分纸牌(加强版) 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,纸牌总数必为 N 的倍数.可以在任一堆上取1张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取 ...

随机推荐

  1. ubuntu upgrade

    升级命令 虽然 apt-get 经常被人诟病,但实际上它还是个挺好用的软件包管理器.在 Ubuntu 14.04 以后的系统中,apt-get 相关的升级更新命令有四个: apt-get update ...

  2. resure挽救笔记本系统和一些相关的操作记录

    使用fedora23很久了, 但是感觉不是很流畅, 出现了一些不太稳定的体验, 所以想改到centos7. 因为centos7的很多东西 跟 fedora23 很相近了. 所以应该是无缝过渡 是选择3 ...

  3. hihoCoder week14 无间道之并查集

    并查集的基本使用 #include <bits/stdc++.h> using namespace std; ; int n, fa[N]; int cnt, tot; map<st ...

  4. cas4.2.4 登添加验证码

    看了很多添加验证码的博文,唯独没有4.24的 重点看第3条,其余的和别人博文大致相同 1.首先在cas工程的web.xml增加验证码功能的支持 <!-- 验证码功能 -->      &l ...

  5. Latex: extra alignment tab has been changed to cr

    参考: Error: extra alignment tab has been changed to \cr Latex: extra alignment tab has been changed t ...

  6. PHP中SESSION自定义会话管理器

    <?php class CustomSession implements SessionHandlerInterface{ private $link; private $lifetime; p ...

  7. 【Selenium2】【Python多线程】

    # all_tests_pro.py import unittest,time,os,multiprocessingimport HTMLTestRunner #查找多有含有thread的文件,文件夹 ...

  8. Java SE LinkedList的底层实现

    关于实现链表的底层原理 链表便于增删,不便于查询 package com.littlepage.linkedList; /** * 基于底层实现LinkedList * @author Littlep ...

  9. ASP.NET中Page_Load()与Page_Init()的区别

    Page_Init()事件:aspx初始化时触发,只执行一次,常用于页面初始化,并且执行在page_load之前,如果在aspx的程序中需要使用该方法,那么该方法的类需要继承 System.Web.U ...

  10. 《剑指offer》第四十六题(把数字翻译成字符串)

    // 面试题46:把数字翻译成字符串 // 题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻 // 译成"b",……,11翻译成&qu ...