冶炼
#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;
}
}