2 3 4
3 5
这个题在比赛的时候没想到题解的思路,看了题解好简单,
两个方法:
方法1 找规律:
其实随便画几个就能看出规律来,
我直接说出规律了,,比如说N = 8的时候,
那么结果就是:
S1 = 1 + 2 + 3 + 4 + 5
S2 = 2 + 4 + 6 + 8
S3 = 3 + 6 + 9
S4 = 4 + 8
S5 = 5
S1 + S2 +... + S5 在加上N,就是结果!
规律很明显,很容易敲出代码了!
#include<iostream> #include<cstdio> #include<set> #include<map> #include<vector> #include<cstring> #include<string> #include<sstream> #include<algorithm> #include<cmath> #include<cctype> #include<cstdlib> #define mem(x) memset(x,0,sizeof(x)); #define mem1(x) memset(x,-1,sizeof(x)); using namespace std; const int maxn = 1000 + 10; const int maxt = 75 + 10; const double eps = 1e-8; const int INF = 1e8; const double pi = acos(-1.0); typedef long long ll; typedef unsigned long long llu; int main() { int n,T; cin >> T; while(T--){ cin >> n; llu num = n-3; llu sum = n; for (int i = 1; i <= n-2; ++i){ sum += num*i+num*(num-1)/2*i; num--; } cout << sum << endl; } return 0; }
方法2 :(题解方法)
先不考虑在圆上的点,一共有N个点,那么里面有几个四边形,就有几个交点,比如说N = 4,就只能构成一个四边形,所以里面有1个交点加上圆上4个正好5个.
为什么这么想可以呢,因为题目保证不会有三边交于一点,那么不就是四边形的对角线的交点吗,所以说有几个四边形就有几个交点。
所以答案是C N 4 + N;