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
考試的時候想的是先把前一半len1變成n的倍數,然后把后一半len2變成n的倍數,對于加數能否變成n的倍數好像還不確定,現在要求ai+k1len1=k2na_i+k_1len_1=k_2nai?+k1?len1?=k2?n即k1len1+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大佬打表找規律結論與下述代碼一樣
補題的時候發現這次div2并不是太難,只是思維題較多,需要靜下心來思考。
要加油哦~
總結
以上是生活随笔為你收集整理的Codeforces Round #666 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样检测网络丢包率如何PING检测丢包
- 下一篇: Namomo Fish(Easy) Ro