Codeforces Round #499 (Div. 2)

Codeforces Round #499 (Div. 2)

https://codeforces.com/contest/1011

A

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,k,i,j,p,r,a[179];
 4 string s;
 5 int main(){
 6     for(cin>>n>>k>>s;i<n;i++)a[i]=s[i]-'a'+1;
 7     sort(a,a+n);
 8     for(i=0,p=-1;i<n&&j<k;i++){
 9         if(p+1<a[i])r+=a[i],j++,p=a[i];
10     }
11     cout<<(j==k?r:-1);
12 }
View Code

B

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,m,k,i,x,t,l,r,c[179];
 4 int main(){
 5     for(cin>>n>>m;i<m;i++)cin>>x,c[x]++;
 6     for(l=0,r=102;(l+r)/2>l;){
 7         k=(l+r)/2;
 8         for(t=i=0;i<102;i++)t+=c[i]/k;
 9         (t>=n?l:r)=k;
10     }
11     cout<<l;
12 }
View Code

C

模拟

题意:从地球飞到火星要经过n-2个星球,最后直接返回地球,每次起飞和降落都需要燃料,且效率不同。火箭重为m,星球数为n,火箭在星球上起飞和降落时的燃料效率ai和bi,求出发时需携带的最小燃料量,若不可行,输出-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<node>::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=1e9+7;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 int a[1005],b[1005];
24 
25 int main(){
26   //  std::ios::sync_with_stdio(false);
27     int n;
28     double s;
29     cin>>n>>s;
30     int flag=1;
31     for(int i=1;i<=n;i++){
32         cin>>a[i];
33         if(a[i]<=1){
34             flag=0;
35         }
36     }
37     for(int i=1;i<=n;i++){
38         cin>>b[i];
39         if(b[i]<=1){
40             flag=0;
41         }
42     }
43     if(!flag){
44         cout<<-1;
45     }
46     else{
47         double ans=0;
48         for(int i=1;i<=n;i++){
49             double tmp;
50             tmp=s/(a[i]-1);
51             s+=tmp;
52             ans+=tmp;
53             tmp=s/(b[i]-1);
54             s+=tmp;
55             ans+=tmp;
56         }
57         printf("%.7f
",ans);
58     }
59 }
View Code

D

交互题

题意:系统想一个数,你来猜,猜的数比系统想的大,返回1,小则返回-1,猜对了返回0。特殊的是,该系统每隔k次询问会撒一次谎,输出猜对的过程(猜的次数不超过60)

思路:前k次询问先找到系统第一次说谎的时候,剩下的60-k次就二分猜就行

 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<node>::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=1e9+7;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 int a[65];
24 
25 int main(){
26     std::ios::sync_with_stdio(false);
27     int n,m;
28     cin>>m>>n;
29     int x;
30     for(int i=0;i<n;i++){
31         cout<<1<<endl;
32         cin>>x;
33         if(x==0) return 0;
34         a[i]=x;
35     }
36     int L=0,R=m,mid;
37     for(int i=n;i<60;i++){
38         mid=L+R>>1;
39         cout<<mid<<endl;
40         cin>>x;
41         if(x==0) return 0;
42         if(x*a[i%n]>0){
43             L=mid+1;
44         }
45         else{
46             R=mid-1;
47         }
48     }
49 }
View Code

E

题意:有n种价值不同的钞票,每种有无数张。问在k进制下能凑出几种尾数不同的钞票

思路:gcd求最大公约数即可

 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<node>::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=1e9+7;
20 const double oula=0.57721566490153286060651209;
21 using namespace std;
22 
23 
24 int main(){
25     std::ios::sync_with_stdio(false);
26     int n,k;
27     cin>>n>>k;
28     int a;
29     cin>>a;
30     int gcd=a;
31     for(int i=2;i<=n;i++){
32         cin>>a;
33         gcd=__gcd(gcd,a);
34         if(gcd==1) break;
35     }
36     gcd=__gcd(gcd,k);
37     int ans=k/gcd;
38     cout<<ans<<endl;
39     for(int i=0;i<ans;i++){
40         cout<<gcd*i<<" ";
41     }
42 }
View Code

F

思维题

题意:给你一颗二叉树,父节点的值等于子节点的值通过“四则运算”得到(XOR,OR,AND,NOT),问每次改变一个叶子节点的值后,根节点的值为多少,每个操作之间互不影响

思路:先跑一遍dfs,求出根结点的值,第二次遍历的时候分类讨论,判断一个节点的值的改变对其父节点有没有影响。

  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<node>::iterator
  6 #define sqr(x) ((x)*(x))
  7 #define pb push_back
  8 #define eb emplace_back
  9 #define maxn 1000006
 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=1e9+7;
 20 const double oula=0.57721566490153286060651209;
 21 using namespace std;
 22 
 23 vector<int>ve[maxn];
 24 int n;
 25 struct sair{
 26     string str;
 27     int v;
 28 }a[maxn];
 29 
 30 int val[maxn];
 31 int ans[maxn];
 32 int vis[maxn];
 33 
 34 void dfs1(int pos){
 35     int ans;
 36     if(a[pos].str=="AND"){
 37         for(int i=0;i<ve[pos].size();i++){
 38             dfs1(ve[pos][i]);
 39         }
 40         val[pos]=val[ve[pos][0]]&val[ve[pos][1]];
 41     }
 42     else if(a[pos].str=="IN"){
 43         val[pos]=a[pos].v;
 44     }
 45     else if(a[pos].str=="XOR"){
 46         for(int i=0;i<ve[pos].size();i++){
 47             dfs1(ve[pos][i]);
 48         }
 49         val[pos]=val[ve[pos][0]]^val[ve[pos][1]];
 50     }
 51     else if(a[pos].str=="NOT"){
 52         dfs1(ve[pos][0]);
 53         val[pos]=!val[ve[pos][0]];
 54     }
 55     else{
 56         for(int i=0;i<ve[pos].size();i++){
 57             dfs1(ve[pos][i]);
 58         }
 59         val[pos]=val[ve[pos][0]]|val[ve[pos][1]];
 60     }
 61 }
 62 
 63 void dfs2(int pos){
 64     int x,y;
 65   //  cout<<pos<<endl;
 66     if(a[pos].str=="IN"){
 67         ans[pos]=!val[1];
 68     }
 69     else if(a[pos].str=="AND"){
 70         x=val[ve[pos][0]],y=val[ve[pos][1]];
 71         if(x==0&&y==1){
 72             dfs2(ve[pos][0]);
 73         }
 74         else if(x==1&&y==0){
 75             dfs2(ve[pos][1]);
 76         }
 77         else if(x==1&&y==1){
 78             dfs2(ve[pos][0]);
 79             dfs2(ve[pos][1]);
 80         }
 81     }
 82     else if(a[pos].str=="OR"){
 83         x=val[ve[pos][0]],y=val[ve[pos][1]];
 84         if(x==1&&y==0){
 85             dfs2(ve[pos][0]);
 86         }
 87         else if(x==0&&y==1){
 88             dfs2(ve[pos][1]);
 89         }
 90         else if(x==0&&y==0){
 91             dfs2(ve[pos][0]);
 92             dfs2(ve[pos][1]);
 93         }
 94     }
 95     else if(a[pos].str=="XOR"){
 96         x=val[ve[pos][0]],y=val[ve[pos][1]];
 97         if(x==0&&y==0){
 98             dfs2(ve[pos][0]);
 99             dfs2(ve[pos][1]);
100         }
101         else if(x==1&&y==1){
102             dfs2(ve[pos][0]);
103             dfs2(ve[pos][1]);
104         }
105         else if(x==0&&y==1){
106             dfs2(ve[pos][0]);
107             dfs2(ve[pos][1]);
108         }
109         else if(x==1&&y==0){
110             dfs2(ve[pos][0]);
111             dfs2(ve[pos][1]);
112         }
113     }
114     else if(a[pos].str=="NOT"){
115         x=val[ve[pos][0]];
116         dfs2(ve[pos][0]);
117     }
118 }
119 
120 int main(){
121     std::ios::sync_with_stdio(false);
122     cin>>n;
123     string str;
124     int x,y;
125     for(int i=1;i<=n;i++){
126         cin>>str>>x;
127         a[i].str=str;
128         if(str=="AND"){
129             cin>>y;
130             ve[i].pb(x);
131             ve[i].pb(y);
132             a[i].v=0;
133         }
134         else if(str=="IN"){
135             a[i].v=x;
136         }
137         else if(str=="XOR"){
138             cin>>y;
139             ve[i].pb(x);
140             ve[i].pb(y);
141             a[i].v=0;
142         }
143         else if(str=="NOT"){
144             ve[i].pb(x);
145             a[i].v=0;
146         }
147         else{
148             cin>>y;
149             ve[i].pb(x);
150             ve[i].pb(y);
151             a[i].v=0;
152         }
153     }
154     dfs1(1);
155     for(int i=1;i<=n;i++) ans[i]=val[1];
156     dfs2(1);
157     for(int i=1;i<=n;i++){
158         if(a[i].str=="IN"){
159             cout<<ans[i];
160         }
161     }
162     cout<<endl;
163 }
View Code
原文地址:https://www.cnblogs.com/Fighting-sh/p/10599843.html