1. 程式人生 > >【演算法競賽】:分數拆分

【演算法競賽】:分數拆分

題目

輸入正整數K,找到所有的正整數x>=y,使得1/k = 1/x+1/y
樣例輸入:
2
12
樣例輸出:
這裡寫圖片描述

思路:

對等式進行化簡,然後得到K,x,y的一個關係式:
x = k*y/(y-k);
然後對y進行遍歷,y肯定是大於k小於等於2*k,這個可以通過那個公式判斷
然後遍歷時候算出x,如果算出X為整數切X大於等於Y,則輸出結果 = =

程式碼

// author:seen
/// 演算法競賽_分數拆分
#include <iostream>
using namespace std;
int main(){
    int k;
    while
(cin>>k &&k){ for(int y=k+1;y<=2*k;y++){ float x= (float)k*y/(y-k); int temp =(int)x; //判斷X是否為整數的一個方法 if(temp==x &&x>=y){ cout<<k<<" "<<x<<" "<<y<<endl; } } } }

執行截圖:

這裡寫圖片描述

注:算出來的那三列數分別對應K, x, y

相關推薦

演算法競賽:分數拆分

題目 輸入正整數K,找到所有的正整數x>=y,使得1/k = 1/x+1/y 樣例輸入: 2 12 樣例輸出: 思路: 對等式進行化簡,然後得到K,x,y的一個關係式: x

BSOJ1197 -- 演算法競賽任務安排 1/2

1197 -- 【演算法競賽】任務安排  Description   有N個任務排成一個序列在一臺機器上等待執行,它們的順序不得改變。機器會把這N個任務分成若干批,每一批包含連續的若干個任務。從時刻0開始,任務被分批加工,執行第 i 個任務所需的時間是 Ti。另外,在每批任務開始

演算法競賽進階指南0x02CH0201-費解的開關

本題目最關鍵的問題是關於狀態壓縮,利用二進位制來判斷狀態 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int pic[6][6];//儲存輸入 int tmppic

演算法競賽進階指南字首和BZOJ1218鐳射炸彈

題目是二維字首和,N^2完成維護 S[i,j]=S[i-1,j]+S[i,j-1]+A[i,j],簡化操作資料直接輸入S中 題目中要注意目標的座標,往往被包含在x+1,y+1之中 #include<cstdio> #include<algorithm> using namespa

演算法競賽進階指南POJ1845Sumdiv

本題目是一道數論的綜合題目,主要的一個點就是利用二分法來求等比數列的和,其餘的點就是唯一分解定理分解質因數,還有就是快速冪 A^B約數和\(=(1+p_{1}+p_{1}^{2}+\cdot\cdot\cdot+p_{1}^{c1})*(1+p_{2}+p_{2}^{2}+\cdot\cdot\cdot+p

演算法競賽進階指南POJ3889分形之城

本道題目是利用遞迴,去把最後等級1的某個位置求出來,然後回溯向上去把上一等級的相應位置求出來,一般是右下角向左上右上左下擴充套件,根據旋轉的規律回溯計算 城市的規劃在城市建設中是個大問題。不幸的是,很多城市在開始建設的時候並沒有很好的規劃,城市規模擴大之後規劃不合理的問題就開始顯現。而這座名為 Fracta

演算法競賽進階指南POJ2018Best Cow Fences

二分法查詢答案 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; double a[100005],b[100005],

演算法競賽進階指南BZOJ3032七夕祭

兩次環形分牌 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; const int maxn=100010; int x[maxn],y[maxn]; long lon

演算法競賽進階指南逆序對POJ2299Ultra-QuickSort

求逆序對需要用到的演算法是歸併排序,在排序的同時進行計算逆序對,改題目求冒泡的次數,實際上就是最少逆序對的個數,最小個數的話利用歸併排序中進行歸併的時候,如果左半邊有大於右半邊最小的值,能麼從該位置到左邊最後一個都與右半邊第一個構成逆序對,逆序對個數加上左邊個數,歸併排序利用遞迴,所以在本次排序的時候,左右半

演算法競賽進階指南貪心POJ3128Radar Installation

本題目是一道經典的覆蓋問題關於本題目要注意的問題是其中的變數有陷阱,就像做數學題一樣另外就是關於覆蓋的問題,因為是貪心,首先要去求出來每個建築所需要覆蓋的監控的區間其次就是對區間的左側進行排序,還需要一個pos進行維護當前安裝監控的位置,一般是區間右側每次安裝需要看pos和l[i]的關係,如果pos<[

演算法競賽進階指南HDOJ4699 Editor

進階指南中給了一個好玩的方法,對頂棧,與對頂堆有這異曲同工之妙,涉及左側棧的操作,都需要對儲存最大字首和的陣列進行維護 #include<iostream> #include<stack> #include<algorithm> using namespace std;

演算法競賽進階指南POJ2559 Largest Rectangle in a Histogram

重點是單調棧的使用,在這裡簡要地分析一下單調棧 單調棧演算法,時間複雜度是O(n),關鍵思想在於及時排除不可能的選項,保持策略集合的高度有效性和有序性在該題目中如果想要獲得最大子矩形的面積,我們可以嘗試每個矩形的高度作為最終矩形的高度,並且把寬度擴充套件到右邊界得到一個矩形,如果下一個矩形的高度比上一個小,

演算法競賽進階指南單調佇列CH1201最大子序列和

輸入一個長度為n的整數序列,從中找出一段不超過m的連續子序列,使得整個序列的和最大。下標位置遞增、對應的字首和S的值也遞增的序列為最優的選擇策略我們掃描i,對i進行如下操作1.判斷隊頭與i的距離與m的關係來決策是否出隊2.更新答案3.刪除隊尾決策使整個佇列單調 n=6 m=4輸入資料:1 -3 5 1 -2

演算法競賽進階指南CH1301鄰值查詢(set)

給定一個長度為 n 的序列 A,A 中的數各不相同。對於 A 中的每一個數 \(A_{i}\),求:\(min(1\leq j<i)\left | A_{i}-A_{j} \right |\) 以及令上式取到最小值的 j(記為 \(P_{i}\))。若最小值點不唯一,則選擇使 \(A_{j}\)

演算法競賽入門經典例題6-4 uva11988

題目連結 題意 你在用鍵盤打字,但是“home”和“end”鍵會是不是自動按下,“home”會使游標移動到文字開頭,“end”會使游標移動到文字最後。你打字時沒開顯示器,當你開啟顯示器後,呈現在你眼前的是一段悲劇的文字。 輸入包含多組資料,每組資料

演算法競賽入門經典第一章課後習題

今天心血來潮,決定將《演算法競賽入門經典》裡面的課後題,進行詳解,先來第一發。 習題1-1 平均數(average)        對於第一題,相信即便是第一次接觸程式設計的人。只要稍稍瞭解一下C的語法,也可輕易解決這一題。所以我也不多說了直接上程式碼。 #include

[分享]ECC加密演算法入門介紹 演算法乾貨

前言 同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)也屬於公開金鑰演算法。目前,國內詳細介紹ECC的公開文獻並不多(反正我沒有找到)。有一些簡介,也是

演算法加一

/* 給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。 最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例 1: 輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入陣列表示數字 123。 示例

演算法學習基於“平均”的隨機分配演算法(貪婪,回溯),以按平均工作量隨機分配單位為例

一、背景介紹   在工作中,遇到一個需求:將 N 個單位隨機分配給 n 個人,其中每個單位有對應的工作量,分配時要儘量按工作量平均分給 n 個人,且人員的所屬單位不能包括在被分配的單位中(N >= n)。例如:有三個部門分給兩個人([A]屬於部門2和[B]屬於部門3),部門1的

演算法基礎字串的全排列演算法

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 這道題是劍指offfer中一道