Lost Cow

2024-02-13 05:20
文章标签 cow lost

本文主要是介绍Lost Cow,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:有n头牛,每头牛都有自己的编号,给你n-1个数,从第二头牛开始,表示第i头牛之前比第i头牛编号小的有几个,然后求出每头牛的编号。
在这里插入图片描述
在这里插入图片描述
代码参考 《算法竞赛从入门到进阶》
最初不太理解findpos()和add(x,-1)什么意思,现在好像稍微懂了点(见注释),先把现在理解的记录一下。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <queue>
#define ll long long
#define lowbit(x) ((~x+1)&x)
using namespace std;
const int N = 1e3+10;
int n,m,tree[N],a[N];
int pre[N];void add(int x,int d) {while(x<=n) {tree[x]+=d;x+=lowbit(x);}
}int sum(int x) {int sum=0;while(x>0) {sum+=tree[x];x-=lowbit(x);}return sum;
}int findpos(int x) {int l=1,r=n;while(l<r) {int mid = (l+r)>>1;if(sum(mid)<x) l=mid+1;else r = mid;}return l;
}int main() {cin>>n;int ans[N];pre[1] = 0;for(int i=2; i<=n; i++) {cin>>pre[i];}for(int i=1; i<=n; i++) {tree[i] = lowbit(i);}for(int i=n; i>0; i--) {int x = findpos(pre[i]+1);//找到某个数x,使得tree[x]==pre[i]+1,表示x之前比x大的数有pre[i]+1个,pre加一是因为tree是从1开始包括自己本身add(x,-1);//tree-1表示x从1-n中去除,相当于没有了x编号//例如 输入5 1 2 1 0,从i=n开始1之前比1小的有1个(本身),所以最后一个就是1,就把1从1-5中去掉,2之前比2晓得就只有本身,所以tree[2]--,3之前比3小的就只有2,3,tree[3]--;ans[i] = x;}for(int i=1; i<=n; i++) {cout<<ans[i]<<endl;}return 0;
}

这篇关于Lost Cow的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704586

相关文章

【POJ】3660 Cow Contest floyd(可以拓扑排序?)

Cow Contest Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6925 Accepted: 3792 Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating i

BFS —— POJ 3278 Catch That Cow

对应POJ题目:点击打开链接 Catch That Cow Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 54686 Accepted: 17096 Description Farmer John has been informed of the location of a fugitive cow

USACO Section 2.3 Cow Pedigrees

题意: N个节点  深度为K  的正则二叉树  求  树有几种形态 思路: 一开始以为是数学题…  看了byvoid的题解才知道是dp… 每棵树由根节点、左子树、右子树构成  由此得状态转移  树=左子树*右子树 节点数和深度是影响答案的属性  所以令dp[i][j]表示i个节点深度在j以内的树的形态数 深度在j以内的树又两个深度在j-1以内的树和一个根节点构成 设左子树k个节

Codeforces 283. B. Cow Program记忆化搜索

output standard output Farmer John has just given the cows a program to play with! The program contains two integer variables, x and y, and performs the following operations on a sequence a1, a2, ..

【POJ3270】【Cow Sorting】

Cow Sorting Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 6411 Accepted: 2488 Description Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each

【POJ3268】【Silver Cow Party】【反向dij】【sizeof失效】

Silver Cow Party Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 15522 Accepted: 7039 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going

POJ 1985 Cow Marathon(树的直径)

题目链接 题意:给出一棵树,求出这个树的直径 解答:任选一点进行dfs,会找到一个最远点s,在以这个最远点s进行dfs,会找到一个最远点是t,那么s-t就是树的直径。 //#include<bits/stdc++.h>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace

Lost connection to MySQL server at 'reading initial communication packet', system error: 0

连接MySQL提示: ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 这是由于库文件初始化连接MySQL时连接失败引起的。 导致此错误的原因有: 1.服务器为正常启动的; 2.mysql设置文件中“bind-address”

POJ 2184 Cow Exhibition (处理负值的01背包)

【题目链接】:click here~~ 【题意】: 题意:给定n头牛的聪明指数S和幸福指数F,如果存在S的和TS>=0与F的和TF>=0同时成立时, 输出TS与TF的和的最大值sum,否则,输出0。 【思路】:      转化问题,求s和为某个固定值时候最大的f和值,然后遍历这些所有的s和以及对应的f和值,求出总和总和最大的那个。      那么这样就是一个0-1背包问题,可以把s值理解

poj3278--Catch That Cow

Catch That Cow Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 43680 Accepted: 13615 Description Farmer John has been informed of the location of a fugitive cow and wants to catch h