#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dwn(i,a,b) for(int i=a;i>=b;i--)
#define N 100001
using namespace std;
double k,c,ans;
int n,w;
int op[N],a[N];
int main()
{
//freopen("input.txt","r",stdin);
scanf("%d%lf%lf%d",&n,&k,&c,&w);
rep(i,1,n)
scanf("%d%d",&op[i],&a[i]);
k=1-0.01*k,c=1+0.01*c;
dwn(i,n,1)
{
if(op[i]==1)
ans=max(ans,ans*k+a[i]);
else
ans=max(ans,ans*c-a[i]);
}
printf("%.2f",ans*w);
return 0;
}
考试技巧:
我写的10 pts没加任何优化……抽屉原理送您80pts
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
#define inf 1000000000
using namespace std;
ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,m;
ll sum[500005];
int main()
{
freopen("input.txt","r",stdin);
scanf("%d%d",&n,&m);
rep(i,1,n)
sum[i]=sum[i-1]+read();
int l,r,mod;
rep(i,1,m)
{
l=read(),r=read(),mod=read();
if(r-l+1>mod)puts("0");//抽屉原理
else
{
int ans=mod;//相当于赋了一个极大值
rep(i,l,r)
rep(j,i,r)
ans=min((int)((sum[j]-sum[i-1])%mod),ans);
//强行转int
printf("%d\n",ans);
}
}
return 0;
}
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int ans,n,m,cnt,mid;
int head[10000],used[105],dis[105],mark[105];
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node{
int v,w,nxt;
}e[10000];
vector<int>G[105];
void add(int u,int v,int w)
{
e[++cnt].v=v;
e[cnt].nxt=head[u];
e[cnt].w=w;
head[u]=cnt;
}
int SPFA()
{
memset(used,0,sizeof(used));
rep(i,1,n)dis[i]=INT_MAX;
used[1]=1;
queue<int>Q;
Q.push(1);
dis[1]=0;
while(!Q.empty())
{
int u=Q.front();
Q.pop();
if(used[u]>n)
return false;//负环
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(!mark[v])continue;
int dist=e[i].w+mid;//要加上偏移量
if(dis[v]>dis[u]+dist)
{
dis[v]=dis[u]+dist;
used[v]++;
Q.push(v);
}
}
}
if(dis[n]>=0 && dis[n]!=INT_MAX)
return true;
else
return false;
}
void DFS(int cur)
{
mark[cur]=1;
for(int i=0;i<G[cur].size();i++)
{
if(mark[G[cur][i]])continue;
DFS(G[cur][i]);
}
}
int main()
{
freopen("input.txt","r",stdin);
int T;
T=read();
while(T--)
{
cnt=0;ans=-1;
memset(head,0,sizeof(head));
memset(e,0,sizeof(e));
memset(mark,0,sizeof(mark));
int l=-INT_MAX,r=INT_MAX;
n=read(),m=read();
rep(i,1,m)
{
int x,y,z;
x=read(),y=read(),z=read();
add(x,y,z);
G[y].push_back(x);
}
l=-100000,r=100000;
DFS(n);
while(l<=r)
{
mid=(l+r)>>1;
if(SPFA())
{
ans=dis[n];
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",ans);
rep(i,1,n)G[i].clear();
}
return 0;
}
原文:https://www.cnblogs.com/sjsjsj-minus-Si/p/11635591.html