MAX MIN 的关系1
Problem:A
Time Limit:1500ms
Memory Limit:65535K
Description
给出N个(x,y)点(x,y为整数),我们令
求F(n)
Input
输入T,T组数据 T<=10
输入N,N<=100000
N行,xi,yi (-1000,000<=xi,yi<=1000,000)
Output
输出F(N)
Sample Input
2
2
1 2
3 2
3
1 3
4 0
2 2
Sample Output
2
12
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100005];
int main()
{
std::ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--){
int num;
cin>>num;
for(int i=1;i<=num;i++){
int aa,bb;
cin>>aa>>bb;
a[i]=aa-bb;
}
sort(a+1,a+1+num);
ll ans=0;
for(int i=1;i<=num;i++){
ans+=(2*i-num-1)*a[i];
}
cout<<ans<<endl;
}
}
MAX MIN 的关系2
Problem:J
Time Limit:4000ms
Memory Limit:65535K
Description
给出N个(x,y,z)点(x,y,z为整数),我们令
求F(n)
Input
多组输入数据
每组数据输入N,N<=100,000
N行,xi,yi,zi (-1000,000<=xi,yi,zi<=1000,000)
Output
输出F(N)
Sample Input
2
1 2 1
3 2 3
3
1 3 0
4 0 8
2 2 8
Sample Output
2
24
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100005],b[100005],c[100005];
int main()
{
std::ios::sync_with_stdio(false);
int T;
int num;
while(cin>>num){
for(int i=1;i<=num;i++){
int aa,bb,cc;
cin>>aa>>bb>>cc;
a[i]=aa-bb;
b[i]=bb-cc;
c[i]=aa-cc;
}
sort(a+1,a+1+num);
sort(b+1,b+1+num);
sort(c+1,c+1+num);
ll ans=0;
for(int i=1;i<=num;i++){
ans+=(2*i-num-1)*a[i];
ans+=(2*i-num-1)*b[i];
ans+=(2*i-num-1)*c[i];
}
cout<<ans/2<<endl;
}
}
小P的决斗
时间限制: 1 Sec 内存限制: 128 MB
提交: 40 解决: 12
[提交] [状态] [讨论版] [命题人:]
题目描述
小P马上就要NOIP了,所以他停课在机房学习。
一天小P在机房和同学交流代码,小P发现他的同学大括号不换行,但是小P的大括号换行。于是他们在争执了大括号是否要换行的问题后决定通过决斗分出胜负。
他们每个人各有三个属性值,ap,ad,生命值。这三个属性可以看成一个三元组:
对于每对三元组Ta=(La,Ja,Ka),Tb=(Lb,Jb,Kb),定义Ta,Tb之间的差值D为D(Ta,Tb)=max(La−Lb,Ja−Jb,Ka−Kb)−min(La−Lb,Ja−Jb,Ka−Kb)。
在决斗中,越来越多的对大括号是否要换行持有不同意见的人加了进来,所以决斗变成了团战。
小P想知道为n个人属性值之间两两差值之和,这样他能够知道自己是否能够胜利。
输入
第一行一个整数n。
之后的n行,每行三个整数,表示Li、Ji、Ki。
输出
输出一行,为n个三元组之间两两差值之和(对10^9+7取模)。
样例输入
复制样例数据
2
1 2 3
3 2 1
样例输出
4
提示
对于10%的数据,n≤103;
对于50%的数据,n≤2×104;
对于80%的数据,n≤2×105,1≤Li,Ji,Ki≤107;
对于100%的数据,1≤n≤5×105,1≤Li,Ji,Ki≤108。
这里多了个取模的规则
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define MOD 1000000007
#define ll long long
ll a[500005],b[500005],c[500005];
ll q(ll a,ll b,ll mod) {
ll res = 1;
while(b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int main()
{
std::ios::sync_with_stdio(false);
int T;
int num;
while(cin>>num){
for(int i=1;i<=num;i++){
ll aa,bb,cc;
cin>>aa>>bb>>cc;
a[i]=aa-bb;
b[i]=bb-cc;
c[i]=aa-cc;
}
sort(a+1,a+1+num);
sort(b+1,b+1+num);
sort(c+1,c+1+num);
ll ans=0;
for(int i=1;i<=num;i++){
ans+=((2*i-num-1))*(a[i]);
if(ans>0)
ans%=MOD;
ans+=((2*i-num-1))*(b[i]);
if(ans>0)
ans%=MOD;
ans+=((2*i-num-1))*(c[i]);
if(ans>0)
ans%=MOD;
}
ans=ans*q(2,MOD-2,MOD)%MOD;
cout<<ans<<endl;
}
}