求助:使用__int128输出了一些奇怪的东西???
查看原帖
求助:使用__int128输出了一些奇怪的东西???
280015
Star_Cried楼主2020/9/24 07:59

如题,不想写Dp于是推了个似乎是正确的贪心用数字模拟,结果爆了longlong。在及其迷惑的情况下我进行了如下操作:

#define int __int128

然后原来输出负号的点反馈出来了奇怪的东西:

点进记录查看WA报错信息

没错原来错误的点变成了输出'+' ')' '/' '-'。

这是哪里出了问题……这题不会爆__int128吧?还是我对128的使用方法有什么误解。。。

附上我的代码。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
#define int __int128
using namespace std;
inline int read(){
	int x=0,w=0;char c=getchar();
	while(!isdigit(c))w|=c=='-',c=getchar();
	while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return w?-x:x;
}
inline void write(int x){
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
namespace star
{
	int a,b,c,aa,bb,zp,mx;
	inline void work(){
		int x=read();
		zp=0;
		while(x)a+=(x&1),x>>=1,zp++;
		mx=max(mx,zp);zp=0;
		x=read();
		while(x)b+=(x&1),x>>=1,zp++;
		mx=max(mx,zp);zp=0;
		x=read();
		while(x)c+=(x&1),x>>=1,zp++;
		mx=max(mx,zp);zp=0;
		if(a<b)swap(a,b);
		if(a+b<c)return (void)puts("-1");
		if(a+b==c){
			int res=0;
			for(int i=0;i<c;i++)res+=(1<<i);
			write(res);
			return ;
		}
		if(mx<max(a,max(b,c))+1)return (void)puts("-1");
		if(c>a){
			int zp=2*c-a-b,ans=0,i=0;
			for(;i<zp;i++)ans+=(((__int128)1)<<i);
			for(i++;i<c+1;i++)ans+=(((__int128)1)<<i);
			write(ans);
			return;
		}
		for(int i=0;i<a;i++)aa+=(((__int128)1)<<i);
		for(int i=0;i<b;i++)bb+=(((__int128)1)<<i);
		write(aa+(bb<<(c-b)));
	}
}
signed main(){
	star::work();
	return 0;
}
2020/9/24 07:59
加载中...