• 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
  • 相关阅读:
    PHP install perl module
    PHP 静态页
    PHP对类的操作
    PHP Mysql操作。
    2020.7.16
    2020.7.19
    2020.7.14
    2020.7.12
    2020.7.17
    2020.7.10
  • 原文地址:https://www.cnblogs.com/MXang/p/10569050.html
Copyright © 2020-2023  润新知