日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Codeforces edu 88(A~E)

發(fā)布時(shí)間:2024/8/1 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces edu 88(A~E) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

A題.Berland Poker

讀懂題意即可
代碼:

#include <bits/stdc++.h> #define ll long long using namespace std;int main() {ll t,n,m,k;scanf("%lld",&t);while(t--){scanf("%lld %lld %lld",&n,&m,&k);ll op=n/k;if(m<=op){printf("%lld\n",m);continue;}else{ll ans=op;m-=op;ll u=k-1;if(m%u==0){printf("%lld\n",ans-m/u);}else{ans=ans-(m/u+1);printf("%lld\n",ans);}}}return 0; }

B題.New Theatre Square

只能選1 x 1 或 1 x 2的,如果1x1的價(jià)格的兩倍小于1x2的,那么就全部用1x1的,否則能用1x2的就用1x2的
代碼:

#include <bits/stdc++.h> #define ll long long using namespace std;char s[105][10005]; int main() {ll t,n,m,k,x,y;scanf("%lld",&t);while(t--){scanf("%lld %lld %lld %lld",&n,&m,&x,&y);for(int i=0;i<n;i++){scanf("%s",s[i]);}if(2*x<=y){ll cnt=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='.'){cnt++;}}}printf("%lld\n",cnt*x);}else{ll sx=0,sy=0;for(int i=0;i<n;i++){int j=0;while(j<m){if(j<m-1){if(s[i][j]=='.'&&s[i][j+1]=='.'){sy++;j+=2;continue;}if(s[i][j]=='.'&&s[i][j+1]!='.'){sx++;j++;continue;}j++;}else{if(s[i][j]=='.'){sx++;j++;continue;}j++;}}}printf("%lld\n",sx*x+sy*y);}}return 0; }

C題.Mixing Water

題意:有兩種水,一種熱水溫度為h,一種涼水溫度為c,只能按照一杯熱水、一杯涼水、一杯熱水、一杯涼水······的順序添加到同一個(gè)桶中,問(wèn)最少需添加幾次,使得桶中水的平均溫度最接近t
思路:因?yàn)榫葐?wèn)題WA了兩次很難受,這題推一個(gè)式子即可,當(dāng)添加次數(shù)為偶數(shù)時(shí),桶內(nèi)溫度一定為(h+c)/2
設(shè)當(dāng)添加次數(shù)為j,且j為奇數(shù)時(shí),可得到這樣一個(gè)式子:(((j-1)/2)*(h+c)+h)/j=t
這樣可以把 j 解出來(lái),j可能是個(gè)浮點(diǎn)數(shù),只是個(gè)模糊數(shù)值吧,把j附近的整數(shù)枚舉一遍求出最終的答案
代碼:

#include <bits/stdc++.h> #define ll long long using namespace std;char s[105][10005]; int main() {ll t,h,c,f;scanf("%lld",&t);while(t--){scanf("%lld %lld %lld",&h,&c,&f);if(h<=f){printf("1\n");continue;}double hh=h*1.0;double cc=c*1.0;double ff=f*1.0;//double all=0;double op=(hh+cc)/2.0;if(ff<=op){printf("2\n");continue;}double ans=(hh-cc)/(ff*2.0-hh-cc);double opc=ff-op;ll df=ans;ll pos;double minn=99999999.0;for(ll i=df-3;i<=df+3;i++){if(i<=0){continue;}if(i%2==0){double uu=ff-op;if(uu<=minn){pos=i;minn=uu;}}else{double ee=(((i-1)/2)*(h+c)*1.0+h*1.0)/(i*1.0);double uu=fabs(ee-ff);if(uu<minn){pos=i;minn=uu;}}}if(pos%2==0){printf("2\n");}else{printf("%lld\n",pos);}}return 0; }

待更新·································先打lol去了

D題.Yet Another Yet Another Task

又是最后剩下半個(gè)小時(shí),寫了個(gè)假DP WA了好幾次,唉。。。。
題意:求一段區(qū)間,使該區(qū)間去掉一個(gè)最大值后的區(qū)間和值最大,問(wèn)區(qū)間和最大值是多少
思路:因?yàn)閍i<=30,直接從0到30枚舉最大值,對(duì)每次最大值求最大子段和
代碼:

#include <bits/stdc++.h> #define ll long long using namespace std;ll a[200005],d[200005]; int main() {ll n;scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}ll ans=-9999999999999;for(int i=0;i<=30;i++){ll maxx=-9999999999999;for(int j=1;j<=n;j++){if(a[j]>i){d[j]=0;}else{d[j]=max(d[j-1]+a[j],(ll)0);maxx=max(maxx,d[j]);}}ans=max(ans,maxx-i);}printf("%lld\n",ans);return 0; }

E題.Modular Stability

題意:給你一個(gè)n和k,要求在1~n內(nèi)取k個(gè)數(shù),對(duì)于任何正數(shù)x,x%這k個(gè)數(shù)任何排列方式后的值相同,問(wèn)有多少種取法
思路:仿照樣例1打個(gè)表,差不多就知道是咋回事了
再用組合數(shù)和逆元求出最終結(jié)果
代碼:

#include <bits/stdc++.h> #define ll long long using namespace std;ll mod=998244353,bb=1; void init(ll r) {for(ll i=r;i>=1;i--){bb=bb*i%mod;} } ll apow(ll a,ll b) {ll s=1;while(b){if(b&1){s=s*a%mod;}a=a*a%mod;b>>=1;}return s%mod; } ll C(ll n,ll r) {ll aa=1;//cout<<n<<" "<<r<<endl;for(ll i=n;i>=n-r+1;i--){aa=aa*i%mod;}return aa*apow(bb,mod-2)%mod; } int main() {ll n,k;cin>>n>>k;if(n==k){cout<<"1"<<endl;return 0;}if(n<k){cout<<"0"<<endl;return 0;}if(k==1){cout<<n<<endl;return 0;}init(k-1);ll ans=0;for(ll i=1;i<=n;i++){if(i+k>n){break;}ll maxx=n/i;if(maxx<k){continue;}ans=(ans%mod+C(maxx-1,k-1)%mod)%mod;}cout<<ans<<endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的Codeforces edu 88(A~E)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。