花了 \(30min\) 打了 \(180\) 分的暴力...


仓鼠的石子游戏

问题描述

链接:https://ac.nowcoder.com/acm/contest/1100/A

仓鼠和兔子被禁止玩电脑,无聊的他们跑到一块空地上,空地上有许多小石子。兔子捡了很多石子,然后将石子摆成n个圈,每个圈由a[i]个石子组成。然后兔子有两根彩色笔,一支红色一支蓝色。兔子和仓鼠轮流选择一个没有上色的石子涂上颜色,兔子每次可以选择一个还未染色的石子将其染成红色,而仓鼠每次可以选择一个还未染色的石子将其染成蓝色,并且仓鼠和兔子约定,轮流染色的过程中不能出现相邻石子同色,谁不能操作他就输了。假设他们两个都使用了最优策略来玩这个游戏,并且兔子先手,最终谁会赢得游戏?

输入格式

第一行输入一个正整数T,表示有T组测试案例。

每组测试案例的第一行输入一个n,表示有n圈石子。 第二行输入n个正整数a[i],表示每个圈的石子数量。

输出格式

对于每组测试案例,如果兔子赢了,输出”rabbit“(不含引号)如果仓鼠赢了,输出"hamster"(不含引号)。

数据规模与约定

本题共有10组测试点数据。

对于前 \(30\%\) 的数据,满足 \(n=1,1 \le a[i] \le 7,1 \le T \le 10\)

对于前 \(60\%\) 的数据,满足 \(1 \le n \le 10^3,1 \le a[i] \le 7,1 \le T \le 10^2\) 。

对于前 \(100\%\) 的数据,满足 \(1 \le n \le 10^3,1 \le a[i] \le 10^9,1 \le T \le 10^2\)。

对于测试点 \(6\) ,在满足前 \(60\%\) 的数据条件下,额外满足 \(a[i]=1\) 。

题解

发现对于每一堆来说:

  • 偶数堆相当于没有:不能改变先后手顺序

  • 奇数堆:只能放偶数个

  • \(1\)的堆:改变先后手

因此,只保留 \(1\) 个奇数堆。这个奇数堆进入时是先手的人输。

就相当于用 \(1\) 的堆改变先后手后,看谁是后手。

发现当 \(1\) 堆的数目为奇数时, rabbit 赢,否则 hamster 赢。

\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
} const int maxn=1007; int T,n,sum;
int a[maxn];
int cnt;
void reset(){
sum=cnt=0;
} int main(){
read(T);
while(T--){
read(n);reset();
for(int i=1;i<=n;i++){
read(a[i]);
if(a[i]==1) ++sum;
else if(a[i]&1) ++cnt;
}
cnt=cnt%2;
if(cnt==0){
if(sum&1) puts("rabbit");
else puts("hamster");
}
else{
if(sum&1) puts("rabbit");
else puts("hamster");
}
}
return 0;
}

乃爱与城市的拥挤程度

问题描述

题解

\(80\%\)

随机树部分+链

直接暴力跑就完事了。

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
} const int maxn=100007;
const int maxm=200007;
const int mod=1000000007; int n,k;
int Head[maxn],to[maxm],Next[maxm],tot=1; void add(int x,int y){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot;
} int ans,tmp;
int aaa[maxn],bbb[maxn]; int dfs(int x,int fa,int dis){
int res=1;++ans;
if(dis==k) return res;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y==fa) continue;
res+=dfs(y,x,dis+1);
}
tmp=(long long)tmp*(long long)res%mod;
return res;
} void solve(int x){
ans=0,tmp=1;
dfs(x,0,0);
aaa[x]=ans,bbb[x]=tmp;
} int main(){
read(n);read(k);
for(int i=1,x,y;i<n;i++){
read(x);read(y);
add(x,y);add(y,x);
}
for(int i=1;i<=n;i++){
solve(i);
}
for(int i=1;i<=n;i++){
printf("%d%c",aaa[i]," \n"[i==n]);
}
for(int i=1;i<=n;i++){
printf("%d%c",bbb[i]," \n"[i==n]);
}
return 0;
}

\(100\%\)

换根DP。


小w的魔术扑克

问题描述

最新文章

  1. prometheus监控系统
  2. android权限
  3. 安装mongodb 远程服务器报错
  4. [算法导论]二叉查找树的实现 @ Python
  5. SparkSQL External Datasource简易使用之CSV
  6. Linux中/etc/passwd文件与/etc/shadow文件解析.
  7. 【lucene系列学习四】使用IKAnalyzer分词器实现敏感词和停用词过滤
  8. 在JBoss AS7中进行项目部署
  9. C# 文件去仅仅读工具-线程-技术&amp;amp;分享
  10. 阅读MDN文档之StylingBoxes(五)
  11. Postman教程——发送第一个请求
  12. $(function(){})和window.onload的区别
  13. python list用法
  14. Hadoop 2.7.4 HDFS+YRAN HA增加datanode和nodemanager
  15. Trie树详解(转)
  16. Effective Java 第三版——5. 使用依赖注入取代硬连接资源
  17. Linux监控平台介绍 zabbix监控介绍 安装zabbix 忘记Admin密码如何做
  18. LeetCode难度与出现频率
  19. selenium+ python自动化--断言assertpy
  20. 004 @PathVariable映射URL绑定的占位符

热门文章

  1. 201871010102-常龙龙《面向对象程序设计(java)》第十三周学习总结
  2. Leetcode450. 删除二叉搜索树中的节点
  3. [CF1082D]Maximum Diameter Graph
  4. Linux常用命令之重启关机命令
  5. tomcat9上传文件失败错误
  6. Visual Studio 2019 16.1 使用 .NET Core 3.0
  7. Java生鲜电商平台-商城后台架构与原型图实战
  8. 关于vue项目中使用组件的一些心得
  9. 控件类——Button、UIControlState状态、title及其属性
  10. NSCach 的知识小记