首页 > 其他 > 详细

2020-05-22 — 习题训练二

时间:2020-05-26 22:30:14      阅读:43      评论:0      收藏:0      [点我收藏+]

题目:A - Candies  CodeForces - 1343A

题意:给一个数n,在k>1的情况下找一个x符合:x+2x+4x+?+2k1x=nx+2x+4x+?+2k−1x=n.

做法:先求2n的前缀和,然后然后每一项进行判断。

 

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
long long quick_power(int x, int y)
{
    if(y==1)return x;
    if(y==0)return 1;
    long long res;
    if(y%2==0)
    {
        res=quick_power(x,y/2);
        res=res*res;
    }
    else
    {
        res=quick_power(x,y/2);
        res=res*res*x;
    }
    return res;
}

ll a[30];
int main(){
    a[0]=1;
    for(int i = 1;i<=30;i++){
        a[i]=quick_power(2,i);
        a[i]+=a[i-1];
    }    
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        int flag = 0;
        for(int j = 1;j<=30;j++){
            if(n%a[j]==0){
                cout<<n/a[j]<<endl;
                break;
            }
        }
    } 
    return 0;
}

 

 

题目:B - Balanced Array CodeForces - 1343B 

题意:给一个数n,给出n个长度的数组,前n/2个位偶数,后n/2位奇数,保证奇数加偶数相等。

做法:若n被2整除且不被4整除,容易看出两边不会相等因为这样奇数和永远都是奇数。当能够被4整除时,先随便给n/2个偶数,再随便给n/2-1个奇数,然后把偶数和减去奇数的和得到最后一个奇数。

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;int main(){
        
    int t;
    cin>>t;
    while(t--){
        int n;
        ll l=0,r=0;
        cin>>n;
        if(n%4){
            cout<<"NO"<<endl;
        }
        else{
            cout<<"YES"<<endl;
            for(int i = 1;i<=n/2;i++){
                cout<<i*2<<" ";
                l+=(i*2);
            }
                
            for(int i = 1;i<=n/2-1;i++){
                    cout<<(i-1)*2+1<<" ";
                    r+=((i-1)*2+1);
            }
            cout<<l-r;
            cout<<endl;

        }
    } 
    return 0;
}

题目:C - Ichihime and Triangle  CodeForces - 1337A 

题意:给出四个数,a, b, c, d, abcd.。然后在四个数间找三个数x ,y, z.

  • axb.
  • byc.
  • czd.
  • 要求三个数可以组成三角形

做法:我们容易找到三条边越相近越好,因此x=b,z=c。这也是题意的最符合的x与z。再根据三角形的性质,两边之差小于第三边y > c-b。

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;

int main(){
        
    int t;
    cin>>t;
    while(t--){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        int tmp;
        for(int i =c;i>=b;i--){
            if(i>c-b){
                tmp=i;
                break;
            }
        }
        cout<<b<<" "<<tmp<<" "<<c<<endl;;
    } 
    return 0;
}

 

题目:D - Kana and Dragon Quest game CodeForces - 1337B 

题意:给一个数n,然后有两种操作,第一种操作消耗将n=n/2+10,操作次数为a,第二种为n-10,操作次数为b。在两种操作次数内可不可以将n操作到n<=0.

做法:先使用第一种,但是判断剩余的n可不可以仅使用b完成。如果不可以接着使用第一种,可以的话,直接使用b。最后判断n的值。

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=3e6+10;

int main(){
        
    int t;
    cin>>t;
    while(t--){
        int x,a,b;
        cin>>x>>a>>b;
        while(a>0||b>0){
            
                if(x>10*b&&a>0){
                    x=x/2+10;
                    a--;
                }
                else if(b>0){
                    x-=10;
                    b--;
                }
            if(x<=0)
                break;        
        }
        
        if(x<=0)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

题目:E - Candies and Two Sisters CodeForces - 1335A 

题意:给个糖果,把糖果分给A,B,但是要保证A的大于B的。

做法:为奇数的时候1……n/2,与n/2+1……n-1结合一下。偶数的时候去掉两个相等的时候。

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=3e6+10;

int main(){
        
    int t;
    cin>>t;
    while(t--){
        ll n;
        cin>>n;
        if(n%2){
            cout<<n/2<<endl;
        }
        else{
            cout<<n/2-1<<endl;
        }
    }
    return 0;
}

题目:F - Construct the String CodeForces - 1335B

题意:给出三个数n, a, b。让你给出一个长度为n的字符串,保证每a个连着的字符穿,至少有b个不同的字符。

做法:直接输出b个不同的字符,在‘a‘……‘a‘+len(b)-1之间循环,保证在‘a‘……‘z‘之间,长度为n。因为保证存在了。

#include<iostream>
#include<cstdio>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=3e6+10;

int main(){
        
    int t;
    cin>>t;
    while(t--){
        ll n,a,b;
        cin>>n>>a>>b;
        char s=a;
        int in=0;
        for(int i = 1;i<=n;i++,in++){
            printf("%c",s);
            if(s==z)
                s=a;
            else if(s==a+b-1)
                s=a;
            else
                s=s+1;
        }    
        cout<<endl;
    }
    return 0;
}

 

2020-05-22 — 习题训练二

原文:https://www.cnblogs.com/aixiaodezsh/p/12968616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!