Submission #963465

#TimeUsernameProblemLanguageResultExecution timeMemory
9634658pete8비스킷 담기 (IOI20_biscuits)C++17
0 / 100
86 ms59672 KiB
#include "biscuits.h" #include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include <cassert> #include <cstdint> #include<cmath> #include<set> #include<algorithm> #include <iomanip> #include<numeric> //gcd(a,b) #include<bitset> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-loops") using namespace std; #define int long long #define double long double int lg=60; long long count_tastiness(long long x, vector<ll>v) { int sum; if(x<=10000){ //it x!=1 /* we can act like everything cost the same in the dp part but then change how we do spread? or change at dp part */ int k=v.size(); vector<int>nv(k+10); k=nv.size(); for(int i=0;i<k-1;i++){ if(i<v.size())nv[i]+=v[i]; if(nv[i]<x)continue; int g=nv[i]/x; int leftover=nv[i]%x; nv[i]-=leftover; nv[i+1]+=leftover/2; if(g%2)nv[i+1]+=(((g-1)*x)/2),nv[i]-=(g-1)*x; else nv[i+1]+=(((g-2)*x)/2),nv[i]-=(g-2)*x; }//change at dp part int idk=2*k*x; vector<vector<int>>dp(k+5,vector<int>(idk+5,0)); dp[0][0]=1; for(int i=0;i<k;i++){ for(int j=idk;j>=nv[i];j--)dp[i][j]=dp[i][j-nv[i]];//shifting for(int j=nv[i]-1;j>=0;j--)dp[i][j]=0; for(int j=idk;j>=0;j--){ if(j-x>=0)dp[i+1][(j-x)/2]+=dp[i][j]; dp[i+1][(j/2)]+=dp[i][j]; } } sum=0; for(int i=0;i<=idk;i++)sum+=dp[k][i]; return sum; } else{ int k=v.size(); sum=0; for(auto i:v)sum+=i; if(sum>100000)assert(0); vector<vector<int>>dp(k+63,vector<int>(sum+5,0)); dp[0][0]=1; for(int i=0;i<=k+61;i++){ if(i<v.size()){ for(int j=sum;j>=v[i];j--)dp[i][j]=dp[i][j-v[i]];//shifting for(int j=v[i]-1;j>=0;j--)dp[i][j]=0; } for(int j=sum;j>=0;j--){ if(j-x>=0)dp[i+1][(j-x)/2]+=dp[i][j];//use x dp[i+1][(j/2)]+=dp[i][j];// } } int ans=0; for(int i=0;i<=sum;i++)ans+=dp[k+62][i]; return ans; } }/* int32_t main(){ int x,k;cin>>x>>k; vector<int>in(k); for(int i=0;i<k;i++)cin>>in[i]; cout<<count_tastiness(x,in)<<'\n'; }*/

Compilation message (stderr)

biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:52:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |    if(i<v.size())nv[i]+=v[i];
      |       ~^~~~~~~~~
biscuits.cpp:84:8: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |    if(i<v.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...