Acwing第 40 场周赛【完结】
生活随笔
收集整理的這篇文章主要介紹了
Acwing第 40 场周赛【完结】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這把打的很爛,T2想的時間有點慢還wa了一發(fā)。
T3吃完飯后來寫的,想到了dfs,不過最后一個點沒過,debug到結(jié)束才搞出來。
總結(jié),太廢物了掉大分
目錄
- 4305. 斐波那契字符串【簽到】
- 4306. 序列處理【貪心】
- 4307. 數(shù)字重構(gòu)【dfs】
4305. 斐波那契字符串【簽到】
#include<bits/stdc++.h> using namespace std; int n,f[50]; map<int,int>mp; int main(void) {f[1]=1,f[2]=1,mp[1]++;cin>>n;for(int i=3;i<=30;i++) f[i]=f[i-1]+f[i-2],mp[f[i]]++;for(int i=1;i<=n;i++){if(mp[i]) cout<<"O";else cout<<"o";}return 0; }4306. 序列處理【貪心】
只能加,故直接排序模擬即可。
4307. 數(shù)字重構(gòu)【dfs】
#include<bits/stdc++.h> using namespace std; int n,m,t,flag; int cnt[105]; string s1,s2,ans; bool cmp(char a,char b){return a>b;} void dfs(string s,int index) {if(cnt[s2[index]-'0'])//選這一位{string temp;temp+=s2[index]; cnt[s2[index]-'0']--;for(int i=0;i<=9;i++)for(int j=0;j<cnt[i];j++) temp=temp+to_string(i);temp=s+temp;if(temp<s2) dfs(s+s2[index],index+1);//最小的和小于bif(temp==s2) ans=s2,flag=1;//相等else cnt[s2[index]-'0']++;//最小的都大于b}if(flag) return;for(int i=s2[index]-'0'-1;i>=0;i--) {if(cnt[i]){s+=to_string(i);cnt[i]--;for(int k=9;k>=0;k--)for(int j=0;j<cnt[k];j++) s=s+to_string(k);ans=s;flag=1;break;}} } int main(void) {cin>>s1>>s2;if(s1.size()<s2.size()){sort(s1.begin(),s1.end(),cmp);cout<<s1;return 0;}if(s1==s2){cout<<s1;return 0;}for(int i=0;i<s1.size();i++) cnt[s1[i]-'0']++;dfs("",0);cout<<ans;return 0; }貪心思維,放最大的看后面最小可不可以滿足。
#include<bits/stdc++.h> using namespace std; int cnt[20]; string a,b,ans; bool check(int x) {cnt[x]--;string temp=ans+to_string(x);for(int i=0;i<=9;i++) {for(int j=1;j<=cnt[i];j++) temp+=to_string(i);}cnt[x]++;if(b.size()!=a.size()) return a.size()<b.size();else return temp<=b; } int main(void) {cin>>a>>b;for(int i=0;i<a.size();i++) cnt[a[i]-'0']++;for(int i=0;i<a.size();i++){for(int j=9;j>=0;j--){if(cnt[j]&&check(j)){ans+='0'+j;cnt[j]--;break;}}}cout<<ans;return 0; }總結(jié)
以上是生活随笔為你收集整理的Acwing第 40 场周赛【完结】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021春季每日一题【week3 未完结
- 下一篇: 2021春季每日一题【week4 完结】