제출 #1054727

#제출 시각아이디문제언어결과실행 시간메모리
1054727pcc비스킷 담기 (IOI20_biscuits)C++17
9 / 100
45 ms436 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

bool check(ll cnt,ll tar,vector<ll> v){
	ll b = __lg(tar);
	while(v.size()<=b)v.push_back(0);
	for(int i = 0;i<=b;i++){
		ll need = cnt*((tar>>i)&1);
		if(need>v[i])return false;
		ll rest = v[i]-need;
		rest>>=1;
		if(i+1<=b)v[i+1] += rest;
	}
	return true;
}

ll calc(vector<ll> &v){
	if(v.empty())return 1;
	ll sum = 0;
	for(int i = 0;i<v.size();i++)sum += v[i]*(1ll<<i);
	return sum;
}

long long count_tastiness(long long x, std::vector<long long> a) {
	int n = a.size();
	ll sum = 0;
	for(int i = 0;i<a.size();i++)sum += a[i]*(1ll<<i);
	if(sum<=1e5){
		ll ans = 1;
		for(int i = 1;i<=sum;i++)ans += check(x,i,a);
		return ans;
	}
	else{
		while(a.size()<60)a.push_back(0);
		for(int i = 0;i+1<a.size();i++){
			if(a[i] == 0)continue;
			ll rest = (a[i]-1)>>1;
			a[i+1] += rest;
			a[i] -= rest<<1;
		}
		vector<ll> v;
		ll ans = 1;
		for(int i = 0;i<a.size();i++){
			if(a[i] == 0){
				ans *= calc(v);
				v.clear();
			}
			else{
				v.push_back(a[i]);
			}
		}
		return ans;
	}
}

컴파일 시 표준 에러 (stderr) 메시지

biscuits.cpp: In function 'bool check(long long int, long long int, std::vector<long long int>)':
biscuits.cpp:9:16: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
    9 |  while(v.size()<=b)v.push_back(0);
      |        ~~~~~~~~^~~
biscuits.cpp: In function 'long long int calc(std::vector<long long int>&)':
biscuits.cpp:23:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  for(int i = 0;i<v.size();i++)sum += v[i]*(1ll<<i);
      |                ~^~~~~~~~~
biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:30:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for(int i = 0;i<a.size();i++)sum += a[i]*(1ll<<i);
      |                ~^~~~~~~~~
biscuits.cpp:38:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |   for(int i = 0;i+1<a.size();i++){
      |                 ~~~^~~~~~~~~
biscuits.cpp:46:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |   for(int i = 0;i<a.size();i++){
      |                 ~^~~~~~~~~
biscuits.cpp:28:6: warning: unused variable 'n' [-Wunused-variable]
   28 |  int n = a.size();
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...