blue bridge cup

冶炼

#include<iostream>
using namespace std;

long long n;
int a[10000],b[10000];

bool judge2(int x)
{
    for(int i=0;i<n;i++)
    {
        if(a[i] / x > b[i]) return false;
    }
    return true;
}

bool judge1(int x)
{
    for(int i=0;i<n;i++)
    {
        if(a[i] / x < b[i]) return false;
    }
    return true;
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i]>>b[i]; 
    }
    int l=1,r=1e4;
    while(l<r)
    {
        int mid=l+r>>1;
        if(judge2(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l<<" ";
    l=1, r=1e4;
    while(l<r)
    {
        int mid=l+r>>1;
        if(judge1(mid)) l=mid+1;
        else r=mid;
    }
    cout<<l-1;
}

买瓜

#include<iostream>
#include<algorithm>
using namespace std;

const int N=31;
int n,m;
double w[N];
double sum[N];
int res=1e9;

void dfs(int x,int cnt,double ww)
{
	if(ww==m)
	{
		res=min(res,cnt);
		return ;
	}
	if(cnt>=res) return ;//不如
	if(ww+sum[n]-sum[x]<m) return ;//缺
	if(x>=n) return ;//遍布完
	if(ww>m) return ;//超载
	dfs(x+1,cnt+1,ww+w[x]/2.0);//切
	dfs(x+1,cnt,ww+w[x]);//不切
	dfs(x+1,cnt,ww);//不考虑
	
}

bool comp(double x,double y)
{
	return x>y;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)
	{
		cin>>w[i];
	}
	sort(w,w+n,comp);
	sum[0]=0;
	for(int i=0;i<n;i++)
	{
		if(i==0) sum[i+1]=w[i];
		else sum[i+1]=sum[i]+w[i];
	}
	dfs(0,0,0.0);
	if(res==1e9) cout<<"-1";
	else cout<<res;
}

子串简写

#include<iostream>
#include<string>
#include<vector>
#define int long long
using namespace std;

struct vv
{
	int n,m=0;
};

int n;
string s;
char a,b;
vector<vv> v;
int ant=0;
int k;
vv temp;

signed main()
{
	cin>>k;
	cin>>s>>a>>b;
	for(int i=0;i<(int)s.size();i++)
	{
		if(s[i]==a)
		{
			temp.n=i;
			temp.m++;
			v.push_back(temp);
		}
		if(s[i]==b)
		{
			if(i - k + 1 < 0 || !v.size())
				continue;
			int l=0,r=v.size()-1;
			while(l<r)
			{
				int mid=(l+r+1)>>1;
				if(v[mid].n<=(i-k+1)) l=mid;
				else r=mid-1;
			}
			if(v[l].n<=i-k+1) ant+=v[l].m;
		}
	}
	cout<<ant;
}

接龙数列——不断简化

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int res=0;
int dp[10];
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		string s;
		cin>>s;
		int a=s[0]-'0',b=s.back()-'0';
		dp[b]=max(dp[b],dp[a]+1);
		res=max(res,dp[b]);
	}
	cout<<n-res;
}

飞机降落

#include<iostream>
#include<algorithm>
using namespace std;
 
 
const int N=11;
int T,n;
struct plane
{
    int t,d,l;
}p[N];
bool st[N];
string answer[N];
 
 
bool dfs(int x,int time)
{
    if(x==n) return true;
    for(int i=0;i<n;i++)
    {
        if(!st[i])
        {
            st[i]=true;
            if(time>p[i].d+p[i].t)
            {
                st[i]=false;
                return false;
            }
            int t=max(time,p[i].t)+p[i].l;
            if(dfs(x+1,t)) return true;
            st[i] = false;
        }
    }
    return false;
}
 
 
int main()
{
    scanf("%d",&T);
    for(int i=0;i<T;i++)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d %d",&p[i].t,&p[i].d,&p[i].l);
        }
        if(dfs(0,0)) answer[i]="YES";
        else answer[i]="NO";
        for(int i = 0; i < n; i ++)
            st[i] = false;
    }
    for(int i=0;i<T;i++)
    {
        cout<<answer[i]<<endl;
    }
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值