Codeforces Round #707

A:模拟题,每次进站加上应该要的时间和延迟的时间

 每次等待的时候需要题给定的两个条件都满足。

 注意:最后一站不需要等待,所以需要单独考虑。

复制代码
 1 #include<cstring>
 2 #include<algorithm>
 3 #include<iostream>
 4 using namespace std;
 5 const int N=110;
 6 int a[N],b[N],tm[N];
 7 int main(void){
 8     int t;
 9     cin>>t;
10     while(t--){
11         int n;
12         cin>>n;
13         for(int i=1;i<=n;i++){
14             cin>>a[i]>>b[i];
15         }
16         for(int i=1;i<=n;i++){
17             cin>>tm[i];
18         }
19         int res=0;
20         for(int i=1;i<n;i++){
21             //进站
22             res=res+a[i]-b[i-1]+tm[i];
23             //等待
24             res+=(b[i]-a[i]+1)/2;
25             if(res<b[i]) res=b[i];
26         }
27         res=res+a[n]-b[n-1]+tm[n];
28         cout<<res<<endl;
29     }
30     return 0;
31 }
复制代码

 

 

B:常规差分问题。

复制代码
 1 #include<cstring>
 2 #include<algorithm>
 3 #include<iostream>
 4 using namespace std;
 5 const int N=2e5+10;
 6 int res[N];
 7 int main(void){
 8     int t;
 9     cin>>t;
10     while(t--){
11         memset(res,0,sizeof(res));
12         int n;
13         cin>>n;
14         for(int i=1;i<=n;i++){
15             int q;
16             cin>>q;
17             int t=max(0,i-q+1);
18             res[t]+=1;
19             res[i+1]-=1;
20         }
21         for(int i=1;i<=n;i++){
22             res[i]+=res[i-1];
23             if(res[i]>0) cout<<1<<" ";
24             else cout<<0<<" ";
25         }
26         cout<<endl;
27     }
28     return 0;
29 }
复制代码

 

 

C:必须参照区间DP的枚举方法,枚举线段长度和起点,不然会被一个全1的数据卡。(其实具体的我也不明白)

复制代码
 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 const int N=2e5+10;
 5 const int M=5e6+10;
 6 typedef pair<int,int> PII;
 7 vector<PII> v[M];
 8 int a[N];
 9 int main(void){
10     int n;
11     cin>>n;
12     for(int i=1;i<=n;i++) cin>>a[i];
13     for(int i=1;i<=n;i++){
14         for(int j=1;i+j<=n;j++){
15             int t=a[i+j]+a[j];
16             for(auto x:v[t]){
17                 if(x.first!=i+j&&x.first!=j&&x.second!=i+j&&x.second!=j){
18                     puts("YES");
19                     printf("%d %d %d %d\n",i+j,j,x.first,x.second);
20                     return 0;
21                 }
22             }
23             v[t].push_back({i+j,j});
24         }
25     }
26     puts("NO");
27     return 0;
28 }
复制代码

 

posted on   greenofyu  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示