目录
A.面包店的故事
思路: 签到题
C++代码:
void solve()
{
int a,b,c;cin>>a>>b>>c;
int sum=b+a;
cout<<(sum<=c?"YES":"NO");
}
B.放课后故事
思路:注意在纸足够多的情况下,分到的人不会超过m+1
C++代码:
void solve()
{
int n,m,k;cin>>n>>m>>k;
int sum=0,cnt=0;
for(int i=0;i<n;i++)
{
int x;cin>>x;
sum+=x;
cnt+=sum/k;
sum%=k;
}
if(cnt>=m+1) cout<<m+1;
else cout<<cnt;
}
C.异或故事
思路:根据异或的性质我们得出,用1去异或上一个数n,如果n为奇数则得到n−1,否则我们会得到n + 1,由此,们发现,直接用1去异或就好了嘛,但考虑特殊的两个数,输入为1或1e9时,我们发现,用1去异或得到的两个数为0和1e9 + 1,不在我们要求的范围内,所以我们特判一下这两个数即可
C++代码:
void solve()
{
int t;cin>>t;
while(t--)
{
int x;cin>>x;
if(x==1e9)
{
cout<<"999999999 1023"<<endl;
continue;
}
else if(x==1) cout<<"2 3"<<endl;
else cout<<1<<' '<<(1^x)<<endl;
}
}
D.构造故事
思路:贪心+排序,依次枚举三条最大的边,如果符合三角形的三边关系则退出循环,否则输出-1
C++代码:
void solve()
{
int t;cin>>t;
while(t--)
{
int n;cin>>n;
vector<int> v(n);
for(auto &it:v) cin>>it;
sort(v.begin(),v.end());
int maxd=0;
for(int i=v.size()-1;i-2>=0;i--)
{
if(v[i]+v[i-1]>v[i-2]&&v[i]-v[i-1]<v[i-2])
{
maxd=max(maxd,v[i]+v[i-1]+v[i-2]);
break;
}
}
if(maxd) cout<<maxd<<endl;
else cout<<-1<<endl;
}
}
E.约会故事
输入样例:
3 2 00:03 00:47 00:30 01:23 12:00 17:00 Lemonade Cappuccino 5 00:35 12:00 12:00 Cappuccino 01:23 13:00 12:59 Cappuccino 01:15 11:00 12:43 WaTer 01:24 09:24 11:00 Lemonade 23:59 08:00 07:43 LeMonade
输出样例:
Winner xqq Joker xqq Joker xqq Loser xqq Loser xqq
思路:一个模拟题,首先我们该如何判断xqq发出邀请的时间是在小c的开心时间呢,其实我们只需要将小c每次开心的起始时间和结束时间,转化为分钟,用一个数组标记即可,我们还要注意可能会存在跨天的情况,此时结束时间小于开始时间,我们只需要标记0分钟到结束时间的分钟就可以了,具体请看代码(这道题用stoi函数可以将字符串转化为整型)。
C++代码:
void solve()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
string s1,s2;cin>>s1>>s2;
int h1=stoi(s1.substr(0,2));
int m1=stoi(s1.substr(3,2));
int t1=h1*60+m1;
int h2=stoi(s2.substr(0,2));
int m2=stoi(s2.substr(3,2));
int t2=h2*60+m2;
if(t1<t2)
{
for(int i=t1;i<=t2;i++) a[i]=1;
}
else
{
for(int i=0;i<=t2;i++) a[i]=1;
}
}
set<string> s;
for(int i=0;i<m;i++)
{
string b;cin>>b;
s.insert(b);
}
cin>>q;
while(q--)
{
string tim,s1,s2,s3;cin>>tim>>s1>>s2>>s3;
int h=stoi(tim.substr(0,2));
int m=stoi(tim.substr(3,2));
int t=h*60+m;
int h1=stoi(s1.substr(0,2));
int m1=stoi(s1.substr(3,2));
int t1=h1*60+m1;
int h2=stoi(s2.substr(0,2));
int m2=stoi(s2.substr(3,2));
int t2=h2*60+m2;
if(t>119||!a[t])
{
puts("Loser xqq");
continue;
}
if(t1>t2||!s.count(s3))
puts("Joker xqq");
else puts("Winner xqq");
}
}