7-3 强迫症
简单的模拟但是注意这句话:对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
string s;
cin>>s;
int n=s.size();
if(n==6)
{
for(int i=0;i<=3;i++) cout<<s[i];
cout<<"-";
for(int i=4;i<=5;i++) cout<<s[i];
}
if(n==4)
{
if(s[0]>='2'&&s[1]>='2'){
cout<<"19";
for(int i=0;i<=1;i++) cout<<s[i];
cout<<"-";
for(int i=2;i<=3;i++) cout<<s[i];
}
else{
cout<<"20";
for(int i=0;i<=1;i++) cout<<s[i];
cout<<"-";
for(int i=2;i<=3;i++) cout<<s[i];
}
}
}
signed main()
{
solve();
}
7-4 小孩子才做选择,大人全都要
同样是简单的模拟,分类讨论一下即可
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int a,b,maxx,minn;
cin>>a>>b;
if(a>0&&b>0){
maxx=max(a,b);
cout<<maxx<<" "<<a+b<<endl;
cout<<"^_^";
}
else if(a<0&&b>0||a>0&&b<0)
{
maxx=max(a,b);
minn=min(a,b);
if(maxx+minn<=0){
cout<<maxx<<" "<<"0"<<endl;
cout<<"T_T";
}
else {
cout<<maxx<<" "<<maxx+minn<<endl;
cout<<"T_T";
}
}
else if(a<0&&b<0){
cout<<"0"<<" "<<"0"<<endl;
cout<<"-_-";
}
}
signed main()
{
solve();
}
7-5 胎压监测
还是简单的模拟
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int a[5],minn,p;
int maxx=-1;
for(int i=1;i<=4;i++){
int x;
cin>>x;
a[i]=x;
maxx=max(maxx,x);
}
cin>>minn>>p;
int cnt1=0,mark;
for(int i=1;i<=4;i++)
{
if(abs(maxx-a[i])>p||a[i]<minn){
cnt1++;
mark=i;
}
}
if(cnt1==1) cout<<"Warning: please check #"<<mark<<"!";
else if(cnt1>=2) cout<<"Warning: please check all the tires!";
else cout<<"Normal";
}
signed main()
{
solve();
}
7-6 吉老师的回归
这题先用cnt记录一下不是qiandao和easy的题目有多少个,然后开个标记数组,记录一下每个不是easy和qiandao的题的下标,然后看cnt有没有大于这个m如果有就是,就是在做第m+1题,注意输入完nm以后要有一个getline来抵消一个回车键,再开始输入字符串
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n,m,cnt=0,temp=1,a[35]={0};
string s[35],s1;
cin>>n>>m;
getline(cin,s1);
for(int i=1;i<=n;i++)
{
getline(cin,s[i]);
int pos1=s[i].find("qiandao");
int pos2=s[i].find("easy");
//cout<<pos1<<" "<<pos2<<endl;
if(pos1==-1&&pos2==-1)
{
a[temp]=i;
temp++;
cnt++;
}
}
if(cnt<=m) cout<<"Wo AK le";
if(cnt>m) cout<<s[a[m+1]];
}
signed main()
{
solve();
}
7-7 静静的推荐
这一题我们以点来从大到小排序,如果第一个数不相等就按第一个数从大到小排,如果第一个数相等的比较第二个数,这是一个好的排序方法,值得学习,韦大不愧是个人才,然后我们先选175分以上pta分数够的人,然后那些不看pta分数的人不能超过批次数k
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>pii;
bool cmp(pii a,pii b)
{
if(a.first!=b.first) return a.first>b.first;
else return a.second>b.second;
}
void solve()
{
int n,k,s;
cin>>n>>k>>s;
vector<pii>ve(n+1);
vector<int>cnt(300);//用来标记不看pta的人收了几个
for(int i=1;i<=n;i++) cin>>ve[i].first>>ve[i].second;
sort(ve.begin()+1,ve.end(),cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
if(ve[i].first<175) break;
if(ve[i].second>=s) ans++;
else if(cnt[ve[i].first]+1<=k)
{
ans++;
cnt[ve[i].first]++;
}
}
cout<<ans;
}
int main()
{
solve();
}
7-8 机工士姆斯塔迪奥
这题我还傻傻的bfs了,其实不用bfs直接用总数减去被标记过的数就可以了,但是注意行和列交叉的点会重复的减,所以需要加上行数*列数,开两个set防止重复减掉了一些,一个放行一个放列
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
#define int long long
void solve()
{
set<int>se1,se2;
int n,m,q;
cin>>n>>m>>q;
while(q--)
{
int a,b;
cin>>a>>b;
if(a==0) se1.insert(b);
else se2.insert(b);
}
int xx=se1.size(),yy=se2.size();
int ans=n*m+(xx*yy)-xx*m-yy*n;//记得行数应该是×m 列数×n
cout<<ans;
}
signed main()
{
solve();
}
7-9彩虹瓶
还是一道stl的模拟题,我们每次要放一个货物的时候,就检查一下货架上有没有符合的,下列的代码有详细的注解
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
void solve()
{
int n,m,k;
cin>>n>>m>>k;
while(k--)
{
stack<int>q;
int need=1;//用来检查以下的货物是否符合要求
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x==need)
{
need++;
continue;
}
else if(q.size()&&q.top()==need)//就是我们输入的货物号不满足need时,去栈里找是否有符合的
{
while(q.size()&&q.top()==need)
{
need++;
q.pop();
}
q.emplace(x);
}
else if(q.size()<m)//如果说你输入的这个货物号不满足need且你刚刚放入栈中的也不满足
//就把这个货物放入栈中
{
q.emplace(x);
}
}
//输入完了以后开始在栈里找
while(q.size()&&q.top()==need) {
need++;
q.pop();
}
if(need-1==n) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
signed main()
{
solve();
}
7-10 简单计算器
记得栈是先入后出别看到样例直接从左往右算了,且记住0不作分母只在‘/’下成立
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pii;
stack<int>q;
stack<char>p;
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
q.push(a);
}
int temp;
for(int i=1;i<=n-1;i++){
char c;
cin>>c;
p.push(c);
}
while(!p.empty())
{
int t=q.top();
q.pop();
int k=q.top();
q.pop();
int c=p.top();
p.pop();
if(c=='+')
{
temp=t+k;
q.push(temp);
}
if(c=='-')
{
temp=k-t;
q.push(temp);
}
if(c=='*')
{
temp=k*t;
q.push(temp);
}
if(c=='/')
{
//注意0作为分母这种情况,只在除号下有效
if(t==0){
cout<<"ERROR: "<<k<<"/0";//注意‘:’后面有个空格
return ;
}
temp=k/t;
q.push(temp);
}
}
cout<<temp;
}
signed main()
{
solve();
}