第 1 測資點(20%): AC (0ms, 116KB)
通過檢測
第 2 測資點(20%): WA (line:8)
答案不正確
您的答案為: 10 90 正確答案為: 10 40 50
第 3 測資點(20%): AC (0ms, 120KB)
通過檢測
第 4 測資點(20%): AC (0ms, 80KB)
通過檢測
第 5 測資點(20%): AC (1.9s, 8.3MB)
通過檢測
//
// main.cpp
// Copyright © 2016年 Ernest. All rights reserved.
//
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
//#include "permutation_p37.h"
using namespace std;
vector<long> res; //儲存所使用到的資料
vector<long> val; //儲存input
queue<vector<long>> q; //用以排除同樣的結果
long n,m;
void dfs(long sum=0,long step=0,long use_count=0){
if(sum==m){
vector<long> temp;
for (long i = 0 ;i<
use_count;++i) {
temp.push_back(res.at(i));
}
q.push(temp);
return;
}
if(step>=n||sum>m)
return;
res.at(use_count) = val.at(step);
dfs(sum+val.at(step),step+1,use_count+1);
dfs(sum, step+1,use_count);
}
int main() {
// solve();
long temp;
while(cin>>n){
long t=n;
cin>>m;
val.clear();
while(t--){
cin>>temp;
val.push_back(temp);
}
sort(val.begin(), val.end());
res.clear();
res.resize(n);
dfs();
vector<long> temp{};
if(q.size()){
while (q.size()) {
if(temp != q.front()){
temp = q.front();
for (auto it = temp.begin(); it!=temp.end(); ++it) {
cout<<*it<<" ";
}
cout<<endl;
}
q.pop();
}
}
else
cout<<"-1"<<endl;
}
return0;
}
第 1 測資點(20%): AC (0ms, 116KB)
通過檢測第 2 測資點(20%): WA (line:8)
答案不正確您的答案為: 10 90 正確答案為: 10 40 50第 3 測資點(20%): AC (0ms, 120KB)
通過檢測第 4 測資點(20%): AC (0ms, 80KB)
通過檢測第 5 測資點(20%): AC (1.9s, 8.3MB)
通過檢測
//
// main.cpp
// Copyright © 2016年 Ernest. All rights reserved.
//
#include
#include
#include
#include
#include
//#include "permutation_p37.h"
using namespace std;
vector res; //儲存所使用到的資料
vector val; //儲存input
queue> q; //用以排除同樣的結果
long n,m;
void dfs(long sum=0,long step=0,long use_count=0){
if(sum==m){
vector temp;
for (long i = 0 ;i<
use_count;++i) {
temp.push_back(res.at(i));
}
q.push(temp);
return;
}
if(step>=n||sum>m)
return;
res.at(use_count) = val.at(step);
dfs(sum+val.at(step),step+1,use_count+1);
dfs(sum, step+1,use_count);
}
int main() {
// solve();
long temp;
while(cin>>n){
long t=n;
cin>>m;
val.clear();
while(t--){
cin>>temp;
val.push_back(temp);
}
sort(val.begin(), val.end());
res.clear();
res.resize(n);
dfs();
vector temp{};
if(q.size()){
while (q.size()) {
if(temp != q.front()){
temp = q.front();
for (auto it = temp.begin(); it!=temp.end(); ++it) {
cout<<*it<<" ";
}
cout<
}
q.pop();
}
}
else
cout<<"-1"<
}
return0;
}
他的答案超機車要你輸出兩次10 40 50,而且我發現不只第8行錯誤而已,還有13行、16行(and more)都要你重複輸出,抗議xwx
測資如果是 10 10 40 50 取 100
那10 40 50 出現兩次,應該合理。
題目好像沒說重複的要排除。
測資如果是 10 10 40 50 取 100
那10 40 50 出現兩次,應該合理。
題目好像沒說重複的要排除。
對耶,第一次寫有問題,之後寫就沒發現就莫名其妙把他忘了
你把程式包成這樣
def main():
.....
main()
看速度有沒有比較快。