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