其他分享
首页 > 其他分享> > 2020.06.09——习题训练五

2020.06.09——习题训练五

作者:互联网

A - Sum of Odd Integers

题意:给你一个n和k,让你判断这个n能否由k个奇数构成

思路:第一眼感觉不会,然后有个同学说,先看看k个最小能组的数是多少,于是一算是k^2,也就是说当n<k^2时,是不能成功的,但问题是当n>=k^2时,却不一定能成功,那么怎么能成功,k个奇数, 变化是k^2加上一个偶数,也就是说,k^2为奇数,加偶数为奇数,n为奇数,否则就是偶数,所以k和n奇偶性相同

代码:

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
#define ll long long
int main(){
int t;
cin>>t;
while(t--){
    ll n,k;
    cin>>n>>k;
    if((n>=k*k)&&(n%2==k%2))cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}
}

B - Princesses and Princes

题意:意思就是,有n个公主,n个王子,让你去给每一位公主匹配王子。其中每位公主都有心目中的王子,在这个基础上进行匹配。

如果这样就可以让n个公主找到自己的王子,那么就输出“OPTIMAL”,否则输出任意一个 没有找到王子的公主 以及其能够匹配的王子。

当然,一位公主只能匹配一位王子。 

思路:说实话,,这道题我没做出来,看了别人的才会

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {

        int n;
        cin>>n;
        set<int> st;
        for(int i=1; i<=n; i++)
            st.insert(i);//n个公主,n个王子
        int d,v,flag=0;
        for(int i=1; i<=n; i++)//公主数
        {
            int m;
            cin>>m;
            int f=0;
            for(int j=1; j<=m; j++)//公主心中王子
            {
                int x;
                cin>>x;
                if(st.find(x)!=st.end()&&f==0)//在集合里找王子
                {

                    st.erase(x);
                    f++;
                }

            }
            if(f==0)
            {
                d=i;//公主没找到,标记公主
                flag=1;
            }
        }
        if(flag==1)
        {
            cout<<"IMPROVE"<<endl;
            cout<<d<<" "<<*(st.begin())<<endl;//集合里还剩下的
        }
        else
            cout<<"OPTIMAL"<<endl;
    }

    return 0;
}

C - EhAb AnD gCd

题意:给你一个数x,找到两个数,使这俩数的最大公约数和最小公倍数之和等于x,并输出这两数

思路:先上来,按常规想,从一开始遍历,结果在test 3超时了,然后发现有人告诉我GCD(1,n)=1,LCM(1,n)=n,所以我们把n换成n−1,那么最终答案是不是就是1,n-1了

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
#define ll long long
/*int gcd(int a,int b)//辗转相除法(欧几里德算法)求最大公约数
{
    return b ? gcd(b,a%b) : a;
}
int lcm(int a,int b)
{
    return a*b/gcd(a,b);//最小公倍数
}*/
//lmc/gcd一定能除尽,因为最小公倍数/最大公约数
//所以分为两部分
int main(){
int t;
cin>>t;
while(t--){
int n,w=0;
cin>>n;
/*for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
    if((gcd(i,j)+lcm(i,j))==n){
        cout<<i<<" "<<j<<endl;
        w=1;
        break;
    }
}
if(w==1)break;
}*/
for(int i=1;i<n;i++){
    if(n%i==0){
        cout<<i<<" "<<n-i<<endl;
        break;
    }
}
}
}

D - CopyCopyCopyCopyCopy

题意:给你一组数,使其循环后,删除某些数,使其成为不重复的递增序列

思路:一定是里面的数,排序去重即可,set我用了

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
#define ll long long
set<int> s;
int main(){
int t;
cin>>t;
while(t--){
s.clear();
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
    cin>>x;
    s.insert(x);
}
cout<<s.size()<<endl;
}
}

 

 F - Yet Another Tetris Problem

题意:像俄罗斯方块,但是每次加两块,看能否全部消去

思路:找到最高的和最低的,看差是否为2的倍数就行

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
#define ll long long
int a[N];
int main(){
int t;
cin>>t;
while(t--){
int n,max1=-100,w=0;
cin>>n;
for(int i=0;i<n;i++){
    cin>>a[i];
    max1=max(max1,a[i]);
}
for(int i=0;i<n;i++){
    if((max1-a[i])%2!=0){
        cout<<"NO"<<endl;
        w=1;
        break;
    }
}
if(w==0)cout<<"YES"<<endl;
}
}

G - Yet Another Palindrome Problem

题意:有一个数组,问能否删去一些数使它成为长度至少为3的回文字符串。

思路:是三,能成回文就好,好像能删

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
#define ll long long
int a[N];
int main(){
int t;
cin>>t;
while(t--){
int n,w=0;
cin>>n;
for(int i=0;i<n;i++)
    cin>>a[i];
for(int i=0;i<n-2;i++){
    for(int j=i+2;j<n;j++){
        if(a[i]==a[j]){
            cout<<"YES"<<endl;
            w=1;
            break;
        }
    }
    if(w==1)break;
}
if(w==0)cout<<"NO"<<endl;
}
}

H - Frog Jumps

题意:青蛙每个位置标有L,R表示青蛙只能向左和向右跳,每次最多能跳m个长度,求m的最小值。

思路:本题我不会做,胡蒙的,,看样例的时候发现,所输出的数是连续的最长的r的长度加一,没想到过了

#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
    string s;
    cin>>s;
    int w=s.size();
    int p=0,max1=-1111;
    for(int i=0;i<w;i++){
        if(s[i]=='R')p=0;
        else p++;
    max1=max(max1,p);
    }
    cout<<max1+1<<endl;
}
}

 

 

 

 

标签:题意,int,09,cin,long,2020.06,习题,main,define
来源: https://www.cnblogs.com/1324a/p/13125440.html