【第九届浪潮杯山东省大学生程序设计竞赛】F题 Four-tuples

本文介绍了一个基于容斥原理的算法,用于解决四个区间交集的问题,并通过C++代码实现了该算法。该算法利用了模运算和区间长度计算来处理多个区间之间的交并补操作。
#include<bits/stdc++.h>     //类似于容斥原理的思想;
using namespace std;
long long l1,r1,l2,r2,l3,r3,l4,r4,ans;
const long long mod=1e9+7;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        ans=0;
        scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&l3,&r3,&l4,&r4);
        ans=(ans+(r1-l1+1)%mod*(r2-l2+1)%mod)%mod;
        ans=ans*((r3-l3+1)%mod)%mod;
        ans=ans*((r4-l4+1)%mod)%mod;
        if(min(r1,r2)-max(l1,l2)+1>0) ans=(ans+mod-(min(r1,r2)-max(l1,l2)+1)%mod*(r3-l3+1)%mod*(r4-l4+1)%mod)%mod;
        if(min(r1,r4)-max(l1,l4)+1>0) ans=(ans+mod-(min(r1,r4)-max(l1,l4)+1)%mod*(r2-l2+1)%mod*(r3-l3+1)%mod)%mod;
        if(min(r2,r3)-max(l2,l3)+1>0) ans=(ans+mod-(min(r2,r3)-max(l2,l3)+1)%mod*(r1-l1+1)%mod*(r4-l4+1)%mod)%mod;
        if(min(r3,r4)-max(l3,l4)+1>0) ans=(ans+mod-(min(r3,r4)-max(l3,l4)+1)%mod*(r1-l1+1)%mod*(r2-l2+1)%mod)%mod;
        if(min(min(r1,r2),r3)-max(max(l1,l2),l3)+1>0) ans=(ans+(min(min(r1,r2),r3)-max(max(l1,l2),l3)+1)%mod*(r4-l4+1)%mod)%mod;
        if(min(min(r1,r3),r4)-max(max(l1,l3),l4)+1>0) ans=(ans+(min(min(r1,r3),r4)-max(max(l1,l3),l4)+1)%mod*(r2-l2+1)%mod)%mod;
        if(min(min(r1,r2),r4)-max(max(l1,l2),l4)+1>0) ans=(ans+(min(min(r1,r2),r4)-max(max(l1,l2),l4)+1)%mod*(r3-l3+1)%mod)%mod;
        if(min(min(r2,r3),r4)-max(max(l2,l3),l4)+1>0) ans=(ans+(min(min(r2,r3),r4)-max(max(l2,l3),l4)+1)%mod*(r1-l1+1)%mod)%mod;
        if(min(r1,r2)-max(l1,l2)+1>0&&min(r3,r4)-max(l3,l4)+1>0) ans=(ans+(min(r1,r2)-max(l1,l2)+1)%mod*(min(r3,r4)-max(l3,l4)+1)%mod)%mod;
        if(min(r3,r2)-max(l3,l2)+1>0&&min(r1,r4)-max(l1,l4)+1>0) ans=(ans+(min(r3,r2)-max(l3,l2)+1)%mod*(min(r4,r1)-max(l1,l4)+1)%mod)%mod;
        if(min(min(r1,r2),min(r3,r4))-max(max(l1,l2),max(l3,l4))+1>0) ans=(ans-3*(min(min(r1,r2),min(r3,r4))-max(max(l1,l2),max(l3,l4))+1)%mod+mod)%mod;
        printf("%lld\n",ans%mod);
    }
    return 0;
}

### 关于2021年高教社数学建模竞赛D连铸切割在线优化 #### 论文格式规范 在全国大学生数学建模竞赛中,论文的撰写需严格遵循官方规定的格式规范。以下是针对2021年高教社数学建模竞赛D——连铸切割在线优化的具体论文格式要求: 1. **封面页** 封面应包含团队编号、参赛题目以及队员姓名等内容。注意,正式提交时需移除所有可能泄露身份的信息。 2. **摘要部分** 摘要应当简洁明了地概述研究背景、主要方法、核心结论及其实际意义。字数控制在300至500字之间为宜[^1]。 3. **正文结构** 正文通常由以下几个部分组成:问重述、假设与符号说明、模型建立与求解、结果分析及验证、优缺点讨论等。每部分内容均需条理清晰,逻辑严密。 4. **图表使用** 所有插图和表格都必须标注序号与名称,并置于文中适当位置附近。例如,“表1 数据对比”或“图2 连铸工艺流程示意”。 5. **参考文献** 参考文献采用顺序编码制或者著者-出版年制均可,但全文统一即可。常见格式如APA风格或GB/T 7714标准[^2]。 6. **附录材料** 如果涉及复杂计算过程、程序源码或其他补充信息,则可以放置于附录之中。对于编程实现方面,推荐提供完整的算法描述加上关键代码片段展示: ```python def optimize_cutting_plan(cutting_loss, target_length): """ Optimize the cutting plan to minimize loss while satisfying user requirements. Parameters: cutting_loss (float): The amount of material lost during each cut. target_length (list[float]): List of desired lengths for steel slabs. Returns: list[tuple]: A sequence of optimized cuts represented as tuples containing start and end points. """ # Initialize variables... optimal_cuts = [] current_position = 0 while remaining_material > MIN_THRESHOLD: best_segment = find_best_fit(current_position, target_length) if not best_segment or invalid(best_segment): break apply_cut(best_segment) update_state() return optimal_cuts ``` #### 注意事项 确保所有的变量定义清楚明白,避免歧义;同时保持良好的可读性和模块化设计原则[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值