POJ 2182 解题报告
Lost Cows
Time Limit: 1000 MS Memory Limit: 65536 KB
Description
N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering hole' and drank a few too many beers before dinner. When it was time to line up for their evening meal, they did not line up in the required ascending numerical order of their brands. 
Regrettably, FJ does not have a way to sort them. Furthermore, he's not very good at observing problems. Instead of writing down each cow's brand, he determined a rather silly statistic: For each cow in line, he knows the number of cows that precede that cow in line that do, in fact, have smaller brands than that cow. 
Given this data, tell FJ the exact ordering of the cows.
Input
* Lines 2..N: These N-1 lines describe the number of cows that precede a given cow in line and have brands smaller than that cow. Of course, no cows precede the first cow in line, so she is not listed. Line 2 of the input describes the number of preceding cows whose brands are smaller than the cow in slot #2; line 3 describes the number of preceding cows whose brands are smaller than the cow in slot #3; and so on.
Output
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3 1
大致题意:要求出给给定n头牛的位置排列,由Sample Output 2 4 5 3 1 可以看出 4 前面比其小的牛的 头数 为 1,5 前面比其小的牛的头数为 2 ,
以此类推,可以得到input数据 1 2 1 0 ,所以我们倒序求解,用树状数组+二分
代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
const int maxn=8005;
int n;
int num[maxn],C[maxn];
///树状数组
int lowbit(int x)
{
    return x&(-x);
}
int sum(int x)
{
    int ret=0;
    while(x>0)
    {
        ret+=C[x];
        x-=lowbit(x);
    }
    return ret;
}
void add(int x)
{
    while(x<n)
    {
        C[x]++;
        x+=lowbit(x);
    }
}
///开始二分查找
int Search(int x)
{
    int L=1,R=n,mid;
    while(L<R)
    {
        mid=(L+R)/2;
        int a=sum(mid);///统计num[mid]前比其小的牛的头数
        if(mid-1-a>=x)
            R=mid;
        else
            L=mid+1;
    }
    return L;
}
int main()
{
    while(~scanf("%d",&n))
    {
        for(int i=1;i<n;i++)///注意从num[1]输到num[4],因为第一头牛前比其
                           /// 小的牛的头数永远为0
        {
            scanf("%d",&num[i]);///输入每个位置上的牛其前面比它小的牛的头数
        }
for(int i=n-1;i>=0;i--)
        {
            int x=Search(num[i]);///对num[4]=0查找
            num[i]=x;
            add(x);
        }
        for(int i=0;i<n;i++)///输出num[0]至num[4]共5头牛的序号
        {
            printf("%d\n",num[i]);
        }
    }
    return 0;
}
POJ 2182 解题报告的更多相关文章
- POJ 1001 解题报告  高精度大整数乘法模版
		
题目是POJ1001 Exponentiation 虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...
 - poj分类解题报告索引
		
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
 - POJ 1003 解题报告
		
1.问题描述: http://poj.org/problem?id=1003 2.解题思路: 最直观的的想法是看能不能够直接求出一个通项式,然后直接算就好了, 但是这样好水的样子,而且也不知道这个通项 ...
 - POJ 1004 解题报告
		
1.题目描述: http://poj.org/problem?id=1004 2.解题过程 这个题目咋一看很简单,虽然最终要解出来的确也不难,但是还是稍微有些小把戏在里面,其中最大的把戏就是float ...
 - POJ 1005 解题报告
		
1.题目描述 2.解题思路 好吧,这是个水题,我的目的暂时是把poj第一页刷之,所以水题也写写吧,这个题简单数学常识而已,给定坐标(x,y),易知当圆心为(0,0)时,半圆面积为0.5*PI*(x ...
 - POJ 3414  解题报告!
		
原题: Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13227 Accepted: 5550 Special Jud ...
 - POJ 2411 解题报告
		
传送门:http://poj.org/problem?id=2411 题目简述 有一个\(W\)行\(H\)列的广场,需要用\(1*2\)小砖铺满,小砖之间互相不能重叠,问 有多少种不同的铺法? 输入 ...
 - 广大暑假训练1  E题 Paid Roads(poj 3411)  解题报告
		
题目链接:http://poj.org/problem?id=3411 题目意思:N个city 由 m 条路连接,对于一条路(假设连接Cityia和 Cityb),如果从Citya 去 Cityb的途 ...
 - POJ旅行商问题——解题报告
		
旅行商问题 总时间限制: 1000ms 内存限制: 65536kB 描述 某国家有n(1<=n<=10)座城市,给定任意两座城市间距离(不超过1000的非负整数).一个旅行商人希望访问每座 ...
 
随机推荐
- EntityFramework 简单入个门
			
任何一个和数据相关的系统里,数据持久化都是一个不容忽视的问题. 一直以来,Java 平台出了很多 NB 的 ORM 框架,Hibernate.MyBatis等等..NET 平台上,ORM 框架这一块一 ...
 - 故障排查实战案例——某电器ERP系统日志暴增
			
前言 本篇文章写在新春佳节前夕,也是给IT运维朋友一个警醒,在春节长假前请妥善体检自己的系统安心过个年. 千里之堤毁于蚁穴,一条看似简单的语句就能拖垮整个系统,您的SQL Server很久没体检了吧? ...
 - 【G】开源的分布式部署解决方案(二) -  好项目是从烂项目基础上重构出来的
			
分析目前项目结构 眼前出现这么一坨坨的文件夹,相信很多人已经看不下去了.是的,首先就是要把它给做掉. 按照这个项目文件夹的命名意图,大概可以划分如下: 1.Business:业务代码 2.Data:数 ...
 - pycharm 修改新建文件时的头部模板(默认为__author__='...')
			
pycharm 修改新建文件时的头部模板 默认为__author__='...' [省略号是默认你的计算机名] 修改这个作者名的步骤: 依次点击:File->Settings->Ed ...
 - 从Chrome源码看浏览器的事件机制
			
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
 - iOS自定义视图- SJTextView
			
需求: textView 需要placeholder用来提示输入 textView 要做字数限制 textView 禁止表情符号的输入 思考: 因为需求比较通用,便想通过自定义SJTextView来实 ...
 - C++编程练习(15)----“排序算法 之 归并排序“
			
归并排序 归并排序(Merging Sort)的原理: 假设初始序列含有 n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为1,然后两两归并,得到 [n/2] ([ x ] 表示不小于 ...
 - 详解 swift2.2  和 OC 的混编
			
前言: 我们在一些情况下,仅仅使用swift 是无法完成一个项目的,在swift项目中必要用到 OC 实现一些功能,比如,项目要使用一些第三方的框架,但这个第三方的框架却是用 OC 实现的,或者你的项 ...
 - java二维数组学习(转)
			
转自:http://blog.csdn.net/java1992/article/details/5808709,在这里谢过了 /* * java学习: * 二维数组的使用: */public cla ...
 - Dirty Flag 模式及其应用
			
之前在开发中就发现"dirty"是一种不错的解决方案:可以用来延缓计算或者避免不必要的计算.后来在想,这应该也算一种设计模式吧,于是搜索"Dirty设计模式", ...