AtCoder. Tenka1 Programmer Contest C,D

做了两道水题,然后看各路大神虐菜。


C - 4/N


Time limit : 2sec / Memory limit : 256MB

Score : 300 points

Problem Statement

You are given an integer N.

Find a triple of positive integers hn and w such that 4N=1h+1n+1w.

If there are multiple solutions, any of them will be accepted.

Constraints

  • It is guaranteed that, for the given integer N, there exists a solution such that h,n,w3500.

Inputs

Input is given from Standard Input in the following format:

N

Outputs

Print a triple of positive integers hn and w that satisfies the condition, in the following format:

h n w

Sample Input 1

Copy
2

Sample Output 1

Copy
1 2 2

42=11+12+12.


Sample Input 2

Copy
3485

Sample Output 2

Copy
872 1012974 1539173474040

It is allowed to use an integer exceeding 3500 in a solution.


Sample Input 3

Copy
4664

Sample Output 3

Copy
3498 3498 3498
特水数学题,看时间和数据量知直接暴力枚举h,n凑w即可,真水。


#include <iostream>
using namespace std;
#define ll long long
const int maxn=3501;
ll n;
int main(int argc, const char * argv[]) {
    ll a,b;
    ll c;
    scanf("%lld",&n);
    for(a=1;a<=maxn;++a)
        for(b=1;b<=maxn;++b){
            ll x=4*a*b-n*b-n*a;
            ll y=n*a*b;
            if(x>0 && y%x==0) {
                c=y/x;
                cout<<a<<" "<<b<<" "<<c<<endl;
                return 0;
            }
        }
    return 0;
}

D - IntegerotS


Time limit : 2sec / Memory limit : 256MB

Score : 500 points

Problem Statement

Seisu-ya, a store specializing in non-negative integers, sells N non-negative integers. The i-th integer is Ai and has a utility of Bi. There may be multiple equal integers with different utilities.

Takahashi will buy some integers in this store. He can buy a combination of integers whose bitwise OR is less than or equal to K. He wants the sum of utilities of purchased integers to be as large as possible.

Find the maximum possible sum of utilities of purchased integers.

Constraints

  • 1N105
  • 0K<230
  • 0Ai<230(1iN)
  • 1Bi109(1iN)
  • All input values are integers.

Inputs

Input is given from Standard Input in the following format:

N K
A1 B1
:
AN BN

Outputs

Print the maximum possible sum of utilities of purchased integers.


Sample Input 1

Copy
3 5
3 3
4 4
2 5

Sample Output 1

Copy
8

Buy 2 and 3 to achieve the maximum possible total utility, 8.


Sample Input 2

Copy
3 6
3 3
4 4
2 5

Sample Output 2

Copy
9

Buy 2 and 4 to achieve the maximum possible total utility, 9.


Sample Input 3

Copy
7 14
10 5
7 4
11 4
9 8
3 6
6 2
8 9

Sample Output 3

Copy
32
特水dp题,直接枚举每一位通过xor进行状态更新,O(n)

#include <iostream>
using namespace std;
#define ll long long
const int maxn=1e5+5;
int n,k,a[maxn],b[maxn];
int main(int argc, const char * argv[]) {
    scanf("%d%d",&n,&k);
    k++;
    for(int i=0;i<n;++i) scanf("%d%d",&a[i],&b[i]);
    int cur=0;
    ll tmp=0;
    ll ans=0;
    for(int bit=30;bit>=0;--bit){
        if(k&(1<<bit)){
            tmp=0;
            cur^=1<<bit;
            for(int i=0;i<n;++i){
                if((a[i]&cur)==0) tmp+=b[i];
                ans=max(ans,tmp);
            }
            cur^=1<<bit;
        }
        else cur^=1<<bit;
    }
    cout<<ans<<endl;
    return 0;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值