2 条题解
-
32019HeYongTao LV 8 @ 2020-02-29 22:20:07
话说我这个蒟蒻还是找规律的。
闲话少叙,进入正题。
——————————————华丽的分割线————————————————
首先,我们来画个图。(由于我太菜了,无法发出图片,所以只能让大家自己动手啦!在这里我就列个表)
相交于同一点的直线的个数 少掉平面的个数:
2 0
3 1
4 1+2
5 1+2+3
6 1+2+3+4……
观察上表,有没有感觉了?
没错,有p条直线相交于同一点,就会少掉1+2+3+……+(p-2)个平面。
如果没有直线互相平行,那么会有(2+2+3+4+5+……+n)个平面。
所以答案就为(2+2+3+4+5+……+n)-(1+2+3+……+(p-2));
好轻(jiān)松(nán)的呢!
代码如下:
Code:#include"stdio.h" using namespace std; int main(){ int n,p,i,sum=0,ans; scanf("%d %d\n",&n,&p); ans=1+(n+1)*n/2; for(i=1;i<=p-2;i++) sum+=i; ans-=sum; printf("%d",ans); return 0; } //拒绝抄代码,从你我做起!代码仅供参考!!(想抄??呵呵!!)
本蒟蒻的第一篇题解,望大家批评指正, 大佬轻喷!
我写的这么走心,能点个赞么? -
12020-03-02 11:15:08@
同楼上,找规律。
p条同点线分出2*p 个区域,剩下来的再多分出((p+1)+(p+2)+……+n)=(p+1+n)*(n-p)/2个区域
故一共有(p+1+n)*(n-p)/2+2*p 个区域
Code:
#include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <algorithm> #define For(i,j,k) for(int i=j;i<=(k);++i) using namespace std; typedef long long ll; inline int read(){ int x=0,w=0;char c=getchar(); for(;c<'0'||c>'9';w^=c=='-',c=getchar()); for(;c>='0'&&c<='9';x=(x<<3)+(x<<1)+(c^48),c=getchar()); return w?-x:x; } int qpow(int n,int m,int k){ //n^m%k if(m==0) return 1; int ans=qpow(n,m/2,k)%k; if(m%2) return ans*ans%k*ans%k; return ans*ans%k; } int main(){ int n,p;cin>>n>>p; int ans=2*p; ans+=(p+1+n)*(n-p)/2; cout<<ans; return 0; }
- 1