彩笔巨简单题爆零求助
  • 板块学术版
  • 楼主Dentist
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/7/19 15:15
  • 上次更新2023/11/4 14:11:01
查看原帖
彩笔巨简单题爆零求助
167733
Dentist楼主2021/7/19 15:15
#include <iostream>
#include <cmath>
using namespace std;
int mapp_r[105],mapp_c[105];
int mapp_zx[210],mapp_zs[210];
int r[105],c[105];
int n,maxx=-1;
int cnt=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>r[i]>>c[i];
		maxx=max(max(r[i],c[i]),maxx);
		mapp_r[r[i]]++;
		mapp_c[c[i]]++;
		mapp_zs[r[i]+c[i]-1]++;
	}
	for(int i=1;i<=n;i++){
		mapp_zx[maxx-r[i]+1+c[i]-1]++;
	}
	for(int i=1;i<=maxx;i++){
		if(mapp_r[i]>=3){
			int ans=mapp_r[i]*(mapp_r[i]-1)*(mapp_r[i]-2);
			ans=ans/6;
			cnt+=ans;
		}
		if(mapp_c[i]>=3){
			int ans=mapp_c[i]*(mapp_c[i]-1)*(mapp_c[i]-2);
			ans=ans/6;
			cnt+=ans;
		}
		if(mapp_zx[i]>=3){
			int ans=mapp_zx[i]*(mapp_zx[i]-1)*(mapp_zx[i]-2);
			ans=ans/6;
			cnt+=ans;
		}
		if(mapp_zs[i]>=3){
			int ans=mapp_zs[i]*(mapp_zs[i]-1)*(mapp_zs[i]-2);
			ans=ans/6;
			cnt+=ans;
		}
	}
	cout<<cnt;
	return 0;
}

大概思路就是类似桶排,用四个数组分别记录 每条对角线/每排/每列 有多少点,然后用排列组合计算三点共线的情况. 这个彩笔猜测可能是mapp_zx出了问题,但是实在看不出错误 蒟蒻正趴在墙角瑟瑟发抖

2021/7/19 15:15
加载中...