看到$\text{V}$就想到了V神。
快快放假….
$\text{Vicetone}$最新单曲$\text{Aftermath}$大家听了嘛……
(真不是学数论之后的意思啊,译为‘后果’,显然是不好的……)
害怕联赛不明不白退役……
不开$\text{C++11}$挂$75$分=。=
所以一定要看编译选项啊……
4
03:29:05
03:29:05
03:29:05
205
03:29:05
23
Miemeng
100
0
30
130
好死了……为啥不开$\text{C++11}$
题不算难。
T1打表找规律成功!
T2码了一个$30$分暴力,后来为了要$20$分的特殊性质写了一个神奇$\text{C++11}$
然后就0了。
T3暴力还挺稳。
打表找到规律。
只想说一句话:爆龙龙就去化一波柿子。
化柿子的过程:
给的是这个:
$$\sum \limits_{i=0}^{p} \left \lfloor \frac{iq}{p} \right \rfloor$$
化下:
$$ \Large
\begin{array}{rl}
= & \sum \limits_{i=0}^{p} \frac{iq-iq\%p }{p} \\
= & \sum \limits_{i=0}^{p} iq-\sum \limits_{i=0}^{p} iq\%p \over p \\
= & \frac{pq(p+1)}{2} - \sum \limits_{i=0}^{p} iq\%p \over p
\end{array}
$$
但是有个$\sum$化不掉,此时就需要更加神奇的化柿子方法。
只考虑:
$$ \sum \limits_{i=0}^{p} iq\%p$$
设$r=gcd(p,q)$
于是可打表得:
$$ \Large
\begin{array}{rl}
& \sum \limits_{i=0}^{p} iq\%p\\
= & (p-r)\times(p/r)\times r \over 2\\
= & (p-r) \times p \over 2
\end{array}
$$
最后柿子长这样:
$$ \Large
\begin{array}{rl}
& \frac{pq(p+1)}{2} - \frac{p \times (p-r)}{2} \over p \\
= & \frac{q(p+1)- p+r}{2}
\end{array}
$$
如果不化简会爆龙龙……
#include
#include
#include
#define LL long long
using namespace std;
LL gcd(LL a,LL b){
return b==0?a:gcd(b,a%b);
}
int main(){
#ifndef LOCAL
freopen("simplecalc.in" ,"r",stdin);
freopen("simplecalc.out","w",stdout);
#endif
LL T,q,p;
cin>>T;
while(T--){
cin>>p>>q;
LL gcn=gcd(p,q);
cout<<((p+1)*q-(p-gcn))/2<<endl;
}
}
分收益和损失两部分。
收益的我们要尽量花费少,所以按花费排序。
损失的我们可以按照X国的军队做,按损失后剩下的排序。
记住:这两个题的输入不一样!
对于损失部分
$k$指投入,$t$指产出。
X国的军队:输入$k, \Delta$
本题:输入$k,t$
于是有$\Delta=k-t \Rightarrow t=k-\Delta$
所以是一致的,都是按产出从大到小排序从而减少浪费。
而且我们一定要先收益再损失。
写个厉害的比较函数……
#include
#include
#include
#include
#define LL long long
#define N 1111111
using namespace std;
int check(LL a,LL b){
if(a*b<=0)return 0;
if(a<0 && b<0)
return 2;
if(a>0 && b>0)
return 1;
}
struct YB{
LL bef,aft;
friend bool operator < (const YB &a,const YB &b){
LL dela=a.aft-a.bef,
delb=b.aft-b.bef,
cek=check(dela,delb);
if(cek==0)
return dela>delb;
else if(cek==1)
return a.bef
}
}bs[N];
LL bn;
int main(){
#ifndef LOCAL
freopen("reformat.in" ,"r",stdin);
freopen("reformat.out","w",stdout);
#endif
cin.sync_with_stdio(false);
cin>>bn;
for(int i=1;i<=bn;i++)
cin>>bs[i].bef>>bs[i].aft;
sort(bs+1,bs+bn+1);
// for(int i=1;i<=bn;i++)cout<<bs[i].bef<<" "<<bs[i].aft<<endl;
LL lft=0,ans=0;
for(int i=1;i<=bn;i++){
if(lft<bs[i].bef){
ans+=bs[i].bef-lft;
lft=bs[i].aft;
}
else{
lft-=bs[i].bef;
lft+=bs[i].aft;
}
}
cout<<ans<<endl;
}
我太弱了。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章