A - Interview
题意:一个区间l,r。f(x,l,r)是区间从左到右用|运算符运算所得到的结果,求使得两个数组a,b中相同l,r得到的最大和
思路:直接暴力
#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<cmath> using namespace std; const int qq=1000+10; long long a[qq],b[qq]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%lld",&a[i]); for(int i=0;i<n;++i) scanf("%lld",&b[i]); long long maxn=0; for(int j,i=0;i<n;++i){ long long ans=0,cns=0; for(j=i;j<n;++j){ ans|=a[j]; cns|=b[j]; maxn=max(maxn,ans+cns); } } printf("%lld ",maxn); }
B - Print Check
题意:给出一个n*m的矩阵,有k个操作,给出三个数a,b,c,如果a=1的话 代表讲b行的所有数赋值c ,a是2的话就是对b列进行操作
思路:因为后面赋值的会覆盖前面的赋值,所以每一个点(i,j)如果赋值情况越晚,那么最后就是这个赋值情况
1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 const int qq=5005; 6 int n,m,k,x,y,z,a[qq],b[qq],r[qq],c[qq]; 7 int main() 8 { 9 cin >> n >> m >> k; 10 for(int i=1;i<=k;++i){ 11 cin >> z >> x >> y; 12 if(z==1){ 13 r[x]=y;a[x]=i; 14 } 15 else{ 16 c[x]=y;b[x]=i; 17 } 18 } 19 for(int j,i=1;i<=n;++i){ 20 for(j=1;j<=m;++j) 21 if(a[i]>b[j]) 22 cout << r[i] << " "; 23 else 24 cout << c[j] << " "; 25 cout << endl; 26 } 27 }