Submission #963654

#TimeUsernameProblemLanguageResultExecution timeMemory
9636548pete8비스킷 담기 (IOI20_biscuits)C++17
42 / 100
590 ms14840 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){ int k=v.size(); k++; vector<int>nv(k,0); 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; 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=(k*x); vector<vector<int>>dp(2,vector<int>(idk+2,0)); //60*(60*1e4)*10 //k*idk*q dp[0][0]=1; for(int i=0;i<k-1;i++){ int cur=(i%2),nx=(i%2)^1; for(int j=idk;j>=0;j--){ int rj=j+nv[i]; if(rj-x>=0)dp[nx][(rj-x)/2]+=dp[cur][j]; dp[nx][(rj/2)]+=dp[cur][j]; dp[cur][j]=0; } } sum=0; for(int i=0;i<=idk;i++){ int val=dp[(k-1)%2][i],have=nv[k-1]+i; have/=x; sum+=(val*(have+1)); } 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 t;cin>>t; while(t--){ 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:47: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]
   47 |    if(i<v.size())nv[i]+=v[i];
      |       ~^~~~~~~~~
biscuits.cpp:83: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]
   83 |    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...