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

2020.06.09-习题训练五

作者:互联网

A - Sum of Odd Integers

题意:k个不同奇数的和是否可以等于n,

思路:由题目知道必须 n,k奇偶相同,然后就是 k 个奇数相加最小值大于 n肯定不能组成

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 int main(){
 7     int t;
 8     scanf("%d",&t);
 9     while(t--){
10         long long int n,k;
11         scanf("%lld %lld",&n,&k);
12         if(n<k*k){
13             printf("NO\n");
14         }else if(n%2==0&&k%2==0){
15             printf("YES\n");
16         }else if(n%2==1&&k%2==1){
17             printf("YES\n");
18         }else{
19             printf("NO\n");
20         }
21 
22     }
23 
24 }
View Code

B - Princesses and Princes

题意:有n个公主和王子,每个公主都有0-n个喜欢的王子,匹配他们,如果全部匹配上输出OPTIMAL,否则输出IMPROVE,并输出一个未匹配的公主 和一个王子(手动匹配的)。

思路:每位公主喜欢的王子都是从小到大给出的。所以我们创立一个bool数组,用于判断王子是否已婚,再开始遍历每个公主,一旦一个公主匹配上就结束,只到最后。如果一个公主没有匹配上就记录这个数(公主)。

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6 const int _max=1e5+50;
 7 bool flag[_max];
 8 int main(){
 9     int t;
10     cin>>t;
11     while(t--){
12         memset(flag,false,sizeof flag);
13         int n,k=0,w=-1;//w表示未婚的公主编号,k表示第k个公主
14         cin>>n;
15         while(n--&&++k){
16             int s,a[_max];
17             cin>>s;
18             for(int i=0;i<s;i++)
19               cin>>a[i];
20             bool b=false;//用于判断公主是否已婚,默认为未婚
21             for(int i=0;i<s;i++){
22                 if(flag[a[i]]==false)//判断a[i]号王子是否已婚
23                     {
24                    flag[a[i]]=true;
25                    b=true;
26                    break;
27                 }
28             }
29             if(!b)//如果b==false则说明该公主未婚,更新w的值
30               w=k;
31         }
32         if(w!=-1)
33         {
34             cout<<"IMPROVE"<<endl;
35             int v=1;
36             for(int i=1;i<=k;i++)//遍历标记数组找到未婚的王子
37               if(flag[i]==false)
38               {
39                   v=i;
40                   break;
41               }
42             cout<<w<<" "<<v<<endl;
43         }
44         else
45         {
46             cout<<"OPTIMAL"<<endl;
47         }
48     }
49     
50     return 0;
51 }                    
View Code

C - EhAb AnD gCd

题意:GCD(a,b)+LCM(a,b)=x,给出x,找出任意组的a和b

思路:直接让a为1即可,然后输出1和另一个数

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 int main(){
 7     int t;
 8     scanf("%d",&t);
 9     while(t--){
10         long long int a;
11         scanf("%lld",&a);
12         printf("1 %d\n",a-1);
13     }
14 
15 }
View Code

D - CopyCopyCopyCopyCopy

题意:数组中不重复的有多少个

思路:建立set,直接去重

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<map>
 7 #include<set>
 8 using namespace std;
 9 int main(){
10     int t;
11     scanf("%d",&t);
12     while(t--){
13         int n;
14         scanf("%d",&n);
15         int num;
16         set<int> a;
17         for(int i=0;i<n;i++){
18             scanf("%d",&num);
19             a.insert(num);
20         }
21         printf("%d\n",a.size());
22 
23     }
24 }
View Code

F - Yet Another Tetris Problem

题意:判断这一组数是否与第一个数具有相同的奇偶性

思路:直接判断这一组数是否与第一个数具有相同的奇偶性,如果都是奇数或者都是偶数就可以

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 int main(){
 8     int i,t;
 9     scanf("%d",&t);
10     while(t--){
11         int n,ji,ou;
12         scanf("%d",&n);
13         int a[100]={0};
14         for(i=0,ji=0,ou=0;i<n;i++){
15             scanf("%d",a+i);
16             if(a[i]%2==1){
17                 ji++;
18             }else{
19                 ou++;
20             }
21         }
22         if(ji!=0&&ou!=0){
23             printf("NO\n");
24         }else{
25             printf("YES\n");
26         }
27     }
28 }
View Code

G - Yet Another Palindrome Problem

题意:只要找到两个相同的数字并且他们不相邻就行

代码:

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 
 5 const int maxx=5e3+100;
 6 vector<int> p[maxx];
 7 int n;
 8 
 9 int main()
10 {
11     int t,x;
12     scanf("%d",&t);
13     while(t--)
14     {
15         scanf("%d",&n);
16         for(int i=1;i<=n;i++) p[i].clear();
17         for(int i=1;i<=n;i++) scanf("%d",&x),p[x].push_back(i);
18         int flag=0;
19         for(int i=1;i<=n;i++)
20         {
21             if(p[i].size()>2||(p[i].size()==2&&p[i][0]+1!=p[i][1]))
22             {
23                 flag=1;
24                 break;
25             }
26         }
27         if(flag) cout<<"YES"<<endl;
28         else cout<<"NO"<<endl;
29     }
30        //system("pause")
31     return 0;
32 }
View Code

H - Frog Jumps

题意:让小青蛙向右跳的时候的步数是连续L的最大长度就行,遍历字符串数出来最大的连续L的长度

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int t;
 6     cin>>t;
 7     while(t--)
 8     {
 9         string s;
10         int time = 0,m = 0;
11         cin>>s;
12         int i;
13         for(i = 0;i < s.length();i++)
14         {
15             if(s[i]=='L'){
16             time++;
17             m = max(time,m);
18             }
19             else time = 0;
20         }
21         //system("pause")
22         cout<<m+1<<endl;
23     }
24 }
View Code

 

标签:std,题意,int,scanf,09,2020.06,while,习题,include
来源: https://www.cnblogs.com/bonel/p/13121525.html