Codeforces Round #344 (Div. 2)

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 } 
原文地址:https://www.cnblogs.com/sasuke-/p/5244830.html