拉题链接  https://vjudge.net/contest/430219#overview

原题链接  https://codeforces.com/problemset/problem/340/C

前言

cf 1600的题, 直接拿来给大一的做, 感觉有亿点点难, 这是个纯数学题, 我用的排列组合方法推导

题目

题意(其实我觉得还是看上边的Note好理解)

给n个数(分别为a1, a2 ...... an-1, 把这n个数全排(共Ann 个序列)一遍, 对于每个序列, 值=每个|ai - ai-1|之和(i = 1~n) , 其中, i = 0时, 为|a1-0|

然后, 将这n的阶乘个式子的值加起来, 先用res表示, 最后输出res/g  和  Ann / g  (g为res与Ann 最大公因数)

题解

硬做会超时, 要想着归纳

一  : 当对于一种序列, 比如2 3 5(注意5在最后面): |2 – 0| + |3 – 2| + |5 – 3| = 5; 5只出现1次, 其余2 3都出现2次,

  即: 一种序列中最后面的数出现一次, 前n-1个数出现2次

  ====> 在这所有排列中, 每个数出现总次数 =  2 * (n的阶乘) - (n-1的阶乘)

  对式子的解释: 2 * (n的阶乘): 所有数全排的种类数 * 一种排列出现两次;  (n - 1的阶乘): 当这个数在最后时, 前面的数全排

二  : 先把绝对值拆开, 比如 |2 – 0| + |3 – 2| + |5 – 3| = 2 + 3 - 2 + 5 - 3 ,最大值5一定是正的, 3与2搭配时-->3为正; 3与5搭配时-->3为负

  即: 一个数与比它大的数搭配(挨着,不分前后)时, 它为负, 与比它小的数搭配时, 它为正

  ====> 设大于n的数有m个, 减去一个数的次数(为负的次数) = 2 * m * (n - 1的阶乘) 

  对式子的解释: 2为该数与另一个数的两种排列, m: 从m个比它大的数挑一个, 也就是Cm1 ;  (n - 1的阶乘) : 该数与另一个数绑定后全排

重点来了, 结果快来了


这个数最后是加减了多少倍呢?

每个数出现的次数

= 正的次数 - 负的次数

= ( 出现的总次数 -  负的次数 )  -  负的次数 

= 第一个式子 - 2 * 第二个式子

= [2 * (n的阶乘) - (n-1的阶乘)] - [2 * ( 2 * m * (n - 1的阶乘) )]

那结果 = [ 2 * (n的阶乘) - (n-1的阶乘) - 2 *  2 * m * (n - 1的阶乘)  ]    和    n的阶乘   ~~~(约去n-1的阶乘)~~~

= 2 * n - 1 - 4 * m      和         n

m = 大于该数的个数, 对数组小到大排序后(下标从0开始), 大于该数的个数 = n - i - 1, 带入上式即可

(化简 = 2n-1-4n+4i+4 = 4i-2n+3)

代码

#include <iostream>
#include <algorithm> using namespace std; typedef long long ll; const int N = 1e5 + 10; ll res = 0, fenmu = 1;
ll a[N]; ll gcd(ll a, ll b)
{
return b? gcd(b, a % b): a;
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i ++)
scanf("%lld", &a[i]); sort(a, a+n);
for(int i = 0; i < n; i ++)
res += (2 * n - 1 - 4 * (n - i - 1)) * a[i];
// res += (4i-2n+3) * a[i];
int g = gcd(res, n);
cout << res/g << ' '<< n/g << endl;
return 0;
}

C. Tourist Problem 2021.3.29 晚vj拉题 cf 1600 纯数学题的更多相关文章

  1. C. Tourist Problem

    http://codeforces.com/problemset/problem/340/C 赛时没想出赛后却能较快想出深深的教育自己做题一定要静下心来,不要轻易放弃,认真思考,不要浮躁着急,不要太容 ...

  2. codeforces 340C Tourist Problem(公式题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Tourist Problem Iahub is a big fan of tou ...

  3. Codeforces Round #198 (Div. 2) C. Tourist Problem

    C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. Codeforces Round #198 (Div. 2) C. Tourist Problem (数学+dp)

    C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. CodeForces - 340 C - Tourist Problem

    先上题目: A - Tourist Problem Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  6. 2021.10.29 数位dp

    2021.10.29 数位dp 1.数字计数 我们先设数字为ABCD 看A000,如果我们要求出它所有数位之和,我们会怎么求? 鉴于我们其实已经求出了0到9,0到99,0到999...上所有数字个数( ...

  7. 2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)

    2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS) 题意: 给一张n*n的图,起点为A,终点为 B,求从A到B转弯次数最少为多少. 分析: 是否存在 ...

  8. 2021.12.21 eleveni的刷题记录

    2021.12.21 eleveni的刷题记录 0. 有意思的题 P6701 [POI1997] Genotype https://www.luogu.com.cn/problem/P6701 状压优 ...

  9. 2021.12.19 eleveni的刷题记录

    2021.12.19 eleveni的刷题记录 0. 本次记录有意思的题 0.1 每个点恰好经过一次并且求最小时间 P2469 [SDOI2010]星际竞速 https://www.luogu.com ...

随机推荐

  1. 5月11日 python学习总结 子查询、pymysql模块增删改查、防止sql注入问题

    一.子查询 子查询:把一个查询语句用括号括起来,当做另外一条查询语句的条件去用,称为子查询 select emp.name from emp inner join dep on emp.dep_id ...

  2. 同一局域网ping ip 失败(可能是你的路由器坑了你)

    事件起源:手机需要通过fiddler代理抓包 一顿操作猛如虎,手机输入ip+端口,芭比q了,连接不上.. 解决思路: 一.保证双方处于同一局域网内 二.查看电脑配置,找到 防火墙,关闭防火墙,再试 三 ...

  3. 实现一个cache

    实现一个LRU cache,定义get函数和set函数,cache是固定长度的,当cache已经满,那么就删除一直没有被更新的记录,然后将新的记录放进去. LRU: 全称是Least Recently ...

  4. Python_Learn,Python背景的介绍

    一.计算机程序的运行方式 机器语言编写的程序可以在计算机上直接运行,而汇编语言和高级余语言写的程序(通常称为源程序)则需要"翻译"成机器语言才能运行.源程序"翻译&quo ...

  5. [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业

    [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj   bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...

  6. List、Set、Map详解及区别

    一.List接口 List是一个继承于Collection的接口,即List是集合中的一种.List是有序的队列,List中的每一个元素都有一个索引:第一个元素的索引值是0,往后的元素的索引值依次+1 ...

  7. 在虚拟机里面安装mysql

    https://dev.mysql.com/downloads/repo/yum/ 首先到网站里面下载 mysql80-community-release-el7-3.noarch.rpm 通过xft ...

  8. kafka producer 源码总结

    kafka producer可以总体上分为两个部分: producer调用send方法,将消息存放到内存中 sender线程轮询的从内存中将消息通过NIO发送到网络中 1 调用send方法 其实在调用 ...

  9. 在 VC 下清空键盘缓冲区的方法

    控制台窗口是有输入缓冲区的,当你按键后程序没有来得及处理,系统会将按键缓存,等到程序获取按键的时候,系统会把缓冲区里面之前的按键返回. // 调用控制台 API,清空之前缓冲区内的所有按键. Flus ...

  10. kbengine开源分布式游戏服务端引擎

    一款开源的支持多人同时在线实时游戏的服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D.OGRE.Cocos2d.HTML5,等等)技术结 ...