hdu6803
题目
时间是越小越好
简单水题
#include <iostream>
using namespace std;
int a[1005];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--)
{
int min_=1e9+5;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int A,D;
cin>>A>>D;
a[i]=((100/A)+(100%A!=0)-1)*D;
if(a[i]<min_)
min_=a[i];
}
int res=0;
for(int i=1;i<=n;i++)
{
if(a[i]==min_)
{
res++;
}
}
double xx=1.0*res/(2*n);
cout<<1-xx<<"\n";
}
return 0;
}
hdu6805
题目
拆点最短路径
(经典题)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e18;
const int maxn=1e5+5;
const int maxm=2e5+5;
ll n,m,s,t,xx;
ll S,T;
char str[maxn];
ll dis[maxn*2];
bool vis[maxn*2];
struct node
{
ll v,w;
node()
{
}
node(ll v_,ll w_)
{
v=v_;
w=w_;
}
bool operator <(const node & b)const
{
return w>b.w;
}
};
priority_queue<node> que;
struct edge
{
ll v,next,w;
};
edge no[10*maxm];
int head[2*maxn];
int cnt;
void init()
{
cnt=1;
memset(head,0,sizeof(head));
}
void add(ll x,ll y,ll w)
{
no[cnt].v=y;
no[cnt].w=w;
no[cnt].next=head[x];
head[x]=cnt;
cnt++;
}
void dijkstra()
{
for(int i=0;i<2*maxn;i++)
{
dis[i]=INF;
vis[i]=false;
}
while(!que.empty())
que.pop();
que.push(node(S,0));
dis[S]=0;
while(!que.empty())
{
node ne=que.top();
que.pop();
ll u=ne.v;
if(vis[u])
continue;
vis[u]=true;
for(int i=head[u];i;i=no[i].next)
{
ll v=no[i].v;
ll w=no[i].w;
if(dis[v]>dis[u]+w&&!vis[v])
{
dis[v]=dis[u]+w;
que.push(node(v,dis[v]));
}
}
}
cout<<dis[T]<<"\n";
}
void solve()
{
cin>>n>>m>>s>>t>>xx;
cin>>str+1;
S=1,T=0;
for(int i=1;i<=m;i++)
{
ll x,y,z;
cin>>x>>y>>z;
for(int tx=0;tx<2;tx++)
{
if(tx==0&&str[x]=='R')
continue;
if(tx==1&&str[x]=='L')
continue;
for(int ty=0;ty<2;ty++)
{
if(ty==0&&str[y]=='R')
continue;
if(ty==1&&str[y]=='L')
continue;
add(x<<1|tx,y<<1|ty,z+(tx!=ty)*xx);
add(y<<1|ty,x<<1|tx,z+(tx!=ty)*xx);
}
}
}
for(int ts=0;ts<2;ts++)
{
if(ts==0&&str[s]=='R')
continue;
if(ts==1&&str[s]=='L')
continue;
add(S,s<<1|ts,0);
}
for(int tt=0;tt<2;tt++)
{
if(tt==0&&str[t]=='R')
continue;
if(tt==1&&str[t]=='L')
continue;
add(t<<1|tt,T,0);
}
dijkstra();
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int _=1;
cin>>_;
while(_--)
{
init();
solve();
}
return 0;
}
hdu6806
题目
简单dp dp[i]=dp[i-1](i和i-1不换)+dp[i-2](i 和i-1 换)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=1e9+5;
const int mod=1e9+7;
const int maxn=1e5+5;
int dp[maxn];
void init()
{
}
void solve()
{
int n;
dp[0]=1;
dp[1]=1;
cin>>n;
string s,pre;
for(int i=1;i<=n;i++)
{
if(i==1)
{
cin>>pre;
continue;
}
cin>>s;
if(s==pre)
{
dp[i]=dp[i-1];
}
else
{
dp[i]=(1ll*dp[i-1]+1ll*dp[i-2])%mod;
}
pre=s;
}
cout<<dp[n]<<endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int _=1;
cin>>_;
while(_--)
{
init();
solve();
}
return 0;
}
hdu6808
题目
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e18;
const int maxn=1e5+5;
vector<ll> vv,uu;
ll l[maxn*2],r[maxn*2];
int level[maxn*2];
queue <int >q;
int n;
struct edge
{
int v,next;
ll w;
};
edge no[maxn*20];
int head[maxn*2];
int cnt;
void add(int u,int v,int w)
{
no[cnt].v=v;
no[cnt].w=w;
no[cnt].next=head[u];
head[u]=cnt;
cnt++;
no[cnt].v=u;
no[cnt].w=0;
no[cnt].next=head[v];
head[v]=cnt;
cnt++;
}
void init()
{
vv.clear(),uu.clear();
cnt=1;
memset(head,0,sizeof(head));
}
bool bfs(int s,int t,int n)
{
for(int i=1;i<=n;i++)
level[i]=-1;
while(!q.empty())
q.pop();
q.push(s);
level[s]=0;
while(!q.empty())
{
int u=q.front();
if(u==t)
return true;
q.pop();
for(int i=head[u];i;i=no[i].next)
{
edge &e=no[i];
if(e.w>0&&level[e.v]==-1)
{
level[e.v]=level[u]+1;
q.push(e.v);
}
}
}
return false;
}
ll dfs(int u,int t,ll max_)
{
if(u==t)
return max_;
ll sum=0;
for(int i=head[u];i;i=no[i].next)
{
edge &e=no[i];
if(e.w>0&&level[e.v]==level[u]+1)
{
ll f=dfs(e.v,t,min(e.w,max_-sum));
sum+=f;
e.w-=f;
no[1+((i-1)^1)].w+=f;
if(sum==max_)
break;
}
}
if(!sum)
level[u]=-1;
return sum;
}
ll dinic(int s,int t,int n)
{
ll ans=0;
while(bfs(s,t,n))
{
ll f;
while((f=dfs(s,t,INF))>0)
{
ans+=f;
}
}
return ans;
}
void discreate()
{
sort(uu.begin(),uu.end());
sort(vv.begin(),vv.end());
uu.erase(unique(uu.begin(),uu.end()),uu.end());
vv.erase(unique(vv.begin(),vv.end()),vv.end());
for(int i=1;i<=n;i++)
{
l[i]=lower_bound(uu.begin(),uu.end(),l[i])-uu.begin()+1;
r[i]=lower_bound(vv.begin(),vv.end(),r[i])-vv.begin()+1+uu.size();
}
}
void build()
{
int s,t;
s=2*n+1,t=2*n+2;
/*for(int i=1;i<=uu.size();i++)
add(s,i,1);*/
for(int i=1;i<=n;i++)
add(l[i],r[i],1);
/*for(int i=1;i<=vv.size();i++)
add(i+uu.size(),t,1);*/
for(int i=0;i<uu.size();i++)
add(s,i+1,1);
for(int i=0;i<vv.size();i++)
add(i+1+uu.size(),t,1);
cout<<dinic(s,t,2*n+2)<<endl;
}
void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
{
ll t,x;
cin>>t>>x;
l[i]=t-x,r[i]=t+x;
uu.push_back(t-x);
vv.push_back(t+x);
}
discreate();
build();
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int _=1;
cin>>_;
while(_--)
{
init();
solve();
}
return 0;
}