2020.10.04蓝桥测试
文章目錄
- 加速輸入代碼
- A跑步訓(xùn)練
- B: 合并檢測
- C: 分配口罩
- D: 矩陣
- 卡特蘭數(shù)c++
- 卡特蘭數(shù)java
- E完美平方數(shù)
- F解碼
- G: 走方格
- H: 整數(shù)小拼接
- I: 超級膠水
- J: 網(wǎng)絡(luò)分析
加速輸入代碼
std::ios::sync_with_stdio(0);cin.tie(0);A跑步訓(xùn)練
這里可以口算:答案為:3880.
也可以寫程序模擬:
energy = 10000 min = 0 second = 0 while(energy):min += 1if min % 2 == 1:if energy > 600 :energy -= 600else: //這里就是/min -= 1second = energy/10energy = 0else:energy += 300if energy <= 0:break print(min*60+second)B: 合并檢測
#include <stdio.h> int main() {double min=101;//最少組數(shù) double zu,k,kmin;//zu當(dāng)前組數(shù),k組數(shù),kmin最小組數(shù) //假設(shè)99人1人感染//printf("%f\n",min);for(k=0;k<100;k++){zu=(100/k)+k;//printf("%f",zu);if(zu<min){min=zu;kmin=k;}}printf("min:%f\n",min);printf("kmin:%f",kmin);return 0; }
手寫:n/k+0.01nk—有n/k組,最壞0.01*n組有人,每組k次測試(每人都有一個組)
C: 分配口罩
package competition4;public class Distribution2 {public static int[] arr ={ 9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, 6604400, 4635000,10663400, 8087200, 4554000 };public static int min=Integer.MAX_VALUE;public static int sum=0;public static boolean[] visited=new boolean[arr.length];public static void main(String[] args){for(int x=0;x<arr.length;x++){sum +=arr[x];}dfs(0);System.out.println(min);}public static void dfs(int index){if(index>=sum/2){min = Math.min(min, Math.abs(sum-index*2));return;}for(int x=0;x<arr.length;x++){if(!visited[x]){visited[x]=true;dfs(index+arr[x]);visited[x]=false;}}} } 現(xiàn)在要把這所有的數(shù)據(jù)分配給兩家醫(yī)院,要使兩家醫(yī)院分配的口罩的差值最小,假設(shè)所有口罩為sum,那么一家醫(yī)院的口罩?jǐn)?shù)目會小于sum/2,一家會大于sum/2,設(shè)小于的為lesssum,大于的為greatersum,就有差值 = greatersum - lesssum = ( sum/2 - lesssum ) * 2 = ( greatersum - sum/2 ) * 2 所有題目就可以變相理解成:一個背包的大小為sum/2,現(xiàn)在我要把上面的口罩放入背包,求放入背包的最大值,求出了最大值就可以求出和sum/2的差值了,乘以2就是題目要求的值了[nb](https://blog.csdn.net/weixin_43846904/article/details/108974218)代碼 public class Main {public static void main(String[] args) {int sum = 0 , su = 0;int[] nums = {0, 9090400, 8499400, 5926800, 8547000, 4958200,4422600, 5751200, 4175600, 6309600, 5865200, 6604400, 4635000,10663400, 8087200, 4554000};for (int i = 0; i < nums.length; i++) {sum = sum + nums[i];}su = sum / 2;int[] dp = new int[su+1];for (int i = 1; i < nums.length; i++) {for (int j = su; j >= nums[i]; j--) {dp[j] = Math.max(dp[j] , dp[j-nums[i]] + nums[i]);}}System.out.println(2 * (su - dp[su]));} }D: 矩陣
第十一屆藍橋杯 ——矩陣目前最喜歡的題解,DP,i是第一行數(shù)量,j是第二行數(shù)量
DP進行方案數(shù)計數(shù),dp(i,j)表示前i個數(shù)選其中j個放入第一行,轉(zhuǎn)移策略如代碼中注釋所示。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=2500; int dp[maxn][maxn];//dp[i][j]表示前i個數(shù)放其中j個到第一行的方案數(shù); int main() {int i,j;memset(dp,0,sizeof(dp));dp[1][1]=1;//1肯定放到第一行(若放到第二行不可能比第一行大)//維護dp表的下三角即可(j>i的上三角無意義)//dp策略://1.數(shù)字放在第一行肯定可以,后面遍歷的數(shù)字越來越大;//2.數(shù)字放在第二行的條件是目前第一行的數(shù)字比第二行多,// 因為若目前少,則之后肯定得有更大的數(shù)放到第一行,與要求沖突 for(i=2;i<=2020;i++){for(j=1;j<=i;j++){dp[i][j]=(dp[i][j]+dp[i-1][j-1])%2020;//放到第一行; if(i-j<=j)//i-j為放第二行的數(shù)字?jǐn)?shù),即放第二行的數(shù)字?jǐn)?shù)小于第一行的數(shù)字?jǐn)?shù)的情況(此時i是正要遍歷的,所以等號可取) {//放到第二行; dp[i][j]=(dp[i][j]+dp[i-1][j])%2020;} }}printf("%d\n",dp[2020][1010]);return 0;} //1340【Java編程】Java中的大整數(shù)計算
java 大整數(shù)
卡特蘭數(shù)詳講
卡特蘭數(shù) — 計數(shù)的映射方法的偉大勝利
python實現(xiàn)篩法求素數(shù)
Python取整——向上取整、向下取整、四舍五入取整、向0取整
兩個有趣且特殊的Python取整:int()、整除"//"
python一定記得整除//
沒有數(shù)組,只能列表
catalan=[1,1,2]
catalan.append(y)
卡特蘭數(shù):
這個轉(zhuǎn)成python就能求,數(shù)組用list
a=[1,1,2]
加入用append
a.append(x)
卡特蘭數(shù)c++
#include <iostream> #include<bits/stdc++.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; long long catalan[2025]={0}; int main(int argc, char *argv[]) {catalan[0]=catalan[1]=1;catalan[2]=2;for(int i=3;i<100;i++){for(int j=0;j<i;j++){catalan[i]+=catalan[j]*catalan[i-1-j];//這是一種求法} }for(int i=0;i<100;i++){cout<<catalan[i]<<endl;} // cout<<0<<endl;return 0; }卡特蘭數(shù)java
這里一定要建一個,不然后面直接調(diào)用會空指針異常
import java.io.*; import java.math.*; class test {public static void main (String[] args) throws java.lang.Exception{BigInteger []a=new BigInteger[2025];a[0]=BigInteger.valueOf(1);a[1]=BigInteger.valueOf(1);a[2]=BigInteger.valueOf(2);for(int i=3;i<2020;i++){a[i]= BigInteger.valueOf(0);//這里一定要建一個,不然后面直接調(diào)用會空指針異常for(int j=0;j<i;j++){a[i]=a[i].add(a[j].multiply(a[i-1-j]));}}for(int i=0;i<101;i++){System.out.println(a[i]);}} }E完美平方數(shù)
【問題】
如果整個整數(shù)X本身是完全平方數(shù),同時它的每一位數(shù)字也都是完全平方數(shù),我們就稱X是完美平方數(shù)。 前幾個完美平方數(shù)是 0、1、4、9、100、144…
請你計算第 2020 個完美平方數(shù)是多少?
暴力搜索代碼:
///到目前已經(jīng)跑了2.5個點了
F解碼
#include <iostream> #include<bits/stdc++.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int isnumber(char a){if(a<='9'&&a>='0'){return 1;}return 0; } int main(int argc, char *argv[]) {char str[1000];cin>>str;char buf;int n=strlen(str);for(int i=0;i<n;i++){if(!isnumber(str[i])){buf=str[i];cout<<str[i];}else{for(int j=0;j<str[i]-'0'-1;j++){cout<<buf;}}}return 0; }G: 走方格
自己寫的遞歸代碼
#include <iostream> #include<bits/stdc++.h> using namespace std; #define maxn 10000 int dp[maxn][maxn]={0}; int zou(int m,int n){cout<<"m "<<m<<"n:"<<n<<endl;if(m==1&&n==1){dp[m][n]=1;return 1;}if(m%2==0&&n%2==0){dp[m][n]=0;return 0;}if(m==1){return 1;}if(n==1){return 1;}if(dp[m][n]!=0){return dp[m][n];}dp[m][n]=zou(m-1,n)+zou(m,n-1);return dp[m][n]; }int main(int argc, char *argv[]) {int m,n;cin>>m>>n;cout<<zou(m,n);cout<<endl;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cout<<dp[i][j]<<" ";}cout<<endl;}return 0; }H: 整數(shù)小拼接
我的第一遍代碼
https://www.cnblogs.com/sddr/p/13258916.html
典型的排列問題,直接上八皇后的模板,事實上所有的排列問題,都能用它解決,只需要在排列好兩個數(shù)的時候,進行拼接,比較大小,計數(shù)即可,唯一害怕的就是時間過不了
I: 超級膠水
應(yīng)該就是矩陣連乘
動態(tài)規(guī)劃:矩陣連乘問題(C++實現(xiàn),含備忘錄方法)
斜著遍歷代碼
J: 網(wǎng)絡(luò)分析
https://blog.csdn.net/weixin_43738764/article/details/109035131
總結(jié)
以上是生活随笔為你收集整理的2020.10.04蓝桥测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: systemd 服务管理编写
- 下一篇: ACM取余