A.Game with Integers
#include<bits/stdc++.h>
using namespace std;
#define N 10010
void solve()
{
int n,s=0;
cin>>n;
while(s<n)
{
s=s+3;
}
int x=min(n%3,s-n);
// cout<<x<<endl;
if(x%2==0) cout<<"Second"<<endl;
else cout<<"First"<<endl;
//cout<<endl;
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
思路:比较s和第一个大于n的3的倍数的差和第一个小于n的3的倍数的差,较小的那个为答案
B.250 Thousand Tons of TNT
#include<bits/stdc++.h>
using namespace std;
#define N 210010
#define ll long long
ll a[N];
void solve()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
//sort(a,a+n);
ll ans=-1;
for(int d=1;d<=n;d++)
{
if(n%d==0)
{
ll mx=-1e18,mn=1e18;
for(int i=0;i<n;i=i+d)
{
ll sum=0;
for(int j=i;j<i+d;++j)
{
sum+=a[j];
}
mx=max(mx,sum);
mn=min(mn,sum);
}
ans=max(ans,mx-mn);
}
}
cout<<ans<<endl;
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
不要排序!不要排序!!不要排序!!!
卡车上的货物是依次装上卡车的
思路:遍历1~n,并算出每种情况下,任意两辆卡车总重量的最大差的绝对值
C.Problem - C - Codeforces
#include<bits/stdc++.h>
using namespace std;
#define N 200100
#define ll long long
ll a[N];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
ll ans=a[1],g=0;
ll mn=min(a[1],g),sum=a[1];
for(int i=2;i<=n;i++)
{
if(abs(a[i]%2)==abs(a[i-1]%2))
{
mn=0;
sum=0;
}
sum+=a[i];
ans=max(sum-mn,ans);
mn=min(mn,sum);
}
cout<<ans<<endl;
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
E.Problem - E - Codeforces
#include<bits/stdc++.h>
using namespace std;
#define N 200100
#define ll long long
ll a[N];
void solve()
{
int n,minn=0x3f3f3f3f,flag=-1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]<minn)
{
minn=a[i];
flag=i;
}
}
for(int i=flag+1;i<n;i++)
{
if(a[i]-a[i+1]>0)
{
cout<<-1<<endl;
return ;
}
}
cout<<flag-1<<endl;
return ;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
思路:数组中可排序的范围是,按原数组顺序,最小值前面的部分
答案为,排在最小值前面的比最小值大的数的数量
若最小值后面的有降序的部分则不能成功排序