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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客练习赛33

發布時間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客练习赛33 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A.tokitsukaze and Counting

題目描述

給出3個整數L,R,x。tokitsukaze想知道,閉區間[L,R]中,x的倍數出現了幾次。

輸入描述:

第一行包括一個正整數T(T<=1000),表示T組數據。
接下來T行,每行包括3個正整數L,R,x。
1≤L≤R≤10^18
1≤x≤10^18

輸出描述:

輸出T行,每一行一個整數,表示答案。 示例1

輸入

1 2 5 3

輸出

1
解題思路:水!
AC代碼: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL T,L,R,x; 5 int main(){ 6 while(cin>>T){ 7 while(T--){ 8 cin>>L>>R>>x; 9 cout<<R/x-(L-1)/x<<endl; 10 } 11 } 12 return 0; 13 }

B.tokitsukaze and RPG

題目描述

tokitsukaze最近沉迷一款RPG。
這個RPG一天有k分鐘,每一天從第1分鐘開始。
有n種怪物,第i種怪物每天第一次出現的時間為Xi分鐘,第二次出現的時間為2*Xi分鐘,第三次出現的時間為3*Xi分鐘......同一時刻出現的怪物種類越多,打怪獲得的經驗也越高。
為了高效練級,tokitsukaze想知道在一天內出現怪物種類最多的時間點會出現多少種怪物,這樣的時間點有多少個。

輸入描述:

第一行包括2個正整數n,k(1≤n≤10^5,1≤k≤10^6),表示有n種怪物,一天有k分鐘。
接下來一行包括n個正整數X(1≤Xi≤10^6),含義如題面所示。

輸出描述:

輸出一行,包括兩個整數a,b。
a表示怪物種類數,b表示時間點的個數。 示例1

輸入

3 6 2 2 3

輸出

3 1

說明

在第6分鐘時,3種怪物都出現了。 示例2

輸入

3 5 2 2 3

輸出

2 2

說明

在第2分鐘和第4分鐘時,第一種和第二種怪物出現了。 示例3

輸入

6 10 1 2 3 4 5 6

輸出

4 1

說明

在第6分鐘時,出現了第一種、第二種、第三種、第六種怪物。 示例4

輸入

3 5 6 6 6

輸出

0 5

說明

在第1分鐘、第2分鐘、第3分鐘、第4分鐘、第5分鐘,都沒有出現怪物。
解題思路:埃氏篩nlogn暴力過。
AC代碼: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn=1e6+5; 5 int n,k,x,maxxx,cnt[maxn],ans1[maxn],ans2[maxn]; 6 int main(){ 7 while(~scanf("%d%d",&n,&k)){ 8 memset(cnt,0,sizeof(cnt)); 9 memset(ans1,0,sizeof(ans1)); 10 memset(ans2,0,sizeof(ans2));maxxx=0; 11 for(int i=0;i<n;++i)scanf("%d",&x),cnt[x]++; 12 for(int i=1;i<=k;++i){ 13 if(!cnt[i])continue; 14 for(int j=i;j<=k;j+=i) 15 ans1[j]+=cnt[i];///統計每個時間點的怪物種類數 16 } 17 for(int i=1;i<=k;++i)maxxx=max(maxxx,ans1[i]),ans2[ans1[i]]++;///最大種類數出現的時間點個數 18 printf("%d %d\n",maxxx,ans2[maxxx]); 19 } 20 return 0; 21 }

?C.tokitsukaze and Number Game

題目描述

tokitsukaze又在玩3ds上的小游戲了,現在她遇到了難關。
tokitsukaze得到了一個整數x,并被要求使用x的每一位上的數字重新排列,組成一個能被8整除的數,并且這個數盡可能大。
聰明的你們請幫幫可愛的tokitsukaze,如果無法組成被8整除的數,請輸出-1。
保證輸入不含前導0,輸出也不能含前導0。

輸入描述:

第一行包括一個正整數T(T<=1000),表示T組數據。
接下來T行,每一行包括一個整數x,(0≤x≤10^100)。

輸出描述:

請輸出用這些數字組成出能被8整除的最大的數,如果無法組成出能被8整除的數,請輸出-1。 示例1

輸入

2 666 1256

輸出

-1 6512
解題思路:結論:如果一個數的后三位能被8整除,那么這個數就能被8整除。特判位數為1和2的數。不小于3位數的數的處理思路:統計0~9每個數字出現的次數,然后枚舉不大于1000且為8的倍數的數,如果后三位每位上對應數字出現的次數減1后都不小于0,說明這個數中每位重排后能得到較大的且為8的倍數的數,則只需降序貪心添加每一位后取滿足條件的最大數即可。
AC代碼: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn=105; 5 char str[maxn],num[maxn];int T,len,tmp1,tmp2,tmp3,tmp4,a,b,c,cnt[10];bool fuck;string ans,tmp0; 6 int main(){ 7 while(cin>>T){ 8 while(T--){ 9 cin>>str,len=strlen(str),fuck=false,ans=""; 10 memset(num,0,sizeof(num)),memset(cnt,0,sizeof(cnt)); 11 for(int i=0;i<len;++i)cnt[num[i]=str[i]-'0']++; 12 if(len==1)cout<<(num[0]%8?-1:num[0])<<endl;///特判1位和2位 13 else if(len==2){ 14 tmp1=num[0]*10+num[1],tmp2=num[1]*10+num[0]; 15 tmp3=tmp1%8?-1:tmp1,tmp4=tmp2%8?-1:tmp2; 16 cout<<max(tmp3,tmp4)<<endl; 17 }else{ 18 for(int s=0;s<1000;s+=8){///枚舉8的倍數 19 cnt[a=s%10]--,cnt[b=s/10%10]--,cnt[c=s/100]--; 20 if(cnt[a]>=0&&cnt[b]>=0&&cnt[c]>=0){ 21 tmp0=""; 22 for(int i=9;i>=0;--i)///減去后三位后剩下的幾個數降序排 23 for(int j=1;j<=cnt[i];++j) 24 tmp0+=i+'0'; 25 fuck=true,tmp0+=c+'0',tmp0+=b+'0',tmp0+=a+'0';///后三位為可被8整出的最小三位數 26 if(ans<tmp0)ans=tmp0; 27 } 28 cnt[a]++,cnt[b]++,cnt[c]++;///還原個數 29 } 30 if(!fuck)puts("-1"); 31 else cout<<ans<<endl; 32 } 33 } 34 } 35 return 0; 36 }

?

轉載于:https://www.cnblogs.com/acgoto/p/10086227.html

總結

以上是生活随笔為你收集整理的牛客练习赛33的全部內容,希望文章能夠幫你解決所遇到的問題。

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