題目學習——韓信點兵
1077 韓信點兵
時間限制:500MS 記憶體限制:65536K
Description
相傳漢高祖劉邦問大將軍韓信統御兵士多少,韓信答說,每3人一列餘1人、5人一列餘2人、7人一列餘4人、13人一列餘6人、 17人一列餘2人、19人一列餘10人、23人一列餘1人、29人一列餘11人。 劉邦茫然而不知其數。你呢? 你是一位優秀的程式設計師,請你幫劉邦解決這一問題。輸入格式
要求由鍵盤輸入A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h十六個數,分別代表每A人一列餘a、每B人一列餘b、每C人一列餘c、每D人一列餘D、每E人一列餘e、每F人一列餘f、每G人一列餘g、每H人一列餘h,其中A,B,C,D,E,F,G,H為互不相等的質數
輸出格式
輸出總兵士數,要求輸出滿足條件的最小的一個,但要滿足8種排法的每一種排法至少可排一列。(保證給的資料,有結果且計算的結果不會超過2的63次方)
輸入樣例
2 3 5 7 11 13 17 19 1 1 1 1 1 1 1 1
輸出樣例
9699691
暑假看了點數論,在網上看了些中國剩餘定理,回頭寫這道數學題/呲牙
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <string> #include <stack> #include <set> #include <map> #include <iostream> #include <bitset> #include <algorithm> using namespace std; #define MP make_pair #define PB push_back #define mst(a,b) memset((a),(b),sizeof(a)) #define TEST cout<<"*************************"<<endl #define rep(s,n,up) for(int i = (s); i < (n); i+=(up)) #define per(n,e,down) for(int i = (n); i >= (e); i-=(down)) #define rep1(s,n,up) for(int j = (s); j < (n); j+=(up)) #define per1(n,e,down) for(int j = (n); j >= (e); j-=(down)) typedef long long LL; typedef unsigned long long uLL; typedef pair<int, int> Pii; typedef vector<int> Vi; typedef vector<Pii> Vii; const int inf = 0x3f3f3f3f; const LL INF = (1uLL << 63) - 1; const double Pi = acos(-1.0); const int maxn = (1 << 16) + 7; const uLL Hashmod = 29050993; const double esp=1e-6; //#define local int main() { #ifdef local freopen("input.txt", "r", stdin); //freopen("output.txt","w",stdout); #endif //ios::sync_with_stdio(0); //cin.tie(); LL divisor[8],remainder[8],tot_m=1,sum=0; rep(0,8,1)scanf("%lld",&divisor[i]); rep(0,8,1)scanf("%lld",&remainder[i]); LL min_sum=divisor[0]+remainder[0]; rep(0,8,1){ tot_m*=divisor[i]; LL s=divisor[i]+remainder[i]; if(s>min_sum) min_sum=s; } rep(0,8,1){ LL m=1,temp_m=1; rep1(0,8,1){ if(j!=i) m*=divisor[j]; } temp_m=m; while(m%divisor[i]!=1) m+=temp_m; sum+=m*remainder[i]; } sum%=tot_m; while(sum<min_sum)sum+=tot_m; printf("%lld\n",sum); return 0; }
相關推薦
題目學習——韓信點兵
1077 韓信點兵 時間限制:500MS 記憶體限制:65536K Description 相傳漢高祖劉邦問大將軍韓信統御兵士多少,韓信答說,每3人一列餘1人、5人一列餘2人、7人一列餘4人、13人一列餘6人、 17人一列餘2人、19人一列餘10人、23
題目34 韓信點兵
已AC程式碼: #include<cstdio> using namespace std; int main() { int a, b, c, x, cont=0;
nyoj題目34:韓信點兵
韓信點兵 時間限制:3000 ms | 記憶體限制:65535 KB 難度:1 描述 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表
COGS——T 1786. 韓信點兵
一行 pan += exgcd 出了 problem 選擇 href n-2 http://www.cogs.pro/cogs/problem/problem.php?pid=1786 ★★★ 輸入文件:HanXin.in 輸出文件:HanXin.out 簡單
習題6 韓信點兵
oid 利用 .cn code imp == 參數 clas pub 題目如下 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人
韓信點兵
表示 logs span txt 數據 包含 bre cas 整數 韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次都只是掠一眼隊伍的排位就知道人數了。輸入包含多組數據,每組數據包含3個非負整數a,b,c,表示每種隊
p1044韓信點兵
open nbsp lose isp display div std AS space 作為循環語句和判斷語句的入門題,相信看我博客的肯定都會。 #include<iostream> using namespace std; int a,b,c,i
南陽oj 韓信點兵
方式 cout str std turn spa 的人 網上 中國 /*#include<iostream>using namespace std;int main (){ int a,b,c; int sum; cin> cin>>a>
2-2 韓信點兵
相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入包含多組資料,每組資料包含3個非負整數a,b,c,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告
深入淺出學演算法009-韓信點兵
4008: 深入淺出學演算法009-韓信點兵 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1886 Solved: 1549 Description 秦朝末年,楚漢相爭。有一次,韓信將1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退
18.12.02-C語言練習:韓信點兵
C語言練習:韓信點兵 題目說明:本題是中國經典問題,有多種解法,從數論課程角度看,是一個不定方程組,而且答案不唯一。 但這裡採用程式解法,使用的是暴力破解。列舉可能的解,然後根據條件判斷,滿足所有條件時的數字就是所求解。 程式: 1 #inc
(PTA練習)韓信點兵:C語言實現
在中國數學史上,廣泛流傳著一個“韓信點兵”的故事:韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數: 按從1至5報數,記下最末一個士兵報的數為1; 再按
韓信點兵(南陽理工)
描述 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的
Java韓信點兵演算法
相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(
2-2 韓信點兵
相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入包含多組資料,每組資料包含3個非負整數a,b,c,表示每種隊形排尾的人數(a<3,b<5,c<7
Problem H: 深入淺出學演算法009-韓信點兵
Description 秦朝末年,楚漢相爭。有一次,韓信將1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人,於是,韓信整頓兵馬也返回大本營。當行至一山坡,忽有後軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺聲震天。漢軍本來已十分疲憊,這時隊伍大譁。韓信兵馬到坡頂,見來
7-36 韓信點兵 (10 分)
在中國數學史上,廣泛流傳著一個“韓信點兵”的故事:韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數: 按從1至5報數,記下最末一個士兵報的數為1; 再按
演算法 韓信點兵 迴圈左移陣列元素
static void Main(string[] args) { ForeachLeft();//韓信點兵 } public static void ForeachLeft() { int[
韓信點兵 時間限制:3000 ms | 記憶體限制:65535 KB 難度:1 描述 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只
#include <stdio.h>int main (void){int a,b,c;scanf("%d%d%d",&a,&b,&c);for (int sum=10;sum<=100;sum++){if (sum%3==a&am
韓信點兵 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排
#include <stdio.h>int main() {int n,a,b,c,i=1,j;scanf("%d %d %d",&a,&b,&c);for(n=10;n<101;n++){if((n%3==a)&&(