打表就会神奇的发现规律(当时想错了错好几发)
#include "bits/stdc++.h" #define pll __builtin_popcount #define all(a) a.begin(),a.end() #define pb push_back using namespace std; using ll = long long ; inline void solve() { ll n;cin>>n; if(n<=6){ cout<<15<<"\n"; }else{ if(n%2==0)n--; n-=4; n=n/2+1; cout<<n*5+10<<"\n"; } } int main() { //freopen("out.txt","w",stdout); //int a[]={15,15,15,15,15,15,20,20,25,25,30,30,35,35,40,40,45,45,50,50,55,55,60,60,65,65,70,70,75,75,80,80,85,85,90,90,95,95,100,100,105,105,110,110,115,115,120,120,125,125,130,130,135,135,140,140,145,145,150,150,155,155,160,160,165,165,170,170,175,175,180,180,185,185,190,190,195,195,200,200,205,205,210,210,215,215,220,220,225,225,230,230,235,235,240,240,245,245,250,250,255,255,260,260,265,265,270,270,275,275,280,280,285,285,290,290,295,295,300,300,305,305,310,310,315,315,320,320,325,325}; //for(int i=1;i<=130;i++)mp[i]=a[i-1]; ios::sync_with_stdio(false); int T=1; cin>>T; while(T--) solve(); return 0; }
尽可能把能移动的对称到右上角不能移动的放左下角
#include "bits/stdc++.h" #define pll __builtin_popcount #define all(a) a.begin(),a.end() #define pb push_back using namespace std; using ll = long long ; void solve() { int w,h; cin>>w>>h; int a,b,c,d; cin>>a>>b>>c>>d; if(a<w-c){ int p=w-c-a; a+=p; c+=p; } if(b<h-d){ int p=h-d-b; b+=p; d+=p; } int u,v; cin>>u>>v; if(a<u&&b<v){ int ans=0x3f3f3f3f; int p=u-a; if(c+p<=w)ans=p; p=v-b; if(d+p<=h)ans=min(ans,p); if(ans==0x3f3f3f3f){ cout<<"-1\n";return ; } cout<<(double)ans<<"\n"; return ; } cout<<(double)0<<"\n"; } int main() { cout<<fixed<<setprecision(9); ios::sync_with_stdio(false); int T=1; cin>>T; while(T--) solve(); return 0; }
题意Alice和Bob想走到2,m且Alice走过的路的权值都会变成0,Alice想让Bob走的权值的和最小,Bob与之相反问答案在二者最优的情况是多少(前缀和模拟下就行了)
#include "bits/stdc++.h" #define pll __builtin_popcount #define all(a) a.begin(),a.end() #define pb push_back using namespace std; using ll = long long ; ll a[3][100002]; void solve() { int n; cin>>n; for(int i=1;i<=2;i++) for(int j=1;j<=n;j++)cin>>a[i][j]; for(int i=1;i<=2;i++) for(int j=1;j<=n;j++) a[i][j]+=a[i][j-1]; ll ans=1e18; for(int i=1;i<=n;i++){ ans=min(ans,max(a[1][n]-a[1][i],a[2][i-1]-a[2][0])); } cout<<ans<<"\n"; } int main() { //cout<<fixed<<setprecision(9); ios::sync_with_stdio(false); int T=1; cin>>T; while(T--) solve(); return 0; }