SMU 2024 spring 天梯赛1

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();
    
}

posted on 2024-03-17 12:41  swj2529411658  阅读(49)  评论(0)    收藏  举报

导航