Google Round H 2019 - Kick Start 2019

A: 题意:

找到每一天最多的 i , 使得至少有 i 篇论文引用了 i 个论文

题解: 通过树状数组找到是否存在比前一个答案大一的结果,大样例也过了

#include<iostream>
#include<cstring>
using namespace std;
#define N 100001
#define nn 100000
int num[N];
int ans[N];
int c[N];
int n;
int lowbit(int x){

  return x&(-x);
}
int sum(int x){

    int a=0;
    for(int i=x;i>0;i-=lowbit(i)) a+=c[i];
      return a;
}
void update(int x,int v){

  for(int i=x;i<=nn;i+=lowbit(i)) c[i]+=v;

}
int main()
{
    // ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
    int t;
    cin>>t;
    int cas=0;
    while(t--){

        cin>>n;
        memset(c,0,sizeof(c));
        for(int i=1;i<=n;i++) {
          cin>>num[i];
          update(num[i],1);
          int ps = sum(100000)-sum(ans[i-1]);
          // cout<<sum(100000)<<" "<<sum(ans[i-1])<<endl;
          if(ps>ans[i-1]){
            ans[i]=ps;
          }else{
            ans[i]=ans[i-1];
          }
        }
        cas++;
        cout<<"Case #"<<cas<<":";
        for(int i=1;i<=n;i++)
        cout<<" "<<ans[i];
        cout<<"\n";
    }
    return 0;
}
/*
3
11 1 2
8
2 3
11 11 11
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11
1000 6 1
4 8 15 16 23 42
1
*/

 

B: 

题意: n*n 的黑白矩阵,只能翻转对角线上的格子,黑白翻转,输出全部变黑的最小翻转次数

题解:我使用直接dfs 小样例过了,大样例没过。官方题解: 把每一条对角线看成一个点,就有 4*n-2 个点,对于每个格子,都有2个对角线对它有影响,这样就可以对这两个对角线对应的点连边,如果格子是黑色,连边两点同色,否则异色。然后dfs 对图染色,使所有点为黑色。 改变一个点,它对应的点也要翻转。待补

 

C:

题意:给出 1-9 每位数字的个数,问是否能组成被11整除的数

题解: 暴力过了小样例,官方题解:数学规律,待补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值