您的位置:首页 > 其它

AtCoder. Tenka1 Programmer Contest C,D

2017-10-01 09:53 337 查看
做了两道水题,然后看各路大神虐菜。


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 h, n and w such
that 4⁄N=1⁄h+1⁄n+1⁄w.
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,w≤3500.

Inputs

Input is given from Standard Input in the following format:
N


Outputs

Print a triple of positive integers h, n 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

4⁄2=1⁄1+1⁄2+1⁄2.

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

1≤N≤105
0≤K<230
0≤Ai<230(1≤i≤N)
1≤Bi≤109(1≤i≤N)
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 83 6
6 28 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: