A Architecture
1.题意
一开始被题意搞晕了,其实就是给定两组数,判断它们的最大值是否相等。
2.题解
分别维护两个最大值,判断是否相等。
3.代码
#include<bits/stdc++.h> using namespace std; int m,n; int main(){ cin>>m>>n; int x; int maxr=0,maxc=0; for(int i=1;i<=m;i++){ cin>>x; maxr=max(maxr,x); } for(int i=1;i<=n;i++){ cin>>x; maxc=max(maxc,x); } if(maxr==maxc) cout<<"possible"<<endl; else cout<<"impossible"<<endl; return 0; }
F.Floor Plan
1.题意
给定一个正整数n,求出两个非负整数m、k,使得n=m^2-k^2。(答案不唯一,求出一组m、k即可)
2.题解
之前没做过类似的题,慢慢摸索着找到了规律。当n为奇数时,m=(n+1)/2,k=m-1肯定符合题意,输出这一组m、k即可,例:5 3 2 ;当n为偶数且为4的倍数时,m=n/4+1,k=n/4-1符合题意,输出即可,例:8,3,1 。
3.代码
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll n; 5 int main(){ 6 scanf("%lld",&n); 7 if(n%4==0){ 8 printf("%lld %lld",n/4+1,n/4-1); 9 return 0; 10 } 11 if(n%2){ 12 printf("%lld %lld",(n+1)/2,(n+1)/2-1); 13 return 0; 14 } 15 16 printf("impossible"); 17 18 return 0; 19 }
G Greetings!
1.题意
给定一个字符串,有字符‘e'便双倍输出。
2.题解
遍历字符串,遇到’e‘就输出“ee” 。
3.代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s; 4 int main(){ 5 cin>>s; 6 for(int i=0;i<s.size();i++){ 7 if(s[i]=='e') 8 cout<<"ee"; 9 else 10 cout<<s[i]; 11 } 12 13 return 0; 14 }
I Inquiry I
1.题意
给定n个正整数,求下面公式的最大值。
(a1^2 +a2^2+···+ak^2)·(ak+1+ak+2+···+an)
2.题解
求前半部分的前缀和与后半部分的后缀和,遍历维护最大值。
3.代码
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll n,ans; 5 ll a[1000005],l[1000005],r[1000005]; 6 int main(){ 7 scanf("%d",&n); 8 for(ll i=1;i<=n;i++) 9 scanf("%d",&a[i]); 10 for(ll i=1;i<=n;i++) 11 l[i]=l[i-1]+a[i]*a[i]; 12 for(ll i=n;i>=1;i--) 13 r[i]=r[i+1]+a[i]; 14 for(ll i=1;i<n;i++) 15 ans=max(ans,l[i]*r[i+1]); 16 printf("%lld\n",ans); 17 18 return 0; 19 }