A题
签到
#include<bits/stdc++.h> using namespace std; int main() { int n,rw=0,t=0; cin>>n; for(int i=1;i<=n;i++) { int r; cin>>r; if(r>rw) rw=r; if(i>=rw) t++; } cout<<t<<endl; return 0; }
B题
前后枚举,看看那个情况小
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=1e6+10; const int mod=1e9+7; int main(){ ios::sync_with_stdio(false); int t; cin>>t; while(t--){ int n; cin>>n; string s; cin>>s; int cnt1=0,cnt2=0; int i; for(i=0;i<n;i++){ if(s[i]==‘<‘) cnt1++; else break; } for(i=n-1;i>=0;i--){ if(s[i]==‘>‘) cnt2++; else break; } cout<<min(cnt1,cnt2)<<endl; } return 0; }
C题
贪心算法,按照beauty排序之后倒序维护一个优先队列最大的k个值
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=1e6+10; const int mod=1e9+7; struct node{ ll a,b; }s[N]; ll sum; priority_queue<int,vector<int>,greater<int> > q; bool cmp(node a,node b){ return a.b<b.b; } int main(){ ios::sync_with_stdio(false); int n,k; cin>>n>>k; int i; for(i=1;i<=n;i++){ cin>>s[i].a>>s[i].b; } sort(s+1,s+1+n,cmp); ll ans=0; for(i=n;i>=1;i--){ int tmp=0; if((int)q.size()==k){ tmp=q.top(); q.pop(); } ans=max(ans,(sum-tmp+s[i].a)*s[i].b); q.push(tmp); q.push(s[i].a); sum+=s[i].a; if((int)q.size()>k){ sum-=q.top(); q.pop(); } } cout<<ans<<endl; return 0; }
D题
区间dp三角剖分裸题
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=1e6+10; const int mod=1e9+7; ll f[1010][1010]; ll w[N]; int main(){ ios::sync_with_stdio(false); int i; int n; cin>>n; memset(f,-1,sizeof f); for(i=1;i<n;i++){ f[i][i+1]=0; } for(int len=3;len<=n;len++){ for(int i=1;i+len-1<=n;i++){ int j=i+len-1; for(int k=i+1;k<j;k++){ if(f[i][j]==-1||f[i][j]>f[i][k]+f[k][j]+i*j*k) f[i][j]=f[i][k]+f[k][j]+i*j*k; } } } cout<<f[1][n]<<endl; return 0; }
Educational Codeforces Round 62题解
原文:https://www.cnblogs.com/ctyakwf/p/14203251.html