A 收集金币
分析
因为只有一次跳过的机会,所以要跳过的是对最后结果影响最大的那一次LOST。
对每个LOST进行一次处理,因为当手里不够LOST的值时,会将所有的全部丢掉,这个时候如果跳过他恢复的值并不是LOST的值,而是手里有的值,所以对LOST与当前值进行一次处理,记录差值与恢复值。
假设不跳过任何一次,最后遍历LOST数据,恢复对结果影响最大的那一项。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e4+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
struct one{
ll v;
ll add,dev;
}a[maxn];
ll sum[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
string s;
ll now=0;
for(int i=0;i<n;i++)
{
cin>>s;
scanf("%lld",&a[i].v);
if(s=="LOST")
{
if(a[i].v>now)
{
a[i].add=now;
a[i].dev=a[i].v-now;
now=0;
}
else {
a[i].add=a[i].v;
a[i].dev=0;
now-=a[i].v;
}
}
else {
a[i].add=0;
a[i].dev=0;
now+=a[i].v;
}
}
sum[n]=0;
for(int i=n-1;i>=0;i--)
{
sum[i]=sum[i+1]+a[i].dev;
}
ll mmax=-3e18;
for(int i=0;i<n;i++)
{
if(a[i].add>0)
{
mmax=max(mmax,a[i].add-sum[i+1]);
}
}
if(mmax>0) cout<<now+mmax<<endl;
else cout<<now<<endl;
}
return 0;
}
J 小凯的书架
分析
因为数据为随机数,考虑正态分布,卡时数据很少,直接暴力。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1e4+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int a[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
if(i<k)
{
printf("-1\n");
continue;
}
int now=0;
for(int j=i-1;j>=0;j--)
{
if(a[j]>a[i]) now++;
if(now==k)
{
printf("%d\n",a[j]);
break;
}
}
if(now!=k) printf("-1\n");
}
}
return 0;
}
K 未成年人之友
分析
签到题,if判断输出
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=100;
const ll mod=32768;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int main()
{
int t;
cin>>t;
while(t--)
{
int n,h,m;
string s;
int f=1;
cin>>n>>s;
scanf("%d:%d",&h,&m);
if(n>=18)
{
f=0;
}
int tim=h*60+m;
if(s=="Sun"||s=="Fri"||s=="Sat")
{
if(tim>=1200&&tim<1260)
{
f=0;
}
}
if(f)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}
L 黑曜石
分析
、、、
鸽了太久了、、、也准备退役了,就这样吧这篇