1. 程式人生 > >Codeforces Round #547 (Div. 3)

Codeforces Round #547 (Div. 3)

break div ear 別人 ret open push_back return nod

我老人家走了四公裏吃個漢堡還沒吃成。垃圾肯德基。垃圾春分半價桶。

蜜雪冰城百香果加冰+烤串真是爽死了。原來二十多塊錢可以吃的這麽爽。

A:

技術分享圖片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll n,m;
 5 int main(){
 6     ios::sync_with_stdio(false);
 7     cin>>n>>m;
 8     if(m%n)cout<<-1;
 9     else
{ 10 ll tmp = m/n; 11 int c1=0,c2=0; 12 while (tmp%2==0){ 13 c1++;tmp/=2; 14 } 15 while (tmp%3==0){ 16 c2++;tmp/=3; 17 } 18 if(tmp!=1){ 19 cout<<-1; 20 } else{ 21 cout<<c1+c2<<endl;
22 } 23 } 24 }
View Code

B:

技術分享圖片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 2e5+5;
 5 int n,a[N<<1];
 6 int main(){
 7     ios::sync_with_stdio(false);
 8     cin>>n;
 9     for(int i=1;i<=n;i++){
10         cin>>a[i];
11 a[n+i]=a[i]; 12 } 13 int ans = 0,tmp = 0; 14 for(int i=1;i<=2*n;i++){ 15 if(a[i]==1){ 16 tmp++; 17 } else{ 18 ans = max(ans,tmp); 19 tmp = 0; 20 } 21 } 22 ans = max(ans,tmp); 23 cout<<ans<<endl; 24 }
View Code

C:

技術分享圖片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 2e5+5;
 5 int n,q[N],ans[N];
 6 set<int> s;
 7 int main(){
 8     ios::sync_with_stdio(false);
 9     cin>>n;
10     for(int i=1;i<n;i++){
11         cin>>q[i];
12     }
13     int mx = 0;
14     for(int i=1;i<n;i++){
15         ans[i+1]=ans[i]+q[i];
16         mx = max(mx,ans[i]);
17     }
18     mx = max(mx,ans[n]);
19     for(int i=1;i<=n;i++){
20         ans[i]+=(n-mx);
21         if(ans[i]>n||ans[i]<1){
22             cout<<-1<<endl;
23             exit(0);
24         }
25         s.insert(ans[i]);
26     }
27     if(s.size()!=n) cout<<-1;
28     else{
29         for(int i=1;i<=n;i++){
30             cout<<ans[i]<< ;
31         }
32     }
33 }
View Code

D:

技術分享圖片
 1 #include <bits/stdc++.h>
 2 #define pii pair<int,int>
 3 #define mk(a,b) make_pair(a,b)
 4 using namespace std;
 5 typedef long long ll;
 6 const int N = 15e4+5;
 7 int n;
 8 string a,b;
 9 int v1[N],v2[N];
10 set<int> s[27];
11 vector<pii>ans;
12 int main(){
13     ios::sync_with_stdio(false);
14     cin>>n>>a>>b;a="*"+a;b="*"+b;
15     for(int i=1;i<=n;i++){
16         if(b[i]==?)s[26].insert(i);
17         else s[b[i]-a].insert(i);
18     }
19     for(int i=1;i<=n;i++){
20         if(a[i]==?)continue;
21         if(!s[a[i]-a].empty()) {
22             int id = *s[a[i] - a].begin();
23             ans.push_back(mk(i, id));
24             s[a[i] - a].erase(id);
25             v1[i] = 1;
26             v2[id] = 1;
27         } else{
28             if(s[26].empty())continue;
29             int id = *s[26].begin();
30             ans.push_back(mk(i, id));
31             s[26].erase(id);
32             v1[i] = 1;
33             v2[id] = 1;
34         }
35     }
36     int id = 0;
37     for(int i=1;i<=n;i++){
38         if(a[i]!=?)continue;
39         while (s[id].empty()){
40             id++;
41             if(id>26)break;
42         }
43         int x = *s[id].begin();
44         ans.push_back(mk(i,x));
45         s[id].erase(x);
46     }
47     cout<<ans.size()<<endl;
48     for(auto t:ans){
49         cout<<t.first<< <<t.second<<endl;
50     }
51 
52 }
View Code

E:直接暴力吧。看到同學有寫二分的。。。二分個錘子啊。。

技術分享圖片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 2e5+5;
 5 ll h, n;
 6 ll a[N],pre[N];
 7 int main(){
 8     ios::sync_with_stdio(false);
 9     cin>>h>>n;
10     ll tmp = h;
11     ll mn = 1e18;
12     for(int i=1;i<=n;i++){
13         cin>>a[i];
14         tmp+=a[i];
15         if(tmp<=0){
16             cout<<i;
17             exit(0);
18         }
19         pre[i]=pre[i-1]+a[i];
20         mn = min(mn,pre[i]);
21     }
22     if(pre[n]>=0){
23         cout<<-1;
24     } else{
25         ll tmp = h+mn;
26         ll ans = abs(tmp/pre[n]*n);
27         h-=abs(ans/n*pre[n]);
28         while (1) {
29             for (int i = 1; i <= n; i++) {
30                 if (h <= 0) {
31                     cout << ans;
32                     exit(0);
33                 }
34                 h += a[i];
35                 ans++;
36             }
37         }
38     }
39 }
View Code

那麽到這裏已經過去四十多分鐘了,接下來是專治傻逼題。

F2:被治了好幾分鐘然後掛機睡覺了。

直接暴力枚舉所有區間和。完了。

技術分享圖片
 1 #include <bits/stdc++.h>
 2 #define pii pair<int,int>
 3 #define mk(a,b) make_pair(a,b)
 4 using namespace std;
 5 typedef long long ll;
 6 map<int,vector<pii>>mp;
 7 vector<pii>t,v,ans;
 8 bool cmp(pii a,pii b){
 9     return a.second<b.second;
10 }
11 int n,a[1551];
12 int main(){
13     ios::sync_with_stdio(false);
14     cin>>n;
15     for(int i=1;i<=n;i++){
16         cin>>a[i];
17         a[i]+=a[i-1];
18     }
19     for(int i=1;i<=n;i++){
20         for(int j=i;j<=n;j++){
21             mp[a[j]-a[i-1]].push_back(mk(i,j));
22         }
23     }
24     for(auto x:mp){
25         t=x.second;
26         v.clear();
27         sort(t.begin(),t.end(),cmp);
28         int tmp = 1;
29         int r=t[0].second;
30         v.push_back(t[0]);
31         for(int i=1;i<t.size();i++){
32             if(t[i].first<=r)continue;
33             r=t[i].second;tmp++;
34             v.push_back(t[i]);
35         }
36         if(tmp>ans.size()){
37             ans=v;
38         }
39     }
40     cout<<ans.size()<<endl;
41     for(auto tmp:ans){
42         cout<<tmp.first<< <<tmp.second<<endl;
43     }
44 }
View Code

G:我感覺我寫的假算法。。和別人的代碼,和題解好像都不一樣???

首先註意到一個性質,答案其實就是第k+1大的節點度數。

然後我們就搜一遍順便染個色。

我在搜的過程中 直接把 父節點 能染的顏色起始下標賦給了子節點。。結果1A了。。。不太懂為啥是對的,明天問問學長。。。

技術分享圖片
 1 #include <bits/stdc++.h>
 2 #define pii pair<int,int>
 3 #define mk(a,b) make_pair(a,b)
 4 using namespace std;
 5 const int N = 2e5+5;
 6 struct Node{
 7     int id,deg;
 8 }a[N];
 9 bool cmp(Node a,Node b){ return a.deg>b.deg;}
10 map<pii,int>mp;
11 int n,k,deg[N],ans[N],col[N];
12 vector<int> g[N];
13 void dfs(int v,int fa,int p){
14     for(auto u:g[v]){
15         if(u==fa)continue;
16         ans[mp[mk(max(u,v),min(u,v))]]=col[v]++;
17         col[u]=col[v];
18         col[u]%=p;col[v]%=p;
19         dfs(u,v,p);
20     }
21 }
22 int main(){
23     ios::sync_with_stdio(false);
24     cin>>n>>k;
25     int u,v;
26     for(int i=1;i<n;i++){
27         cin>>u>>v;
28         deg[u]++;deg[v]++;
29         g[u].push_back(v);
30         g[v].push_back(u);
31         mp[mk(max(u,v),min(u,v))]=i;
32     }
33     for(int i=1;i<=n;i++)a[i]={i,deg[i]},col[i]=0;
34     sort(a+1,a+1+n,cmp);
35     int tmp = a[k+1].deg;
36     dfs(a[k+1].id,a[k+1].id,tmp);
37     cout<<tmp<<endl;
38     for(int i=1;i<n;i++){
39         cout<<ans[i]+1<< ;
40     }
41 }
View Code

Codeforces Round #547 (Div. 3)