Educational Codeforces Round 43 (Rated for Div. 2)

Educational Codeforces Round 43 (Rated for Div. 2)

https://codeforces.com/contest/976

A

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define IT set<ll>::iterator
 6 #define sqr(x) ((x)*(x))
 7 #define pb push_back
 8 #define eb emplace_back
 9 #define maxn 200005
10 #define eps 1e-8
11 #define pi acos(-1.0)
12 #define rep(k,i,j) for(int k=i;k<j;k++)
13 typedef long long ll;
14 typedef pair<int,int> pii;
15 typedef pair<ll,ll>pll;
16 typedef pair<ll,int> pli;
17 typedef pair<pair<int,string>,pii> ppp;
18 typedef unsigned long long ull;
19 const long long MOD=998244353;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 
24 
25 int main(){
26     std::ios::sync_with_stdio(false);
27     int n;
28     string str;
29     cin>>n>>str;
30     if(str=="0") cout<<0<<endl;
31     else {
32         int co=0;
33         for(int i=0;i<str.length();i++){
34             if(str[i]=='0') co++;
35         }
36         cout<<1;
37         for(int i=0;i<co;i++){
38             cout<<0;
39         }
40         cout<<endl;
41     }
42 }
View Code

 

B

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define IT set<ll>::iterator
 6 #define sqr(x) ((x)*(x))
 7 #define pb push_back
 8 #define eb emplace_back
 9 #define maxn 200005
10 #define eps 1e-8
11 #define pi acos(-1.0)
12 #define rep(k,i,j) for(int k=i;k<j;k++)
13 typedef long long ll;
14 typedef pair<int,int> pii;
15 typedef pair<ll,ll>pll;
16 typedef pair<ll,int> pli;
17 typedef pair<pair<int,string>,pii> ppp;
18 typedef unsigned long long ull;
19 const long long MOD=998244353;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 
24 int main(){
25     std::ios::sync_with_stdio(false);
26     ll n,m,k;
27     cin>>n>>m>>k;
28     if (k<n) {
29         cout<<k+1<<" "<<1<<endl;
30         return 0;
31     }
32     k-=n-1;
33     if (k==0) {
34         cout<<n<<" "<<1;
35         return 0;
36     }
37     k-=1;
38     ll l=k/(m-1);
39     k%=(m-1);
40     if((n-l)%2==0) cout<<n-l<<" "<< k+2<<endl;
41     else cout<<n-l<<" "<<m-k<<endl;
42 }
View Code

 

C

题意:是否存在一条线段是否包含另一条线段,有的话就输出其中一个解

思路:sort排序下即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define IT set<ll>::iterator
 6 #define sqr(x) ((x)*(x))
 7 #define pb push_back
 8 #define eb emplace_back
 9 #define maxn 200005
10 #define eps 1e-8
11 #define pi acos(-1.0)
12 #define rep(k,i,j) for(int k=i;k<j;k++)
13 typedef long long ll;
14 typedef pair<int,int> pii;
15 typedef pair<ll,ll>pll;
16 typedef pair<ll,int> pli;
17 typedef pair<pair<int,string>,pii> ppp;
18 typedef unsigned long long ull;
19 const long long MOD=998244353;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 
24 vector<pair<int,pair<int,int> > >ve;
25 
26 bool cmp(pair<int,pair<int,int> > a,pair<int,pair<int,int> > b){
27     if(a.second.first==b.second.first) return a.second.second>b.second.second;
28     return a.second.first<b.second.first;
29 }
30 
31 int main(){
32     std::ios::sync_with_stdio(false);
33     int n;
34     cin>>n;
35     int x,y;
36     for(int i=1;i<=n;i++){
37         cin>>x>>y;
38         ve.pb({i,{x,y}});
39     }
40     sort(ve.begin(),ve.end(),cmp);
41     int L=ve[0].second.first,R=ve[0].second.second,pos=ve[0].first;
42     int flag=0;
43     for(int i=1;i<ve.size();i++){
44         if(L<=ve[i].second.first&&R>=ve[i].second.second){
45             cout<<ve[i].first<<" "<<pos<<endl;
46             return 0;
47         }
48         L=ve[i].second.first,R=ve[i].second.second,pos=ve[i].first;
49     }
50     if(!flag){
51         cout<<-1<<" "<<-1<<endl;
52     }
53 }
View Code

 

D

题意:

给你一个长度为 n 的正整数序列 d1,d2,,dn (d1<d2<<dn )。要求你构造一个满足以下条件的无向图:

  1. 有恰好 dn+1 个点。
  2. 没有自环。
  3. 没有重边。
  4. 总边数不超过 10^6。
  5. 它的度数集合等于 dd 。

点从 1标号至 dn+1 。

图的度数序列是一个长度与图的点数相同的数组 a,其中 ai 是第 i 个顶点的度数(与其相邻的顶点数)。图的度数集合是度数序列排序后去重的结果。

思路:把前d[1]个点向所有点连接一条边后,就会出现有d[1]个度为d[n]的点,剩下的点度都为d[1],然后我们可以继续构造(d[2]-d[1],d[3]-d[1],d[4]-d[1]....d[n-1]-d[1])的点,不断缩小子问题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define IT set<ll>::iterator
 6 #define sqr(x) ((x)*(x))
 7 #define pb push_back
 8 #define eb emplace_back
 9 #define maxn 200005
10 #define eps 1e-8
11 #define pi acos(-1.0)
12 #define rep(k,i,j) for(int k=i;k<j;k++)
13 typedef long long ll;
14 typedef pair<int,int> pii;
15 typedef pair<ll,ll>pll;
16 typedef pair<ll,int> pli;
17 typedef pair<pair<int,string>,pii> ppp;
18 typedef unsigned long long ull;
19 const long long MOD=998244353;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 
24 vector<pii>ve;
25 int d[305];
26 
27 int main(){
28     std::ios::sync_with_stdio(false);
29     int n;
30     cin>>n;
31     for(int i=1;i<=n;i++) cin>>d[i];
32     int L=1,R=n;
33     int co=0;
34     while(L<=R){
35         for(int i=d[L-1]+1;i<=d[L];i++){
36             for(int j=i+1;j<=d[R]+1;j++){
37                 ve.pb({i,j});
38                 co++;
39             }
40         }
41         L++;
42         R--;
43     }
44     cout<<co<<endl;
45     for(int i=0;i<ve.size();i++){
46         cout<<ve[i].first<<" "<<ve[i].second<<endl;
47     }
48 }
View Code

 

E

题意:你有n个小兵,每个小兵都有血条和攻击力,你可以使用a种1操作,b种2操作,是小兵们的攻击力之和最大。1操作:是一个小兵当前血量翻倍 。2操作:把一个小兵当前的血量值赋值给攻击力。

思路:容易想到,把a操作的都给集中给一个小兵是最好的,所以我们可以先按血量-攻击力的差值从大到小排序,然后不断分情况枚举a给谁最好。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define IT set<ll>::iterator
 6 #define sqr(x) ((x)*(x))
 7 #define pb push_back
 8 #define eb emplace_back
 9 #define maxn 200005
10 #define eps 1e-8
11 #define pi acos(-1.0)
12 #define rep(k,i,j) for(int k=i;k<j;k++)
13 typedef long long ll;
14 typedef pair<int,int> pii;
15 typedef pair<ll,ll>pll;
16 typedef pair<ll,int> pli;
17 typedef pair<pair<int,string>,pii> ppp;
18 typedef unsigned long long ull;
19 const long long MOD=998244353;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 ll n,a,b;
24 vector<pll>ve;
25 
26 bool cmp(pll a,pll b){
27     return a.first-a.second>b.first-b.second;
28 }
29 
30 int main(){
31     std::ios::sync_with_stdio(false);
32     ll x,y;
33     cin>>n>>a>>b;
34     b=min(b,n);
35     for(int i=1;i<=n;i++){
36         cin>>x>>y;
37         ve.pb({x,y});
38     }
39     sort(ve.begin(),ve.end(),cmp);
40     ll sum=0;
41     for(int i=0;i<b;i++){
42         sum+=max(ve[i].first,ve[i].second);
43     }
44     for(int i=b;i<n;i++){
45         sum+=ve[i].second;
46     }
47     ll ans=sum;
48     for(int i=0;i<b;i++){
49         ans=max(ans,sum-max(ve[i].first,ve[i].second)+(ve[i].first<<a));
50     }
51     sum-=max(ve[b-1].first,ve[b-1].second)-ve[b-1].second;
52     if(b){
53         for(int i=b;i<n;i++){
54             ans=max(ans,sum-ve[i].second+(ve[i].first<<a));
55         }
56     }
57     cout<<ans<<endl;
58 }
View Code

 

F

待补

posted on 2019-04-01 21:51  Fighting_sh  阅读(182)  评论(0编辑  收藏  举报

导航