Submission #787884

#TimeUsernameProblemLanguageResultExecution timeMemory
787884YassirSalamaDetecting Molecules (IOI16_molecules)C++14
Compilation error
0 ms0 KiB
#include "molecules.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=200;
const int MAXM=100000;
int dp[MAXN][MAXM];
int L,U;
bool ok=false;
vector<int> ans;
vector<int> v;
int anns=0;
bool solve(int i,int sum,vector<int> a){
    if(sum>U) return dp[i][sum]=0;
    if(dp[i][sum]!=-1) return dp[i][sum];
    // anns++;
    if(L<=sum&&sum<=U){
        ans=a;
        ok=true;
        return dp[i][sum]=1;
    }
    if(i==v.size()) return dp[i][sum]=0;
    if(ok) return dp[i][sum]=1;
    vector<int> x=a;
    x.push_back(i);
    anns++;
    bool aa=solve(i+1,sum+v[i],x);
    if(aa) return dp[i][sum]=1;
    if(ok) return dp[i][sum]=1;
    bool bb=solve(i+1,sum,a);
    if(bb) return dp[i][sum]=1;
    if(ok) return dp[i][sum]=1;
    return dp[i][sum]=(aa|bb);
}

vector<int> find_subset(int l, int u, vector<int> w) {
    L=l;
    U=u;
    v=w;
    memset(dp,-1,sizeof(dp));
    solve(0,0,vector<int>(0));
    // cout<<anns<<endl;
    if(ok) return ans;
    //If no such subset
    return vector<int>(0);
}


int main() {
    int n, l, u;
    assert(3 == scanf("%d %d %d", &n, &l, &u));
    std::vector<int> w(n);
    for (int i = 0; i < n; i++)
        assert(1 == scanf("%d", &w[i]));
    std::vector<int> result = find_subset(l, u, w);
    
    
    printf("%d\n", (int)result.size());
    for (int i = 0; i < (int)result.size(); i++)
        printf("%d%c", result[i], " \n"[i == (int)result.size() - 1]);
}

Compilation message (stderr)

molecules.cpp: In function 'bool solve(int, int, std::vector<int>)':
molecules.cpp:14:32: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   14 |     if(sum>U) return dp[i][sum]=0;
      |                      ~~~~~~~~~~^~
molecules.cpp:20:26: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   20 |         return dp[i][sum]=1;
      |                ~~~~~~~~~~^~
molecules.cpp:22:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     if(i==v.size()) return dp[i][sum]=0;
      |        ~^~~~~~~~~~
molecules.cpp:22:38: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   22 |     if(i==v.size()) return dp[i][sum]=0;
      |                            ~~~~~~~~~~^~
molecules.cpp:23:29: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   23 |     if(ok) return dp[i][sum]=1;
      |                   ~~~~~~~~~~^~
molecules.cpp:28:29: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   28 |     if(aa) return dp[i][sum]=1;
      |                   ~~~~~~~~~~^~
molecules.cpp:29:29: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   29 |     if(ok) return dp[i][sum]=1;
      |                   ~~~~~~~~~~^~
molecules.cpp:31:29: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   31 |     if(bb) return dp[i][sum]=1;
      |                   ~~~~~~~~~~^~
molecules.cpp:32:29: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   32 |     if(ok) return dp[i][sum]=1;
      |                   ~~~~~~~~~~^~
molecules.cpp:33:22: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   33 |     return dp[i][sum]=(aa|bb);
      |            ~~~~~~~~~~^~~~~~~~
/usr/bin/ld: /tmp/cc4DFZjn.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc3HieMk.o:molecules.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status