链接:https://ac.nowcoder.com/acm/contest/271/A
来源:牛客网

御坂美琴
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半,万世不竭"。

misaka现在有 n 个呱太玩偶放在一堆,每一次操作,misaka会选择当前个数 > 1 的一堆呱太玩偶。并将这一堆呱太玩偶分成 两堆,x 是当前这一堆玩偶的个数。现在 misaka 想将玩偶分成 m 堆,其中第 i 堆呱太玩偶的个数是 ai ,你需要告诉 misaka 是否能通过若干次操作将玩偶分成指定的这 m 堆。如果可以输出 ,否则输出

输入描述:

第一行两个数 n, m 。
接下来一行 m 个数 a

i

输出描述:

输出共一个字符串 

,表示 misaka 能否将玩偶分成指定的 m 堆。
    简单模拟一下就好了,我的做法是先将输入的ai按降序排列,然后不断地由大到小分解石头,中间遇到等于ai的石头数就把这堆给它。
一开始以为queue就好了,WA很多次,后来发现要用priority_queue,比如25,25-> 25,13,12 -> 13,12,13,12 这样就不是严格递减了,
换成堆AC。
  
 # include <iostream>
# include <cstdio>
# include <cstring>
#include<queue>
# include <algorithm>
using namespace std;
typedef long long LL;
using namespace std;
LL a[];
priority_queue<LL>q;
int main(){
LL n,m;
cin>>n>>m;
LL s=;
for(int i=;i<=m;++i)scanf("%lld",a+i),s+=a[i];
if(s!=n){
puts("ham");
return ;
}
q.push(n);
bool ok;
sort(a+,a++m,greater<LL>());
int i=;
while(i<=m && !q.empty() ){
LL p=q.top();
q.pop();
if(p>a[i]){
q.push(p-p/);
q.push(p/);
}
else if(p==a[i]){
n-=a[i];
i++;
continue;
}
else{
break;
} }
if(n== && i==m+) puts("misaka");
else puts("ham");
return ;
}

链接:https://ac.nowcoder.com/acm/contest/271/B
来源:牛客网

白井黑子
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

kuroko 作为常盘台唯一的空间系能力者,在每年例行的能力测试中可绝对不能让 misaka 失望哦,但是由于她的等级只是 level 4「大能力者」,在能力测试中会遇到不少困难。kuroko 是一个凡事都会尽力的好女孩,所以请你帮她算出她最多能完成多少测试吧

对于空间系能力者测试的内容是检验对物体进行空间移动的能力,测验时一共有 n 个物品放在一条直线上,每个物品都有一个坐标 ai ,kuroko 可以选择两个物品并使用能力交换它们的位置,但是如果两个物品的坐标不满足 kuroko 的计算公式的话,她就没有办法使用能力。

具体来说,对于坐标 ai ,其在 kuroko 的计算公式中是用参数 f(ai) 表示的。f(ai) 是 ai 各数位相乘的结果,由于 level 4「大能力者」在学园都市中也是很强大的存在,所以满足公式的条件不会太苛刻,对于两个物品 ai, aj ,如果 f(ai) x f(aj) 不能被某个自然数的 k 次幂表示 的话,那么 kuroko 就能对这两个物品使用能力。

现在 kuroko 想知道,有多少对物品她可以对其施展能力,知道了这个后她就知道自己能完成多少测验了。

这里认为任何自然数的 0 次幂都是1;

 
 
 
 
   一开始直接理解错题意,以为是k^x,想着直接暴力扫就好了,后来发现是x^k = =
 注意到把a数组转化为f之后,f里每个数的因子都只有2,3,5,7这四个,每个数都可以写作  A=2^v1 * 3^v3 * 5^v5 * 7^v7 的格式。
我们把每个数的<a1,a3,a5,a7>处理出来,要想A1*A1'是k次幂数显然要满足(vi+vi')%k==0,然后每次找他的补集统计一下不合法的数量就好了。
A<=1e18所以 a1,a3,a5,a7<=60,注意特判一下
k=0的情况。

段错误半天,后来发现找补集的时候可能对应的系数超出60,也就说明不存在这种方案,直接特判下就过了。
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
using namespace std;
LL a[];
int v[]={,,,};
int g[][][][];
int b[][];
LL f(LL n){
if(!n) return ;
LL s=;
while(n){
s*=(n%);
n/=;
}
return s;
}
int main(){
LL s=,n,k,zero=;
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;++i) scanf("%lld",a+i),a[i]=f(a[i]);
if(k==){
puts("");
return ;
}
if(k==){
for(int i=;i<=n;++i)if(a[i]==)s++;
printf("%lld\n",n*(n-)/-s*(s-)/);
return ;
}
for(int i=;i<=n;++i){
if(a[i]==){zero++;continue;}
LL tmp=a[i];
for(int j=;j<;++j){
while(tmp&&tmp%v[j]==){
b[i][j]++;
tmp/=v[j];
}
b[i][j]%=k;
if(b[i][j]>){
while()puts("fuck");
}
}
g[b[i][]][b[i][]][b[i][]][b[i][]]++;
}
LL ans=;
for(int i=;i<=n;++i){
if(a[i]==){
ans+=n-i;
zero--;
continue;
}
int u[];
g[b[i][]][b[i][]][b[i][]][b[i][]]--;
for(int j=;j<;++j){
if(b[i][j]==) u[j]=;
else u[j]=(k-b[i][j])%k;
if(u[j]>)u[j]=;
}
ans+=g[u[]][u[]][u[]][u[]]+zero;
}
ans=n*(n-)/-ans;
printf("%lld\n",ans);
return ;
}
 
 

Wannafly挑战赛29-A/B的更多相关文章

  1. Wannafly挑战赛29题解

    这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...

  2. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  3. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  4. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  5. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  6. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  7. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

  8. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

  9. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  10. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

随机推荐

  1. Linux---centos 配置网络

    Linux配置网络,有两种方式,一种是通过图像化的界面来配置网络IP,另一种方式是通过命令行来配置IP 1.第一种方式通过图形化的界面来配置IP 1.0修改之前的IP地址 1.1点击图片中的那个 网络 ...

  2. Windows Service application 初步探索

    今天写了一个windows service程序, 本身这个程序是一个console application, 但是不能够通过F5直接运行, 会出现下面图片所示的错误: 提示说需要安装一个Instalu ...

  3. Shell: nohup守护进程化

    如果想在终端会话中启动shell脚本,然后让脚本一直以后台模式运行,直到其完成,即使你退出了终端会话,可以使用nohup命令实现.感觉nohup就是将一个进程初始化为一个守护进程. nohup命令运行 ...

  4. 中文目录对 sublime text 有什么影响?

    用了这软件好几个月了,一直没出现问题.最近做精简时,发现一个奇怪的问题. 相同的配置,为什么两个程序表现得不一样? 难道是哪里的配置不一样? 难道是插件被我精简得太厉害了? 难道是插件有依赖文件被我删 ...

  5. File类文件的常见操作

    boolean exists() 判断文件或者目录是否存在 boolean isFile()  判断是否是文件 boolean isDirectory() 判断是否是目录 String getPath ...

  6. python requests post和get

    import requests import time import hashlib import os import json from contextlib import closing impo ...

  7. python中while循环运算符及格式化输出

    一,while循环 while 条件: while语句块(循环体) 运行: 判断你给的条件是否为真,如果真则执行循环体.否则跳出循环. 执行完循环体之后再次判断条件是否为真 例子1 我们玩联盟的时候喷 ...

  8. OpenModelica Debug

    assertion只触发一次 The gdb process has not responded to a command within 40 second(s).This could mean it ...

  9. Maven命令行创建java或javaWeb项目

    Maven命令行创建java或javaWeb项目   1.命令行创建普通java项目 mvn archetype:generate -DgroupId=com.fxust -DartifactId=d ...

  10. 修改记录-优化后(springboot+shiro+session+redis+ngnix共享)

    1.普通用户实现redis共享session 1.配置 #cache指定缓存类型 spring.cache.type=REDIS #data-redis spring.redis.database=1 ...