20200803 牛客多校赛
上菜
#include <iostream>
#include <set>
#include <iostream>
#include <cstring>
#include <queue>
#include <math.h>
#include <map>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
int a[maxn],b[maxn],c[maxn]={0},d[maxn],out,n,flag,num;
set<int> s;
set<int> nums;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
inline void sort(int a[],int n)
{
int temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(a[j]<a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
int main()
{
int t=read();
for(int i=1;i<=t;i++)
{
int n=read(),min1=1e5+10,coun=0,sum=0,desk=n-1;
for(int j=0;j<n;j++){
c[j]=read();if(j>0)c[j]+=c[j-1];
// if(c[j]>max1)max1=c[j];
// if(c[j]<max1)c
}
for(int j=0;j<n;j++){
int p=read();
min1=a[j]=min(p,min1);
}
memcpy(d,c,sizeof(c));
int temp;
for(int j=0;j<n-1;j++)
{
for(int g=0;g<n-j-1;g++)
if(d[g]>d[g+1])
{
//cout<<d[g]<<" "<<d[g+1]<<endl;
temp=d[g+1];
d[g+1]=d[g];
d[g]=temp;
//cout<<d[g]<<" "<<d[g+1]<<endl;
}
//cout<<d[n-1-j]<<endl;
for(int k=desk;k>=0;k--)
{
if(c[k]==d[n-1-j])
{
if(a[k]!=coun){
sum+=c[k]*(a[k]-coun);
coun=a[k];
desk=k-1;
}
//cout<<sum<<endl;
break;
}
}
}
cout<<"Case #"<<i<<": "<<a[0]<<' '<<sum<<endl;
}
return 0;
}
游戏
#include <iostream>
#include <set>
#include <iostream>
#include <cstring>
#include <queue>
#include <math.h>
#include <map>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
int a[maxn],b[maxn],out,n,flag,num;
set<int> s;
set<int> nums;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
inline void dfs(int c,int m)
{
if(flag)
{
if(m==n)
{
if(c>out)out=c;
if(out==num)flag=0;
//cout<<3<<endl;
return;
}
if(s.insert(a[m]).second)
{
dfs(c+1,m+1);s.erase(s.find(a[m]));
//cout<<1<<endl;
//cout<<' '<<a[m]<<endl;
}
//cout<<m<<endl;
if(s.insert(b[m]).second)
{
dfs(c+1,m+1);s.erase(s.find(b[m]));
//cout<<2<<endl;
}
dfs(c,m+1);
}
}
inline void clean()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
s.clear();
nums.clear();
out=0;
flag=1;
}
int main()
{
int t;
t=read();
for(int j=1;j<=t;j++)
{
n=read();
clean();
for(int i=0;i<n;i++)
{
a[i]=read();b[i]=read();
}
nums.insert(a,a+n-1);
nums.insert(b,b+n-1);
num=nums.size();
dfs(0,0);
cout<<"Case #"<<j<<": "<<out<<endl;
}
return 0;
}

浙公网安备 33010602011771号