Codeforces Round #547 (Div. 3)

我老人家走了四公里吃个汉堡还没吃成。垃圾肯德基。垃圾春分半价桶。

蜜雪冰城百香果加冰+烤串真是爽死了。原来二十多块钱可以吃的这么爽。

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

猜你喜欢

转载自www.cnblogs.com/MXang/p/10569050.html