(EF给我干蒙了,有时间补吧……
int main() { ios::sync_with_stdio(false); cin.tie(nullptr),cout.tie(nullptr); //IO cin>>t; while(t--) { ans=0; cin>>n>>m>>k; if(k<m)ans=0; else if(k==m)ans=n-1; else { ll kk=min(n-1,k/m); if(kk==n-1)ans=(n*(n-1))/2; else { if(n<kk+1)ans=(n*(n-1))/2; else ans=(kk*(kk+1))/2+kk*(n-kk-1); } } cout<<ans<<endl; } }
(然后发现我想多了,其实思路可以非常简单//XD
int main() { ios::sync_with_stdio(false); cin.tie(nullptr),cout.tie(nullptr); //IO //cin>>t; //while(t--) { a[0]=0; cin>>n>>m; string s; cin>>s; rep(i,1,n) { if(i)a[i]=a[i-1]+s[i-1]-‘a‘+1; } rep(i,1,m) { ll l,r; cin>>l>>r; ans=a[r]-a[l-1]; cout<<ans<<endl; } } }
map<ll,ll>mp; int main() { ios::sync_with_stdio(false); cin.tie(nullptr),cout.tie(nullptr); //IO cin>>n>>k>>x; rep(i,1,n)cin>>a[i]; sort(a+1,a+1+n); rep(i,2,n) { if(a[i]-a[i-1]>x) { ll kk=(a[i]-a[i-1]-1)/x;//? ans++; if(!mp[kk])vis[++tt]=kk; mp[kk]++; } } ans++; sort(vis+1,vis+tt+1); rep(i,1,tt) { if(k>mp[vis[i]]*vis[i]) { ans-=mp[vis[i]]; k-=mp[vis[i]]*vis[i]; } else if(k==mp[vis[i]]*vis[i]) { ans-=mp[vis[i]]; k=0; i=tt+1; } else { ans-=k/vis[i]; k=0; i=tt+1; } } cout<<ans<<endl; }
bool cmp(node a,node b) { return a.b<b.b; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr),cout.tie(nullptr); //IO cin>>n; rep(i,1,n) { cin>>c[i].a>>c[i].b; } sort(c+1,c+1+n,cmp); ll l=1,r=n; while(l<=r) { if(c[l].b<=cnt) { ans+=c[l].a; cnt+=c[l].a; l++; } else { ll minn=min(c[r].a,c[l].b-cnt); cnt+=minn; ans+=2*minn; c[r].a-=minn; if(c[r].a==0)r--; } } cout<<ans<<endl; }
Codeforces Round #727 (Div. 2)部分题解(A-D)
原文:https://www.cnblogs.com/Geospiza/p/14966084.html