社区讨论
76分求调整
P11214【MX-J8-T2】黑洞参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m2hagez7
- 此快照首次捕获于
- 2024/10/20 15:51 去年
- 此快照最后确认于
- 2025/11/04 16:43 4 个月前
以二维为例,当最大长度是ax,ay,黑洞坐标是x,y,最终答案是min(ax-x,ay-y)+min(ax-x,y-1)+min(x-1,ay-y)+min(x-1,y-1)+1。
延伸到多维,则最终答案也可以表示为2^n+1个数的和,除了表示黑洞的1,剩下的数字均为n个数的最小值,且第i个数为ai_max-ai或ai-1。
我最后几个测试点超时了,求调整。```cpp
#include
#include
using namespace std;
long long n,a[10000000][2],con[10000000],ans;
struct st{
long long an;
long long num;
}na[10000000];
bool compare(const st&k,const st&b){
return k.an<b.an; } long long f(long long k,long long b){ long long p=1,m=2; if(b==0)return k; while(p2<b){ m=m; p*=2; m=m%1000000007; } while(p<b){ m*=2; p++; m=m%1000000007; } return km%1000000007; } int main(){ cin>>n; for(long long i=1;i<=n;i++){ cin>>a[i][0]; } for(long long i=1;i<=n;i++){ cin>>a[i][1]; } for(long long i=1;i<=n;i++){ na[i2-1].an=a[i][0]-a[i][1]; na[i2].an=a[i][1]-1; na[i2-1].num=i2-1; na[i2].num=i2; } sort(na+1,na+n2+1,compare); for(long long i=1;i<=n*2;i++){ int j=0,p=(na[i].num+1)/2; long long m=na[i].an; p++; while(p<=n){ if(con[p]==0)j++; p++;} p=(na[i].num+1)/2; p--; while(p>0){ if(con[p]==0)j++; p--; } m=f(m,j); ans+=m; ans%=1000000007; con[(na[i].num+1)/2]++; if(con[(na[i].num+1)/2]==2)break; } cout<<(ans+1)%1000000007; }
CPPreturn k.an<b.an; } long long f(long long k,long long b){ long long p=1,m=2; if(b==0)return k; while(p2<b){ m=m; p*=2; m=m%1000000007; } while(p<b){ m*=2; p++; m=m%1000000007; } return km%1000000007; } int main(){ cin>>n; for(long long i=1;i<=n;i++){ cin>>a[i][0]; } for(long long i=1;i<=n;i++){ cin>>a[i][1]; } for(long long i=1;i<=n;i++){ na[i2-1].an=a[i][0]-a[i][1]; na[i2].an=a[i][1]-1; na[i2-1].num=i2-1; na[i2].num=i2; } sort(na+1,na+n2+1,compare); for(long long i=1;i<=n*2;i++){ int j=0,p=(na[i].num+1)/2; long long m=na[i].an; p++; while(p<=n){ if(con[p]==0)j++; p++;} p=(na[i].num+1)/2; p--; while(p>0){ if(con[p]==0)j++; p--; } m=f(m,j); ans+=m; ans%=1000000007; con[(na[i].num+1)/2]++; if(con[(na[i].num+1)/2]==2)break; } cout<<(ans+1)%1000000007; }
回复
共 2 条回复,欢迎继续交流。
正在加载回复...