258人阅读 评论(0)

# C. Jon Snow and his Favourite Number

#include <bits/stdc++.h>

using namespace std;

const int maxn = 100010;
int n,k,x;

int cnt[1024][2];

int main(){

cin>>n>>k>>x;

for(int i=0;i<n;i++){
int num;
scanf("%d",&num);
cnt[num][0]++;
}

int cur = 0;
int pre = 1;
while(k--){
swap(cur,pre);
//sort

for(int i=0;i<1024;i++){
cnt[i][cur] = 0;
}

int p = 0;
for(int i=0;i<1024;i++){
cnt[i][cur] += cnt[i][pre]>>1;
cnt[i^x][cur] += cnt[i][pre]>>1;

if((cnt[i][pre])&1){
if(p&1){
cnt[i][cur]++;
}else{
cnt[i^x][cur]++;
}
}
p+=cnt[i][pre];
}

}
for(int i=1023;;i--){
if(cnt[i][cur]){
cout<<i<<" ";
break;
}
}

for(int i=0;;i++){
if(cnt[i][cur]){
cout<<i<<endl;
break;
}
}
return 0;
}

# D. Jon and Orbs

#include <bits/stdc++.h>

using namespace std;

double p_count[1010];

int ans[1010];

int main(){
int k,q;
cin>>k>>q;
int p = 1;
double target;
for(int i=0;i<=k;i++){
p_count[i] = 0;
}

p_count[0] = 1.0;
for(int day = 1;p<=1000;day++){
target = (p+0.0)/2000;
for(int i=k;i>0;i--){
double tmp = p_count[i-1] * ((k-i+1.0)/k);
p_count[i] += tmp;
p_count[i-1] -= tmp;
}

while(p_count[k] >= target){
ans[p] = day;
p++;
target = (p+0.0)/2000;
if(p>1000)break;
}
}

while(q--){
cin>>p;
cout<<ans[p]<<endl;
}
return 0;
}

# E. Game of Stones

#include <bits/stdc++.h>

using namespace std;

#define ll long long

int cnt[66];

int a[66];

int main(){
int n;
cin>>n;

for(int i=0;i<n;i++){
int num;
scanf("%d",&num);
cnt[num]++;
}

for(int i=1;i<=60;i++){
a[i] = a[i-1] + i;
}

vector<int> p;
for(int i=1;i<=60;i++){
cnt[i] %= 2;
}

for(int i=1;i<=60;i++){
if(cnt[i]){
for(int j=1;j<=60;j++){
if(a[j]>i){
cnt[j-1]++;
cnt[i]--;
break;
}
}
}
}

int sum = 0;
for(int i=1;i<=60;i++){
while(cnt[i]--){
sum ^= i;
}
}

if(sum){
puts("NO");
}else{
puts("YES");
}

return 0;
}

# F. Barrels and boxes

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const ll mod = 1e9 + 7;

ll fac[100010];

//扩展欧几里德
void ExEuclid(ll a,ll b,ll &x,ll &y,ll &q){
if(b==0){
x=1;y=0;q=a;
return;
}
ExEuclid(b,a%b,y,x,q);
y-=x*(a/b);
}

//逆元
ll inv(ll num){
ll x,y,q;
ExEuclid(num,mod,x,y,q);
if(q==1)return (x+mod)%mod;
}

ll C(int n,int k){
if(n<0 || k<0)return 0;
if(n<k)return 0;
ll res = fac[n];
res *= inv(fac[k]);
res %= mod;
res *= inv(fac[n-k]);
res %= mod;
return res;
}

ll solve(int f,int w,int mn,int mx){
if(w == 0 || f == 0)return 1;

ll res = 0;
// w -> i
for(int i=mn;i<=mx;i++){
ll t = C(w-1,i-1);
if(i>1){
res += t * C(f-1,i-2);
}
res += t * C(f-1,i-1) * 2;
res += t * C(f-1,i);
res %= mod;
}
res %= mod;
return res;
}

int main(){
fac[0] = 1;
for(int i=1;i<=100000;i++){
fac[i] = fac[i-1] * i;
fac[i] %= mod;
}

int f,w,h;
cin>>f>>w>>h;

//p/q
ll p = 0;
ll q = 0;
if( h == 0){
p = solve(f,w,1,w);
q = solve(f,w,1,w);
}else{
q = solve(f,w,1,w);

for(int i=1;;i++){
int ww = w - i*h;
if(ww<i)break;
p += solve(f,ww,i,i);
}
p %= mod;
if(w == 0){
p = 1;
q = 1;
}
}

ll ans = p * inv(q);
ans %= mod;
cout<<ans<<endl;
return 0;
}
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：183981次
• 积分：6252
• 等级：
• 排名：第4199名
• 原创：455篇
• 转载：2篇
• 译文：0篇
• 评论：58条
文章分类
阅读排行
最新评论