ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2020.06.09-习题训练五

2020-06-13 19:57:56  阅读:235  来源: 互联网

标签:std 题意 int scanf 09 2020.06 while 习题 include


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有