目录
A.面包店的故事
B.放课后故事
C.异或故事
D.构造故事
E.约会故事
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");}
}