Imp is in a magic forest, where xorangles grow (wut?)
A xorangle of order n is such a non-degenerate triangle, that lengths of its sides are integers not exceedingn, and the xor-sum of the lengths is equal to zero. Imp has to count the number of distinct xorangles of ordern to get out of the forest.
Formally, for a given integer n you have to find the number of such triples(a, b, c), that:
- 1 ≤ a ≤ b ≤ c ≤ n;
, where
denotes thebitwise xor of integersx and y.
- (a, b, c) form a non-degenerate (with strictly positive area) triangle.
The only line contains a single integer n(1 ≤ n ≤ 2500).
Print the number of xorangles of order n.
6
1
10
2
The only xorangle in the first sample is (3, 5, 6).
解题的关键是那个异或式,我们知道c^c=0,所以c=a^b。有了这个条件我们就可以直接遍历枚举找答案了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<stack>
#define inf 0x3fffffff
using namespace std;
typedef long long LL;
const int N=1e5+1;
int main()
{
int n,ans,tmp;
while(~scanf("%d",&n))
{
ans=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
tmp=i^j;
if(tmp>=1&&tmp<=n&&tmp>=j&&i+j>tmp)//注意tmp是有范围的,且要满足三角形两边之和大于第三边的条件
ans++;
}
}
printf("%d\n",ans);
}
}

本文介绍了一道算法题目,任务是找出所有可能的整数三角形边长组合,使得这三个边长通过异或运算得到0。文章提供了完整的C++代码实现,并详细解释了解题思路。
908

被折叠的 条评论
为什么被折叠?



