1002- C++ to Python
题意提炼
将字符串中除 数字,括号,逗号 保留,其他删去即可
AC代码
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
string out;
string in;
while(T--)
{
out="";
cin>>in;
for(int i=0;i<in.length();i++){
if((in[i]>=48&&in[i]<=57)||in[i]=='('||in[i]==')'||in[i]=='-'||in[i]==',')
out+=in[i];
}
cout<<out<<endl;
}
}
1007-Snatch Groceries
题意提炼
给定 n 个区间,求出在区间开始重叠之前右多少个区间(端点重合也算重叠)
思考分析
将所有区间按照左端点从小到大排序,从第二个区间内开始,将每个区间的左端点与前一个端点的右端点比较,最后统计即可
AC代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
int st;
int ed;
} people;
bool cmp(people a,people b)
{
return a.st<b.st;
}
int main()
{
int t;
cin>>t;
int num,st,ed,cnt;
while(t--)
{
cnt=0;
cin>>num;
people time[num];
for(int i=0;i<num;i++)
{
cin>>st>>ed;
time[i].st=st;
time[i].ed=ed;
}
sort(time,time+num,cmp);
bool flag=true;
for(int i=1;i<num;i++)
{
if(time[i].st>time[i-1].ed)
{
cnt++;
}
else
{
flag=false;
break;
}
}
if(flag==true)
cnt++;
cout<<cnt<<endl;
}
}
1012-Luxury cruise ship
题意提炼
Kayzin每天可以攒 7 或 31 或 365 金币,给出一个数n,最少要多少天,Kayzin能正好攒够n个金币,若不能正好攒够,则输出-1(N (1≤N≤10^18)
思考分析
解法不唯一,我这里就当成数论题来做
观察到 365 = 30 * 7 + 5 * 31
我们可以直接将问题化成该数能否由 31 与 7组成就行,最终再根据 31 与 7 的数量尽量组成365
当n<730时
我们直接将n mod 31 然后得到一个余数,让余数每次加上31 观察能否被7整除,最后我们尽量凑到 30个7 5个31凑出一个365(注意考虑 31 与 7之间的个数转化,例如 12 * 31 + 2 * 7 可以化成 5* 31 + 33 * 7 来凑365)
当 n>=730时,我们直接将 n mod 365 得到的余数再加上一个 365 按照前一种情况考虑
#include<iostream>
using namespace std;
typedef long long ll;
ll solve(ll n)
{
bool flag=true; //能否正好凑出
ll cnt31=n/31,cnt365=0;
ll cnt7;
ll m=n%31;
while(m<=n)
{
if(m%7==0)
{
cnt7=m/7;
break;
}
if(m==n) //如果凑不到 31 与 7 的组合
{
flag=false;
}
cnt31--;
m+=31;
}
if(cnt31>=5 && cnt7>=30) //先计算一次
{
cnt31-=5;
cnt7-=30;
cnt365++;
}
if(cnt31>=12)
{
cnt31-=7;
cnt7+=31;
}
if(cnt31>=5 && cnt7>=30)
{
cnt31-=5;
cnt7-=30;
cnt365++;
}
if(flag)
return cnt365+cnt31+cnt7;
else
return -1;
}
int main()
{
int t;
cin>>t;
ll N,ans,tmp,m;
while(t--)
{
cin>>N;
if(N<730)
cout<<solve(N)<<endl;
else
{
ans=N/365-1;
m=N%365+365;
tmp=solve(m);
if(tmp==-1)
{
cout<<"-1"<<endl;
continue;
}
else
{
cout<<ans+tmp<<endl;
}
}
}
}