日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

武汉工程大学2020GPLT选拔赛(上)

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 武汉工程大学2020GPLT选拔赛(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

比賽鏈接

A L1-1 I LOVE WIT

模擬,每個字母單獨一行,前面的空格按規律輸出。可以直接輸出,也可以模擬過程

#include<bits/stdc++.h> using namespace std; int main(){string s="I LOVE WIT";for(int i=0;i<s.size();++i){for(int j=1;j<=i;++j){cout<<" ";}cout<<s[i]<<endl;}return 0; }

B L1-2 單位換算

根據題目總結公式:
sum=n122.54*10
注意如果不是整數就保留一位小數,否則不留小數

#include<bits/stdc++.h> using namespace std; int main(){int n;cin>>n;double sum=1.0*n*12*2.54*10;int w=sum;if(fabs(sum-w)<=0.001)printf("%d",w);else{printf("%.1lf",sum);}return 0; }

C L1-3 Pokémon

根據題目要求輸出運算
cv對應著相應的概率,再看f等于0或1,乘以對應的概率,直接運算就可以。
注意讀入與輸出時都有百分號,特別處理一下

#include<bits/stdc++.h> using namespace std; double a[7]; int main() {int cv,f;for(int i=0;i<=6;++i){cin>>a[i];char ch=getchar();}cin>>cv>>f;if(f==1){a[cv]*=0.01;}else{a[cv]*=0.99;}printf("%.2lf",a[cv]);cout<<"%";return 0; }

D L1-4 顛倒陰陽

我們先分析分析有多少步驟
首先當然是將n轉化成2進制形式
然后取反
然后高低位翻轉
最后轉發成十進制

中間兩步我們可以合在一起,因為我們用數組來存二進制,取反后存的時候可以直接倒著存,就相當于翻轉了。
取反時不要講多余部分取反,直接判斷n是否已除盡
詳細看代碼吧

#include<bits/stdc++.h> using namespace std; int a[32]; typedef long long ll;int main(){ll n;cin>>n;for(int i=32;i>=1;i--){ int w=n%2;if(n)a[i]=!w;n>>=1;}ll sum=0;for(int i=1;i<=32;i++){if(a[i]!=0)sum+=pow(2,i-1);}cout<<sum; }

E L1-5 演唱會

題目好理解
我們讀入是將時分秒分別存入hh,mm,ss中,然后分別加上1,22,33,注意進位,從ss開始每滿60進一位,最后比較時分別于演唱會開始與結束時間比較,從小時開始比到秒
(這么做還要進位太麻煩了吧)
其實直接將所有時間都轉化成秒,直接對比多方便

怎么方便怎么做

#include<bits/stdc++.h> using namespace std; int main(){int hh,mm,ss;int sum;char ch;cin>>hh>>ch>>mm>>ch>>ss;sum=hh*3600+mm*60+ss;sum+=3600+22*60+33;int beg=19*3600,ed=21*3600;if(sum<beg){cout<<"arrive on time";}else if(sum<ed){cout<<"arrive late";}else{cout<<"too late";}return 0; }

F L1-6 分鴿子

(吃鴿子!!鴿子保護協會表示抗議)
終于有個涉及算法的題了
二分問題
我們要知道正確答案是在區域[l,r]之間的,一開始l=1,r=1e9+2,然后不斷縮小l與r的范圍
我們先枚舉一個mid作為答案,然后判斷mid是否符合條件,如果符合說明可能存在更佳的答案,就把左邊界更新(擴大)
如果不符合說明當前答案太大了,就把右邊界縮小
這個條件怎么判斷呢?
我一開始是先看mid*m與sum(a[i])也就是需要的鴿子肉與有的鴿子肉比較,如果大于已有mid肯定多了
如果小于就看mid是不是比單個鴿子肉小,因為不能混搭
我感覺這樣做問題不大,結果過了一半,懵了
然后換了一個判斷方法,直接看每個鴿子以當前mid標準能分成幾份,如果份數大于人數,即符合要求,反之不符合
具體看代碼吧

#include<bits/stdc++.h> using namespace std; const int maxn=1e5+3; int a[maxn];int n,m; //inline bool check(int mid) //{ // if(mid*m>summ)return 0; // for(int i=1;i<=n;i++) // if(mid>a[i])return 0; // return 1; //} bool check(int x){long long sum=0;for(int i=1;i<=n;++i){res+=(a[i]/x);}return res>=m; } int main() {cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}int l=1;int r=1e9+2;int mid;while(l<=r){mid=(l+r)>>1; // printf("mid=%d %d %d\n",mid,l,r);if(check(mid)){l=mid+1;}else {r=mid-1;}}cout<<r;return 0;}

總結

以上是生活随笔為你收集整理的武汉工程大学2020GPLT选拔赛(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。