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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #666 (Div. 2)

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #666 (Div. 2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哎太菜了就做出2個題掉了19分~~

A - Juggling Letters

統計一下每個字母出現的次數,由于最后要平均分配到每個數組中那么每個字母出現次數應該是n的倍數

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<string> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef pair<int,int> pii; int cnt[30]; int main() {IO;int T;cin>>T;while(T--){memset(cnt,0,sizeof cnt);int n;cin>>n;for(int i=1;i<=n;i++){string s;cin>>s;for(auto t:s) cnt[t-'a']++;}bool ok=1;for(int i=0;i<26;i++)if(cnt[i]%n) {ok=0;break;}if(ok) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0; }

B - Power Sequence

這題打了個暴力,玄學復雜度不知道怎么過的

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=100010; const ll maxn=1e17; ll a[N]; int main() {IO;int n;cin>>n;ll maxa=0;for(int i=0;i<n;i++) {cin>>a[i];maxa=max(maxa,a[i]);}sort(a,a+n);ll res=maxn;for(int i=1;i<=100000;i++){ll cnt=abs(a[0]-1);ll p=1;bool ok=1;for(int j=1;j<n;j++){if(p>maxn/i){ok=0;break;}p=p*i; cnt+=abs(p-a[j]);}if(ok) res=min(res,cnt);}cout<<res<<endl;return 0; }

C - Multiples of Length

非常好的思維題,沒有想到啊。。。
先把1~n-1的數全部變成n的倍數,可以這樣a[i]+a[i]*(n-1)一定是n的倍數。然后將最后一個數變成0,第三部將整個數組消為0

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=100010; int n,a[N]; int main() {cin>>n;for(int i=1;i<=n;i++) cin>>a[i];if(n==1){cout<<1<<' '<<1<<'\n'<<-a[1]<<'\n';cout<<1<<' '<<1<<"\n0\n";cout<<1<<' '<<1<<"\n0\n";}else{cout<<1<<' '<<n-1<<'\n';for(int i=1;i<=n-1;i++) cout<<1ll*a[i]*(n-1)<<' ';cout<<'\n'<<n<<' '<<n<<'\n';cout<<-a[n];cout<<'\n'<<1<<' '<<n<<'\n';for(int i=1;i<=n;i++){if(i==n) cout<<0<<' ';else cout<<-1ll*a[i]*n<<' ';}}return 0; }

考試的時候想的是先把前一半len1變成n的倍數,然后把后一半len2變成n的倍數,對于加數能否變成n的倍數好像還不確定,現在要求ai+k1len1=k2na_i+k_1len_1=k_2nai?+k1?len1?=k2?nk1len1+k2n=aik_1len_1+k_2n=a_ik1?len1?+k2?n=ai?根據擴展歐幾里得算法可以求k1len1+k2n=gcd(len1,n)k_1len_1+k_2n=gcd(len_1,n)k1?len1?+k2?n=gcd(len1?,n)如果ai%gcd(len1,n)a_i \% gcd(len_1,n)ai?%gcd(len1?,n)不為0那么無解,然后看了一下D發現好像是NIM游戲(后來證明是貪心),然后就不想看了就睡覺了。
不過看完題解發現如果len1=n?1len_1=n-1len1?=n?1,那么gcd(len1,n)=1gcd(len_1,n)=1gcd(len1?,n)=1就不存在無解情況了。

D - Stoned Game

雙方每次都選擇當前石子數目最多的一堆即是最優方案。可以用優先隊列模擬取石子過程。下面代碼參考YeHosea大佬題解
一堆最多的石子超過總數一半先手必勝,如果未超過分奇偶討論即可
whd大佬打表找規律結論與下述代碼一樣

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=110; int n,a[N]; int main() {int T;cin>>T;while(T--){cin>>n;int maxa=0;int s=0;for(int i=1;i<=n;i++){cin>>a[i];s+=a[i];maxa=max(maxa,a[i]);}if(s-maxa<maxa||s%2==1) cout<<"T"<<endl;else cout<<"HL"<<endl;}return 0; }

補題的時候發現這次div2并不是太難,只是思維題較多,需要靜下心來思考。
要加油哦~

總結

以上是生活随笔為你收集整理的Codeforces Round #666 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。

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