Tsinsen A1504. Book(王迪) 数论,贪心

2023-11-02 06:10

本文主要是介绍Tsinsen A1504. Book(王迪) 数论,贪心,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:http://www.tsinsen.com/A1504
A1504. Book(王迪)
时间限制: 1.0s   内存限制:256.0MB   Special Judge
总提交次数: 359   AC次数: 97   平均分: 43.76
将本题分享到:
   
查看未格式化的试题    提交    试题讨论
试题来源
2013中国国家集训队第二次作业
问题描述
Wayne喜欢看书,更喜欢买书。
  某天Wayne在当当网上买书,买了很多很多书。Wayne有一个奇怪的癖好,就是第一本书的价格必须恰为X,而之后买的每一本书,若是比上一本更昂贵,则价格最多多A元;若是比上一本更便宜,则价格最多少B元。
  Wayne心血来潮,一口气买了N本书,但他记不得每本书的价格了,只记得总价格是M。Wayne于是很想知道一种可能的书价分布。为了简化问题,我们假定书价的定义域是整数,且每本书与上一本书的价格差,要么恰为+A,要么恰为-B。
  只要给出任意一个合法的书价序列就算正确。
输入格式
第一行一个正整数N。
  第二行四个整数依次是X,A,B,M。
输出格式
输出一行N个整数,用空格隔开。数据保证有解。
样例输入
4
10 1 2 37
样例输出
10 11 9 7
数据规模和约定
对于5%的数据,满足N = 1。
  对于另外25%的数据,满足A = B = 1, N <= 100。
  对于另外10%的数据,满足A, B <= 5, N <= 100。
  对于另外20%的数据,满足N <= 1000。
  对于100%的数据,满足1 <= A, B <= 10^6,|X| <= 10^6,N <= 10^5,M可用带符号64位整型存储。

 

提交    试题讨论
题解:
数论+贪心
以下是王迪的解题报告:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 //LL prey[100010];
 5 bool vis[100010];
 6 LL read()
 7 {
 8     LL s=0,fh=1;char ch=getchar();
 9     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
10     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
11     return s*fh;
12 }
13 int main()
14 {
15     LL n,x,a,b,m,k,i,j,lp;
16     n=read();
17     x=read();a=read();b=read();m=read();
18     k=n*x+((n-1)*n)/2*a;//假设全部增加a的总钱数.
19     k-=m;//用 全部增加a的总钱数 减去 实际花费的钱数 得到有多少钱从 +a 转化为 -b ,也就是减去(a+b).
20     k/=(a+b);//计算出有多少书进行了从 +a 转化为 -b.
21     //因为改变每一个差量,所影响的数的个数为(0,1,2...n-1)中的一个.所以,我们只需要求出k可以由 0~(n-1) 中的哪一些组成.
22     memset(vis,false,sizeof(vis));
23     for(i=n-1;i>=0;i--)//倒着去找,一定保证k可以组成.(有点类似倍增LCA的倒着找的原理)
24     {
25         if(k>=i)
26         {
27             k-=i;
28             vis[i]=true;//标记为true的代表要转换为-b.
29             if(k==0)break;
30         }
31     }
32     /*双重循环(60分)
33     for(i=1;i<=n;i++){prey[i]=x;x+=a;}
34     for(i=1;i<=n-1;i++)
35     {
36         if(vis[i]==true)
37         {
38             for(j=n;j>=n-i+1;j--)prey[j]-=(a+b);
39         }
40     }
41     for(i=1;i<=n;i++)printf("%lld ",prey[i]);*/
42     printf("%lld",x);
43     for(i=n-1;i>=1;i--)
44     {
45         if(vis[i]==true)//若要转化为-b,就要在原先的x的基础上加上-b(即减去b).
46         {
47             x-=b;
48         }
49         else
50         {
51             x+=a;
52         }
53         printf(" %lld",x);
54     }
55     fclose(stdin);
56     fclose(stdout);
57     return 0;
58 }

 

转载于:https://www.cnblogs.com/Var123/p/5374553.html

这篇关于Tsinsen A1504. Book(王迪) 数论,贪心的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

POJ2010 贪心优先队列

c头牛,需要选n头(奇数);学校总共有f的资金, 每头牛分数score和学费cost,问合法招生方案中,中间分数(即排名第(n+1)/2)最高的是多少。 n头牛按照先score后cost从小到大排序; 枚举中间score的牛,  预处理左边与右边的最小花费和。 预处理直接优先队列贪心 public class Main {public static voi

POJ2247数论

p = 2^a*3^b*5^c*7^d 求形如上式的第n小的数。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.u

ural 1820. Ural Steaks 贪心

1820. Ural Steaks Time limit: 0.5 second Memory limit: 64 MB After the personal contest, happy but hungry programmers dropped into the restaurant “Ural Steaks” and ordered  n specialty steaks

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数