SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛*(抽球游戏-fwt开立方)
Anthony 手中有 nnn 个依次标着整数 a1" role="presentation" style="position: relative;">a1a1a_1, a2a2a_2, ⋯⋯\cdots, anana_n (0≤a1≤a2≤⋯≤an≤630≤a1≤a2≤⋯≤an≤630 \leq a_1 \leq a_2 \leq \cdots \leq a_n \leq 63) 的球,现在 Ben 会等概率随机抽出一个球,记录球上的数字并放回,重复该过程三次,最终三次记录下的数字的异或和就是 Ben 的得分。
经过非常非常多次游戏之后,Ben 分析出了得分的概率分布情况,你需要根据这个概率分布情况推测出 Anthony 手中的 nnn 个球上的数字,或者指出 Ben 的记录有误。
输入格式
第一行包含一个正整数 T" role="presentation" style="position: relative;">TTT,表示有 TTT 组测试数据。
接下来依次描述 T" role="presentation" style="position: relative;">TTT 组测试数据。对于每组测试数据:
第一行包含一个正整数 nnn,表示 Anthony 手中球的数量。
第二行包含 64" role="presentation" style="position: relative;">646464 个整数 p0,p1,⋯,p63p0,p1,⋯,p63p_0, p_1, \cdots, p_{63},其中 pipip_i 表示 Ben 的得分为 iii 的概率乘以 n3" role="presentation" style="position: relative;">n3n3n^3 后的值,可以证明这个数字一定是一个整数。
保证 1≤T≤50001≤T≤5000 1 \leq T \leq 5000, 1≤n≤501≤n≤501 \leq n \leq 50, 0≤pi≤n30≤pi≤n30 \leq p_i \leq n^3 (i=0,1,⋯,63i=0,1,⋯,63i = 0, 1, \cdots, 63)。
输出格式
对于每组测试数据,如果 Ben 的记录有误,输出一行信息"Case #x: -1"
(不含引号),其中x
表示这是第x
组测试数据;如果 Ben 的记录正确,输出一行信息 "Case #x: a1 a2 ... an"
(不含引号),相邻的两个数中间用一个空格隔开。如果有多组解,输出任意一组解均可。
样例输入
2
3 4
3 2 2 3
2 2 3 2
1 1 1 1
3 3
-1 -1 -1
-1 -1 -1
-1 -1 -1
样例输出
Case #1: 22
Case #2: -7
fwt直接pow(1.0/3)就行。
注意特判各种情况。
#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \For(j,m-1) cout<<a[i][j]<<' ';\cout<<a[i][m]<<endl; \}
#pragma comment(linker, "/STACK:102400000,102400000")
#define All(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}
bool fwt (ll a[] , int n ,bool on) {for ( int d = 1 ; d < n ; d <<= 1 ) {for ( int k = d << 1 , i = 0 ; i < n ; i += k ) {for ( int j = 0 ; j < d ; ++ j ) {ll x = a[i + j] , y = a[i + j + d] ;if(on){//xora[i + j] = ( x + y ) ;a[i + j + d] = ( x - y );}else{//xorif((x&1)!=(y&1)) return 0;a[i + j] = ( x + y ) /2 ;a[i + j + d] = ( x - y) /2 ;}}}}return 1;
}
#define MAXN (500)
ll a[MAXN];
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout);int T=read();For(kcase,T) {int n=read(),tot=0;Rep(i,64) a[i]=read(),tot+=a[i];printf("Case #%d:",kcase);if(tot%(n*n*n)){puts(" -1");continue;}fwt(a,64,1);bool fl=0;Rep(i,64) {double t=max(-a[i],a[i]);t=pow(t,1.0/3);t=floor(t+0.5);ll c=t;if(a[i]<0) c=-c;if(c*c*c!=a[i]){fl=1;}else a[i]=c;}if(fl){puts(" -1");continue;}fl=fwt(a,64,0);tot=0;Rep(i,64) tot+=a[i];Rep(i,64) if(a[i]<0) fl=0;if(tot!=n||!fl) {puts(" -1");continue;}Rep(i,64) Rep(j,a[i]) printf(" %d",i);puts("");}return 0;
}
SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛*(抽球游戏-fwt开立方)相关推荐
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 D. 白色相簿
从某一点开始,以层次遍历的方式建树 若三点a.b.c互相连接,首先必先经过其中一点a,然后a可以拓展b.c两点,b.c两点的高度是相同的,若b(c)拓展时找到高度与之相同的点,则存在三点互相连接 // ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛-白色相簿
题意: 给定无向图,n个点,m条边,判断图中是否存在三元环.(n <= 1e5, m <= 3e6) 思路: 计数三元环的复杂度是mlogm,在这里1s跑不过.尝试通过bitset记录每个 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 B.我觉得海星
https://nanti.jisuanke.com/t/26016 给定一个简单无向图,请你判断这个图是否海星,一个图海星当且仅当它内部存在五个互不相同的点 A,B,C,D,EA,B,C,D,E,满 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛* B. 我觉得海星
res[i][j]:i->{x1,x2,x3...}->j 的集合的异或值 c[i][j]:i->{x1,x2,x3...}->j 的集合中元素个数 flag[i][j][k] ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛* B. 我觉得海星 bitset
B. 我觉得海星 题意: 一个无向图,判断是否含有五元环.T 组数据,n 个点. T<=100, n<=200 . tags: 一开始想 dfs,发现搞不出来.赛后听大佬们bb,原来可以 ...
- 【图论】计蒜客商汤在线编程挑战赛 D题 白色相簿
给定一个无向图,找出图中有没有三元环 我采用的的是如下一种做法,随便找一个点作为根节点,bfs生成一棵树,同时保存每个节点的深度,如果某点的子节点已经拥有了深度,则判断这个深度是否与该点的深度相等,不 ...
- 格灵深瞳发起 AI · 爱 算法 在线编程挑战赛
点击我爱计算机视觉标星,更快获取CVML新技术 DEEP SEA FISH 编 程 高 手 集 结 令 一 决 高 下 你热爱编程,喜欢AI么?如果你的答案是Yes,这里有一场绝不可错过的在线编程挑战 ...
- 天池 在线编程 卡牌游戏(01背包)
文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...
- 天池 在线编程 回合制游戏(前缀和)
文章目录 1. 题目 2. 解题 1. 题目 QW 是一个回合制游戏的玩家,今天他决定去打怪. QW 在一场战斗中会碰到 n 个怪物,每个怪物有攻击力 atk[i],每回合结束时如果第 i 个怪物还活 ...
最新文章
- 46:八进制到十进制
- mysql 同机做主从
- 判断字符串NSString是否是整形或者浮点型
- redis中执行lua脚本命令
- Ubuntu Server安全Webserver搭建流程
- 官宣!多所高校,整体搬迁!
- Bootstrap 滚动监听插件Scrollspy 的事件
- 2021-2025年中国中压额定母线槽行业市场供需与战略研究报告
- 实战Linux Bluetooth编程 (八) Class of Device
- python字典forward_《Python机器学习基础教程》
- 二叉树中获取从根节点到某个节点的路径
- CDA LEVEL I分数占比解读,看懂这些,考试更容易拿分
- Python神经网络模型和预测
- c语言中各个符号的意义及作用是什么,C语言各类符号意义以及用法是什么?
- Fedora34/35/36 软件闪退解决
- MTK和Android有区别,Android系统 下一个山寨MTK的代名词
- 【洛谷题解】P1427 小鱼的数字游戏
- 如何使用Git上传本地项目到github?(mac版)
- 系统安装 使用VMware15安装Win7系统
- Swift表格Lxr
热门文章
- css动画-3d旋转盒子
- mybatis如何判断update操作是否成功
- python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用
- 荣耀 MagicBook 14 2022评测 荣耀magicbook14优缺点
- 软件测试中的用户思维
- 2022081班李亚楠20220901
- 浅谈【CSS】渐变背景(background-image)以及基础用法
- burnintest激活_PassMark BurnInTest Pro v9.0.1006(拷机软件)真正注册版
- 【教学类-13-01】20221112《数字色块图5*7*9-A4竖版》(中大班主题《》)
- MybatisPlus代码生成器实现只覆盖指定文件