A
分析
下边比上边大就换
AC代码
#include<iostream> #include<algorithm> using namespace std; const int N=10010; int n,t,max1,max2; int a[N],b[N]; int main() { cin>>n; while(n--) { max1=0,max2=0; cin>>t; for(int i=0;i<t;i++) cin>>a[i]; for(int i=0;i<t;i++) { cin>>b[i]; if(b[i]>a[i]) swap(a[i],b[i]); } for(int i=0;i<t;i++) { max1=max(max1,a[i]); max2=max(max2,b[i]); } cout<<max1*max2<<endl; } return 0;}
B
分析
从后面向前复制,求最小操作数。先反着输入(输入后在翻转也行),
AC代码
#include<iostream> #include<algorithm> using namespace std; int t,n,x,anss; long long a[200010]; int main() { cin>>t; while(t--) { anss=0; cin>>n; for(int i=n;i;i--) cin>>a[i]; for(long long i=2;i<=n;i++) { if(a[i]!=a[i-1]) { anss++; i=(i-1)*2; if(i>n) break; a[i]=a[1]; } } cout<<anss<<endl; } return 0; }