标签:sort src inline turn 应该 date using 区间 efi
https://codeforces.com/contest/1358
输出 \(\lceil \dfrac{ab}2 \rceil\)
#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
const int N=200010; typedef long long ll;
#define int ll
int T,a,b;
signed main(){
cin>>T;
while(T--){
cin>>a>>b;
cout<<(a*b+1)/2<<endl;
}
return 0;
}
题面真长。排序,然后求 \(a[1]+a[2]+...+a[i]<=i\) 的 \(i\) 的最大值
当然答案要加 \(1\) 因为要算上Maria
#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
const int N=200010; typedef long long ll;
#define int ll
int T,n,a[N];
signed main(){
cin>>T;
while(T--){
cin>>n;
repeat(i,0,n)cin>>a[i];
sort(a,a+n);
int ans=1;
repeat(i,0,n)if(a[i]<=i+1)ans=i+2; //我编号从0开始有点不同
cout<<ans<<endl;
}
return 0;
}
怎么说呢……比如要从1走到18,有这么两种走法
右图比左图数字之和刚刚好多了1。这说明一旦出现类似 \(4, 7, 12\) 这样的上三角形拐角,我们可以让它拐下来变成 \(4,8,12\)。这样操作 \((y_2-y_1)(x_2-x_1)\) 次后就彻底找不到这种拐角了,因此答案是 \((y_2-y_1)(x_2-x_1)+1\)
#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=(ios::sync_with_stdio(0),cin.tie(0),0);
const int N=200010; typedef long long ll;
#define int ll
int T,x1,x2,y1,y2;
signed main(){
cin>>T;
while(T--){
cin>>x1>>y1>>x2>>y2;
cout<<(x2-x1)*(y2-y1)+1<<endl;
}
return 0;
}
最优解的区间的右端点一定一定是某个月的月末(这里的区间左右端点都表示某一天)。小证一下,假设有个右端点不是月末的区间,如果左端点(那一天的拥抱次数,下同)大于右端点就让它向左平移,如果左端点小于右端点就让它向右平移,这样总拥抱次数必定增大,因此结论成立qwq
这样就容易好多,我们枚举每个月的月末,二分查找区间左端点即可(不二分查找应该也可)
我这题fst了,尴尬至极,代码先删了避免误导
Codeforces Round #645 (Div. 2) 题解 (ABCD) (E一定补!)
标签:sort src inline turn 应该 date using 区间 efi
原文地址:https://www.cnblogs.com/axiomofchoice/p/12969835.html