zoukankan      html  css  js  c++  java
  • Codeforces Round #452 (Div. 2)

    Codeforces Round #452 (Div. 2)

    题目链接:http://codeforces.com/contest/899

     

    已过ABC题,待更。

    A题题意:给N个组,每个组有1个或两个人,问能组成多少个三人组。

    A题题解:贪心的思想,统计出两个人和一个人的组数X和Y,肯定先选一个两人组和一个一个组组合。那么三人组个数就是X+(X-Y)/3。

    AC代码:

     1 #include<iostream>
     2 using namespace std;
     3 int n,sum1,sum2;
     4 int main()
     5 {
     6     cin>>n;
     7     for(int i=1;i<=n;i++)
     8     {
     9         int x;
    10         cin>>x;
    11         if(x==1)sum1++;
    12         else sum2++;
    13     }
    14     if(sum2>sum1)cout<<sum1<<endl;
    15     else cout<<sum2+(sum1-sum2)/3<<endl;
    16 }

    B题题意:给定最多24个月的天数,问是否符合实际。

    B题题解:因为不一定从第一个月开始,所以最多24个月就可以从36个循环里找是否存在一个子循环符合要求。

    因为三年里最多一个29天,所以需要更改三次二月份的天数。

    AC代码:

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int a[37],b[25],n;
     5 int pe()
     6 {
     7     int ok = 0;
     8     for(int i=1;i<=36-n;i++)
     9     {
    10         if(b[1]==a[i])
    11         {
    12             int k = 1;
    13             while(k<n)
    14             {
    15                 if(a[i+k]!=b[k+1])break;
    16                 k++;
    17             }
    18             if(k==n)ok=1;
    19         }
    20     }
    21     return ok;
    22 }
    23 int main()
    24 {
    25     for(int i=1;i<=7;i++)
    26     {
    27         if(i&1)a[i]=31;
    28         else a[i]=30;
    29     }
    30     for(int i=8;i<=12;i++)
    31     {
    32         if(i&1)a[i]=30;
    33         else a[i]=31;
    34     }
    35     for(int i=13;i<=36;i++)a[i]=a[i-12];
    36     cin>>n;
    37     for(int i=1;i<=n;i++)
    38     {
    39         cin>>b[i];
    40     }
    41     int ok = 0;
    42     a[2]=a[14]=a[26]=28;
    43     ok = max(ok,pe());
    44     a[2]=29;
    45     ok = max(ok,pe());
    46     a[2]=28;
    47     a[14]=29;
    48     ok = max(ok,pe());
    49     a[14]=28;
    50     a[26]=29;
    51     ok = max(ok,pe());
    52     if(ok)cout<<"Yes"<<endl;
    53     else cout<<"No"<<endl;
    54 }

    C题题意:给从1-N的N个数,分成两组使得两组和的差最小,输出其中一组的个数和组里的每个数。

    C题题解:一开始跑了一下,发现差是11001100的顺序,然后分4种情况wa了,发现N大了的时候组里的每个数规律是不定的。然后就贪心的思想了,从N往下找,找到就减去,记录找到的每个数即可。

    AC代码:

     1 #include <iostream>
     2 using namespace std;
     3 const int maxn = 60007;
     4 int n,vis[maxn],now;
     5 int main(int argc, char const *argv[])
     6 {
     7     cin>>n;
     8     now = 0;
     9     int sum;
    10     if(n&1)sum = (n+1)/2*n;
    11     else sum = n/2*(n+1);
    12     sum/=2;
    13     for(int i=n;i>=1;i--)
    14     {
    15         if(sum>=i)
    16         {
    17             sum-=i;
    18             vis[now++]=i;
    19         }
    20     }
    21     if(n%4==0||n%4==3)cout<<sum<<endl;
    22     else cout<<sum+1<<endl;
    23     cout<<now<<" ";
    24     for(int i=0;i<now;i++)
    25     {
    26         cout<<vis[i]<<" ";
    27     }
    28     cout<<endl;
    29     return 0;
    30 }
  • 相关阅读:
    [LeetCode] Lowest Common Ancestor of a Binary Search Tree
    [LeetCode] Palindrome Linked List
    Android控件开发之Chronometer(转)
    andriod 动态设置TextView 和 RelativeLayou 高度
    android RelativeLayout 动态设置高度
    android 判断字符串是否为空与比对["=="与equals()的区别]
    android 实现ImageView按压效果和解决背景图片拉申问题
    android XML布局 属性与运用
    android 解决.XML提示ava.lang.NullPointerException at错误后XML没显示
    Android设置AlertDialog点击按钮对话框不关闭(转)
  • 原文地址:https://www.cnblogs.com/sortmin/p/8089445.html
Copyright © 2011-2022 走看看