[考试反思]1001csp-s模拟测试(b):逃离

[考试反思]1001csp-s模拟测试(b):逃离

如你所见,b组题,除了NC乱入直奔T2抢了我一个首杀以外A层学过FFT的人都没有参加。

竞争压力很小,题又简单,所以就造就了6个AK。

然而并不计入总分,我仍然稳在第二机房。

T1lyl16分钟切掉我也是佩服,我没看数据范围打错复杂度(多了个二分)23分钟码完,T30。

思路都不是很毒瘤,代码也很好打,加起来都没有2k。

47分钟时干掉T3后我觉得差不多AK了,去厕所听到隔壁听讲FFT的声音,有些难过。

回来之后打开题库翻看FFT的题目看了半个小时左右。

然后自觉无聊,重新算了一下T1复杂度发现会被卡,改了。

过了一会,教练叫我去隔壁听了一会讲。。。

因为T1的失手导致了少听了33分钟的课。。。吸取教训

一定要认真算好复杂度再开始打。

 

T1:X国的军队

考虑贪心并逆推。把b数组都减去a数组的量表示战后至少剩下多少人。

考虑每个任务放进优先队列里,只要战后剩余人数足够就继续,否则就补人。

 1 #include<cstdio>
 2 #include<queue>
 3 using namespace std;
 4 priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
 5 int a[100005],b[100005];
 6 int read(){
 7     register int p=0;register char ch=getchar();
 8     while(ch>'9'||ch<'0')ch=getchar();
 9     while(ch<='9'&&ch>='0')p=(p<<3)+(p<<1)+ch-'0',ch=getchar();
10     return p;
11 }
12 int main(){
13     int t=read();
14     while(t--){
15         int n=read();long long tot=0,now=0,ex=0;
16         for(int i=1;i<=n;++i)a[i]=read(),b[i]=read(),tot+=a[i],q.push(make_pair(b[i]-a[i],i));
17         while(!q.empty()){
18             int x=q.top().first;
19             if(x>now)ex+=x-now,now=x;
20             now+=a[q.top().second],q.pop();
21         }
22         printf("%lld\n",ex+tot);
23     }
24 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案