• 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
  • 相关阅读:
    eval解析的函数传参 object array
    whistle证书过期或不信任
    isa hasa的区别、及理解
    JVM工作原理和特点
    Cookie跨域操作
    关闭当前窗口js
    css遮罩层
    js 获得两个数组的重复元素
    主页变灰
    js 格式化日期
  • 原文地址:https://www.cnblogs.com/Fighting-sh/p/10599843.html
Copyright © 2020-2023  润新知