标签:rest condition 处理 fine 就是 分析 不同 但我 ||
题目看题解也很难懂呀
水题,找出矩形得中心,可以略过
这样一想已变成水题(连读入都不需要读了),代码略
这里只给出我的做法
#include<bits/stdc++.h>
using namespace std;
const int maxn=140000;
int xl[maxn];
int xr[maxn],yd[maxn],yu[maxn];
int tmpx1[maxn],tmpx2[maxn],tmpy1[maxn],tmpy2[maxn];
bool help(int x,int y,int x1,int x2,int y1,int y2){
return (x>=x1&&x<=x2)&&(y>=y1&&y<=y2);
}
int main(){
int x1,y1,x2,y3;
int n;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d %d %d %d",&xl[i],&yd[i],&xr[i],&yu[i]);
tmpx1[i]=xl[i];tmpx2[i]=xr[i];tmpy1[i]=yd[i];tmpy2[i]=yu[i];
}
//printf("db raed over\n");
sort(xl+1,xl+1+n);
sort(xr+1,xr+1+n);
int tl=xl[n],tr=xr[1];
sort(yd+1,yd+1+n);
sort(yu+1,yu+1+n);
int td=yd[n],tu=yu[1];
for(int i=1;i<=n;i++){
int tl=xl[n],tr=xr[1];
int td=yd[n],tu=yu[1];
//printf("db1:%d %d %d %d %d\n",i,tl,tr,td,tu);
if(tmpx1[i]==xl[n]) tl=xl[n-1];
if(tmpx2[i]==xr[1]) tr=xr[2];
if(tmpy1[i]==yd[n]) td=yd[n-1];
if(tmpy2[i]==yu[1]) tu=yu[2];
//printf("db2:%d %d %d %d %d\n",i,tl,tr,td,tu);
if(tr>=tl&&tu>=td){
//printf("db:%d %d %d %d %d\n",i,tl,tr,td,tu);
printf("%d %d\n",tl,td);
return 0;
}
}
return 0;
}
最终剩下的Min(sell) max(buy)的区间长度就是情况数另一个因子(可以枚举sell的位置,比sell大的都是sell)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll modv=1e9+7;
ll p;
char str[10];
set<ll> s;
ll lo=-1e9,hi=1e9;
ll ans=1;
int main(){
scanf("%lld",&n);
s.insert(lo);s.insert(hi);
for(ll i=1;i<=n;i++){
scanf("%s %lld",str,&p);
if(str[1]=='D'){
s.insert(p);
}
else{
if(p<lo||p>hi){printf("0\n");return 0;}
if(p>lo&&p<hi){
ans=(ans*2)%modv;
}
auto it=s.find(p);
lo=*prev(it);
hi=*next(it);
s.erase(it);
}
}
int res=0;
for(auto it=s.find(lo);it!=s.find(hi);it++){
res++;
}
printf("%lld\n",(res*ans)%modv);
return 0;
}
作为基准(起点)的应该是a[i]==max&&a[i]>a[i-1]
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=200005;
ll a[N];
ll b[N];
int mod(int a,int p){
if(a%p==0) return p;
else return a%p;
}
int main(){
ll n;
cin>>n;
ll minv=INT_MAX,maxv=INT_MIN;
for(ll i=1;i<=n;i++){
scanf("%d",a+i);
minv=min(a[i],minv);
maxv=max(a[i],maxv);
}
if(minv==maxv){
//maybe No
if(minv==0){
//construct same
printf("Yes\n");
for(int i=1;i<=n;i++){
printf("%lld ",(ll)1);
}
}
else{
printf("No\n");
}
}
else{
int maxindex=-1;
a[0]=a[n];
for(ll i=1;i<=n;i++){
if(a[i]==maxv&&a[i-1]<maxv){maxindex=i;break;}
}
b[maxindex]=a[maxindex];
//int lo=(maxindex-1+n)%n;
int lo=mod(maxindex-1+n,n);
b[lo]=a[lo]+maxv*2;
//cout<<lo<<b[lo]<<endl;
for(int i=n-2;i>=1;i--){
//b[(i+maxindex)%n]=b[(i+1+maxindex)%n]+a[(i+maxindex)%n];
b[mod(i+maxindex,n)]=b[mod(i+1+maxindex,n)]+a[mod(i+maxindex,n)];
}
printf("Yes\n");
for(int i=1;i<=n;i++){
printf("%lld ",b[i]);
}
}
return 0;
}
标签:rest condition 处理 fine 就是 分析 不同 但我 ||
原文地址:https://www.cnblogs.com/fridayfang/p/9561370.html