1. 程式人生 > >zzuli-OJ-小明的疑惑(數論)

zzuli-OJ-小明的疑惑(數論)

題意:給你n個數,從中選擇m個數使得方差最小

題解:

剛開始我是這麼想的,因為方差的作用是偏離平方的均值,也就是反應這個序列是不是穩定的,所以我就想首先按照從小到大排序,然後直接用 這個選擇的 m 個數,最大值減去最小值,也就是a[i] - a[i-m+1],所以我們只需要找到這個差值最小的就行了,但是很不幸WA了,不知道什麼情況,所以我又換了一種方法,就是將求方差那個公式展開,因為最後還要乘以 m ,所以最開始的時候就不用乘以 m 了: 

s2=(x1k)2+(x2k)2+.......+(xnk)2n(x21+x22+...+x2n)2k(x1+x2+...+xn
)+nk2
k=(x1+x2+...+xn)n:s2=(x21+x22+...+x2n)(x1+x2+...+xn)2n

就可以寫程式了, 我們就只需要找最小的s^2就行了; 
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 100005
typedef long long ll;
ll a[maxn];
ll gcd(ll x,ll y)
{
	if(y==0)
		return x;
	return gcd(y,x%y);
}
int  main()
{
	ll n,m,i,j,ans,sum,start,res,x,y,tmp;
	while(scanf("%lld%lld",&n,&m)!=EOF)
	{
		sum=0;res=0;
		for(i=1;i<=n;i++)
			scanf("%lld",&a[i]);
		if(m==1)
		{
			printf("0/1\n");
			continue;
		}
		sort(a+1,a+n+1);
		for(i=1;i<=m;i++)
		{
			sum+=a[i];
			res+=a[i]*a[i];
		}
		ans=res*m-sum*sum;
		for(i=m+1;i<=n;i++)
		{
			res-=a[i-m]*a[i-m];
			res+=a[i]*a[i];
			sum-=a[i-m];
			sum+=a[i];
			ans=min(ans,res*m-sum*sum);
		}
		tmp=gcd(ans,m*m);
		x=ans/tmp;
		y=m*m/tmp;
		printf("%lld/%lld\n",x,y);
	}
}


相關推薦

zzuli-OJ-疑惑數論

題意:給你n個數,從中選擇m個數使得方差最小 題解: 剛開始我是這麼想的,因為方差的作用是偏離平方的均值,也就是反應這個序列是不是穩定的,所以我就想首先按照從小到大排序,然後直接用 這個選擇的 m 個數,最大值減去最小值,也就是a[i] - a[i-m+1],所以我

zzuli oj 1163: 親和串字串

#include<bits/stdc++.h> using namespace std; int main() { string a,b; while (cin>>a>>b){ if (a.size()

2018.10.24【校內模擬】 C 的序列數論連結串列

傳送門 解析: 本來可以拿80pts80pts80pts暴力的 然後unorderedmap−&gt;mapunordered\text{ }map-&gt;mapunorderedmap−>map,−20pts-20pts−20pts

牛客網練習賽30 K的疑惑 思維

題意 中文題意,主要是i,j,ki,j,ki,j,k可以重複。 思路 可以看出,dis(i,j)dis(i,j)dis(i,j) 的距離不是0就是1,那麼我們要找到其實就是在兩堆集合裡面,一個集合裡面所有的值都是1,另一個集合裡面所有的值都是0,之後在1這個集合

51nod-1616 最集合數論

基準時間限制:1 秒 空間限制:131072 KB 分值: 80 難度:5級演算法題  收藏  關注 A君有一個集合。 這個集合有個神奇的性質。 若X,Y屬於該集合,那麼X與Y的最大公因數也屬於該集合。 但是他忘了這個集合中原先有哪些數字。 不過幸運的是,他

打表

Description 小明比較喜歡研究各種各樣的數字,有一天他發現了一類數,並將這些數命名為“小明數”,下面是“小明數”的定義:數字的二進位制由連續的k個1和連續的k-1個0組成。比如:1(二進位制為:1,k=1)6(二進位制為:110,k=2)120(二進位制為:1111000,k=4)496(二進位制為

zzuli OJ 1109: 數根函式專題

Description  輸入一個正整數,輸出該數的數根。數根可以通過把一個數的各個位上的數字加起來得到。如果得到的數是一位數,那麼這個數就是數根。如果結果是兩位數或者包括更多位的數字,那麼再把這些

zzuli OJ 1096: 水仙花數函式專題

Description 春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的:  “水仙花數”是指一個三位數,它的各位數字的立方和等於其本身,比如:153=13+53+3

UVA 10042 Smith Numbers數論

sizeof ret col 保存 進行 uva nal isp published Smith Numbers Background While skimming his phone directory in 1982, Albert Wilansky, a ma

Redis 白指南- 事務、過期、消息通知、管道和優化內存空間

如何 入門 系列 code 場景 消息 運算 封裝 c# Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間 簡介   《Redis 小白指南(一)- 簡介、安裝、GUI 和 C# 驅動介紹》 講的是 Redis 的介紹,以及如何在 Windows

[luoguP1069] 細胞分裂數論

def getc urn ostream lin 優先級 org return 優先 傳送門 分解質因數,不說了 這題坑了我2個多小時 教訓 不熟悉位運算的優先級一定要加括號!!!! #include <cstdio> #include &

分享之測試WebService工具 STORM

pen 方法 gles edit 編輯框 mage utl 工具 按鈕 http://www.cnblogs.com/yhuang/archive/2012/04/04/share_storm.html 最近的項目中,一直要使用到WebService,為了測試自己編寫的We

UVA571 - Jugs數論

osi com con post roc defined ucc sof mic UVA571 - Jugs(數論) 題目鏈接 題目大意:給你A和B的水杯。給你三種操作:fill X:把X杯裏面加滿水。empty X:把X杯中的水清空。pou

sench touch 自定義圖標

found conf custom cmd svg logs 頁面 一個 會有 自定義圖標的方法 Sencha touch自帶圖標有限,有時需要自己添加圖標。下面介紹自定義圖標的方法: 首先需要生成圖標字體。有許多網站提供在線生成圖標字體的功能,比如IcoMoon,通過這個

LibreOJ #6220. sum數論

define onclick const 全部 註意 img long long %d mes   題目大意:在數組中找出一些數,使它們的和能被n整除   這題標簽是數學,那我就標題就寫數論好了...   顯然如果數組中有n的倍數直接取就行。   那假設數組中沒有n的

bzoj1257: [CQOI2007]余數之和sum數論

img const ima left class -1 找到 一段 max   非常經典的題目...   要求      則有   實際上   最多只有2*sqrt(k)種取值,非常好證明   因為>=sqrt(k)的數除k下取整得到的數一定<=sq

我的微信程序入門1

app 用戶 註冊 教程 微信公眾平臺 聯網 互聯 一個 .com 作為互聯網行業的一員,我們需要一個可以快速接受新鮮事物的腦袋。很高興的是,我有一半這樣的腦袋。 今年的互聯網行業,出現了一個生猛的新軍,那便是“微信小程序”了。 微信是近幾年最熱門的軟件應用(農藥也是)。而

程序學習程序邏輯層之註冊頁面

其他 nor stop 默認 pat 標題 pre 開啟 開始 小程序學習(四)小程序邏輯層之註冊頁面 註冊頁面(Page) 小程序頁面的註冊,是通過 Page() 函數來完成的。接受一個 object 參數,指定頁面的初始數據,生命周期、事件處理函數等。 object

復習3

nat con 復習 填充 isa filter from 長度 conn 1、數組    reverse() 排倒序    splice() 刪除某個元素返回數組    connat()    substr() (m,n) n長度    substring()

關於女神SQLite的疑惑1

sqlite 林世霖 嵌入式數據庫 SQLite的大名就不做廣告了,反正嵌入式設備、手機等領域中,凡是用到數據庫的地方她幾乎都是主角。這個系列的推文,就來總結日常使用時我們都可能會遇到一些問題。1. 問:怎麽創建一個自動遞增的域?1. 答:對於這個問題,簡短的回答是:任何一個被聲明為 INTEGE