zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 103 (Rated for Div. 2) A.K-divisible Sum+B.Inflation+C.Longest Simple Cycle题解

    A. K-divisible Sum

     题意:给两个数字n,k,构造一个有n个数的数组使得数组的总和可以整除k,且要使这个数组中的每个数尽可能的小,输出数组中的最大值;

    思路:这题分两种情况

           一:k<=n ;这种情况也分为两种;

                       1.是n%k==0,这个时候数组中的数字都为1就可以整除k所以直接输出1;

                       2 当n%k!=0的时候,数组中的元素可以由若干个1和若干个2组成,所以输出2;

          二:k>n:这种情况就需要求一下;用k/n向上取整就是答案了

    注意:第二种情况用循环会被hank tle,用ceil会因为输出类型被hank wa;//死伤惨重

    #include <bits/stdc++.h>
    #define  int long long
    #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
    const int maxn=2e5+50;
    const int INF=0x3f3f3f3f;
    using namespace std;
    int a[106][106];
    int f[106][106];
    signed main(){
      int t;cin>>t;
      while(t--){
          int n,k;
          cin>>n>>k;
         if(n<=k)
            cout<<(k+n-1)/n<<'
    ';//这样可以向上取整
            else{
            int    ans=n%k?2:1;
            cout<<ans<<'
    ';
          }
      }
      return 0;
    }

    B. Inflation

     

    把所有的加到第一个上就好了

    #include <bits/stdc++.h>
    #define  int long long
    #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
    const int maxn=2e5+50;
    const int INF=0x3f3f3f3f;
    using namespace std;
    int a[maxn];
    int f[106][106];
    signed main(){
        IOS;
      int t;cin>>t;
      while(t--){
          double n,k;
          cin>>n>>k;
          for(int i=0;i<n;i++)cin>>a[i];
          int sum=a[0];
          int  ans=0;
          for(int i=1;i<n;i++){
              if(a[i]*100/k>sum){
                  double t;
                 t=ceil(a[i]*100/k);
                 t-=sum;
                  ans+=t;
                  sum+=t;
               }
              sum+=a[i];
          }
          cout<<ans<<endl;
      }
      return 0;
    }
    View Code

    C. Longest Simple Cycle

            

                      

                 题意:先给一个数字n,后面三行分别为n个绳子的长度,最上面的点连接前一个的第几个点,最下面的绳子连接上一个的点,求最大回路,

        我是采用动态规划,记录每一条绳子的最大回路的数据,然后实时更新最大值;

    #include <bits/stdc++.h>
    #define  int long long
    #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
    const int maxn=2e6+50;
    const int INF=0x3f3f3f3f;
    using namespace std;
    int c[maxn];
    int a[maxn];
    int  b[maxn];
    int f[maxn];
    signed main(){
        IOS;
      int t;cin>>t;
      while(t--){
         int n;cin>>n;
         for(int i=0;i<n;i++)cin>>c[i];
         for(int i=0;i<n;i++)cin>>a[i];
         for(int i=0;i<n;i++)cin>>b[i];
         f[0]=0;
         int ans=-1;
         for(int i=1;i<n;i++){
           if(a[i]==b[i]){f[i]=c[i]+1;
               ans=max(ans,f[i]);
           }
           else {
               f[i]=max(f[i-1]-abs(a[i]-b[i]),abs(a[i]-b[i]))+2+c[i]-1;
    //f[i-1]-abs(a[i]-b[i])+2+c[i]-1是如果和前面一个联通的值,abs(a[i]-b[i])+2+c[i]-1是不和前面联通的值,两值求最大就好了; ans
    =max(ans,f[i]); }//cout<<f[i]<<" "; } cout<<ans<<' '; } return 0; }
  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/ahijing/p/14352163.html
Copyright © 2011-2022 走看看