A.Cut the Triangle
算法本质
模拟
题目大意
给定一个面积不为0的三角形,需要你判断是否可以通过竖切or横切分成2个面积不为0的三角形。
思路推演
只要保证不是水平+竖直方向的直角就好了。
B.Block Towers
算法本质
思维
题目大意
有n
个“塔”,每个塔由a[]
的积木堆成,只有积木严格多余的塔之间可以传递积木(每次传递一块)。
请问第一个塔最多可以有多少个积木。
思路推演
优先用较少的积木,贪心处理。
title
算法本质
题目大意
思路推演
$i + 1\sim j $
ac核心代码
头文件、宏定义、快读模板、常见变量、常见变量等略。
D.Playoff
算法本质
思维
题目大意
有2^n个人,其id各不相同,并且集合是一个排列。
现在任意调整他们的位置,其每天会两两战斗,淘汰一半的人,总共战斗n
天决出胜者。
现在给出一个字符串S
,其s[i]=1
表示第i
天,id
值更大的人会获胜,反之亦然。
请输出:可以通过调整位置最后胜出的id。
思路推演
假设当前人id为x
。
- 如果当前轮
id
大的胜
就需要制造一个和x
一模一样境遇的点,然后放在x
下面,假设为y
。
小于y
的值一定小于x
,大于y
的值无法判断。
所以小于x
的值的个数*2+1了 - 如果当前轮
id
小的胜
同理,大于y
的值的个数*2+1了
ac核心代码
头文件、宏定义、快读模板、常见变量、常见变量等略。
inline void solve()
{
//init
cin>>n>>s;
s = " " + s;
//cal
int da=0, xiao=0;
for (int i=1; i<=n; i++)
{
if (s[i]=='1')
xiao = xiao*2+1;
else if (s[i]=='0')
da = da*2+1;
}
//out
for (int i=xiao+1; i<=qpow(2,n)-da; i++)
cout<<i<<" ";
cout<<endl;
return;
}
评论 (0)