Code Forces-922B 点击打开链接
思路:遍历所有的a,b组合,算出c,如果c<=n,并且a+b<c(也就是可以组成不共线的三角形),即满足条件。
#include<iostream>
#include<cstring>
using namespace std;
const int MAX=2505;
int main()
{
int n,ans=0;
cin>>n;
int temp;
for(int i=1;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
temp=i^j;
if(temp<=n&&temp>j&&(i+j)>temp)
{
ans++;
}
}
}
cout<<ans<<endl;
}
第一次想先用record数组先记录所有答案,即
void init()
{
int temp;
int len=sizeof(record);
memset(record,0,sizeof(record));
for(int i=1;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
temp=i^j;
if(temp<MAX&&temp>j&&(i+j)>temp)
{
record[temp]++;
}
}
}
for(int i=2;i<len;i++)
{
record[i]+=record[i-1];
}
}
显然失败。。。。
顺便一提,第一次提交的时候,MAX设置的是200,竟然也ac了。。。。案例太水。。。。