QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#629298#8005. Crossing the Borderpbk5418Compile Error//C++142.3kb2024-10-11 10:23:032024-10-11 10:23:04

Judging History

你现在查看的是最新测评结果

  • [2024-10-11 10:23:04]
  • 评测
  • [2024-10-11 10:23:03]
  • 提交

answer

#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int N = 22,M = 11,P = 998244353,inf =  2e9;
int n,nn,tt,W,R,S,T,mx[1 << N | 5],wt[1 << N | 5],f[1 << M | 5][1 << M | 5],g[1 << M | 5][1 << M | 5];
struct sib {int w,c;} e[31];
struct Node {int w,c,id;} a[1 << M | 5];
vector <int> b[1 << M | 5];
inline int add(int x){return x >= P ? x - P : x;}
int main() {
	freopen("1.in","r",stdin);
	scanf("%d%d",&n,&W);
	for (int i = 0; i < n; i ++) scanf("%d%d",&e[i].w,&e[i].c);
	sort(e,e + n,[](sib x,sib y){return x.c > y.c;});
	nn = n / 2;
	S = 1 << n,T = 1 << nn,R = (1 << n - nn);
	for (int s = 0; s < S; s ++) f[s >> nn][s & (T - 1)] = inf;
	for (int s = 1; s < S; s ++) {
		int i = s & s - 1,j = __builtin_ctz(s);
		mx[s] = max(e[j].c,mx[i]);
		wt[s] = wt[i] + e[j].w;
	}
	f[0][0] = 0,g[0][0] = 1;
	for (int x = 0; x < R; x ++) {
		for (int X = x; X < R; X = (X + 1) | x) {
			int X_ = X << nn,x_ = x << nn;
			if (wt[X_ - x_] <= W) {
				b[x].push_back(X);
				if (X - x > x) {
					int fs = f[x][0] + mx[X_ - x_];
					if (fs < f[X][0]) f[X][0] = fs,g[X][0] = g[x][0];
					else if (fs == f[X][0]) g[X][0] = add(g[X][0] + g[x][0]);
				}
			}
		}
		sort(b[x].begin(),b[x].end(),[x](int A,int B){return wt[(A - x) << nn] > wt[(B - x) << nn];});
	}
	for (int Y = 1; Y < T; Y ++) {
		tt = 0;
//		cout << "!" << Y << endl;
		for (int y = Y; y > 0; y = Y & (y - 1))
			if (Y - y > y && wt[Y - y] <= W) /*cout << y << endl,*/a[++ tt] = Node{wt[Y - y],mx[Y - y],y};
		a[++ tt] = Node{wt[Y],mx[Y],0};
		sort(a + 1,a + tt + 1,[](const Node &x,const Node &y){return x.w < y.w;});
//		cout << tt << endl;
		for (int x = 0; x < R; x ++) {
			int j = 1,F = inf,G = 0;
//			cout << b[x].size() << endl;
			for (int X : b[x]) {
				int ss = W - wt[(X - x) << nn];//,to = (X << nn) + Y;
				while (j <= tt && a[j].w <= ss) {
//					int k = (x << nn) + a[j].id;
					int fc = f[x][a[j].id] + a[j].c;
					if (fc < F) F = fc,G = 0;
					if (fc == F) G = add(G + g[x][a[j].id]);
					j ++;
				}
				if (f[X][Y] > F) f[X][Y] = F,g[X][Y] = G;
				else if (f[X][Y] == F) g[X][Y] = add(g[X][Y] + G);
			}
		}
	}
	printf("%d %d",f[R - 1][T - 1],g[R - 1][T - 1]);
}

详细

answer.code: In function ‘int main()’:
answer.code:13:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   13 |         freopen("1.in","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~
answer.code:14:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   14 |         scanf("%d%d",&n,&W);
      |         ~~~~~^~~~~~~~~~~~~~
answer.code:15:43: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   15 |         for (int i = 0; i < n; i ++) scanf("%d%d",&e[i].w,&e[i].c);
      |                                      ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from answer.code:3:
/usr/include/c++/13/bits/allocator.h: In destructor ‘std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl()’:
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to ‘always_inline’ ‘std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = int]’: target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/queue:63,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:157:
/usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here
  133 |       struct _Vector_impl
      |              ^~~~~~~~~~~~