답안 #165370

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
165370 2019-11-26T15:30:11 Z Ruxandra985 조교 (CEOI16_popeala) C++14
17 / 100
2000 ms 1656 KB
#include <cstdio>
#include <iostream>
#define INF 3000000000
using namespace std;
long long dp[20001][51];
long long ok[20010];
long long val[20010];
char res[51][20010];
long long mask[20010];
int biti1 (long long x){
    int sol = 0;
    while (x){
        sol = sol + (x&1);
        x/=2;
    }
    return sol;
}

int main()
{
    FILE *fin = stdin;
    FILE *fout = stdout;
    int n,t,s,i,j,k,p;
  	long long nr;
    fscanf (fin,"%d%d%d",&n,&t,&s);
    for (i=1;i<=t;i++){
        fscanf (fin,"%lld",&val[i]);
        val[i]+=val[i-1];
    }
    for (i=1;i<=n;i++){
        for (j=1;j<=t;j++){
            res[i][j] = fgetc(fin);
            while (res[i][j]!='1' && res[i][j]!='0')
                res[i][j] = fgetc(fin);
        }
    }
    for (j=1;j<=t;j++){
        for (i=1;i<=n;i++)
            mask[j] = mask[j] * 2 + (res[i][j] - '0');
    }
    for (i=0;i<=t;i++)
        for (j=0;j<=s;j++)
            dp[i][j] = INF;
    dp[0][0] = 0;

    for (i=1;i<=t;i++){
        for (j=1;j<=s;j++){

            nr = mask[i];
            for (k=i;k;k--){ /// in subtaskul j sunt testele i..k

                nr = (nr & mask[k]);

                dp[i][j] = min(dp[i][j] , dp[k-1][j-1] + (long long)biti1(nr) * (val[i] - val[k-1]));
            }
        }
    }
    for (j=1;j<=s;j++)
        fprintf (fout,"%lld\n",dp[t][j]);
    return 0;
}

Compilation message

popeala.cpp: In function 'int main()':
popeala.cpp:23:21: warning: unused variable 'p' [-Wunused-variable]
     int n,t,s,i,j,k,p;
                     ^
popeala.cpp:25:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     fscanf (fin,"%d%d%d",&n,&t,&s);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
popeala.cpp:27:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         fscanf (fin,"%lld",&val[i]);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 452 ms 828 KB Output is correct
2 Correct 315 ms 760 KB Output is correct
3 Correct 457 ms 832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2064 ms 1656 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 508 KB Output is correct
3 Correct 452 ms 828 KB Output is correct
4 Correct 315 ms 760 KB Output is correct
5 Correct 457 ms 832 KB Output is correct
6 Execution timed out 2064 ms 1656 KB Time limit exceeded
7 Halted 0 ms 0 KB -