首页 > 其他分享 >2024天梯赛--理解错题意+脑子宕机

2024天梯赛--理解错题意+脑子宕机

时间:2024-04-24 18:12:45浏览次数:35  
标签:宕机 -- cin long while 错题 int solve

知识点模块

1.遍历九宫格中的每个3x3的方块可以按这么遍历

点击查看代码
//i j是行数和列数 就是每个3x3矩阵的起点 
      for(int i=1;i<=7;i+=3)
      {
      	for(int j=1;j<=7;j+=3){
      		
      		for(int x=i;x<i+3;x++)
      		{
      			for(int y=j;y<j+3;y++)
      			{
      				//里面放你所要进行的操作 
      				
      				
				  }
			  }
      		
      		
		  }
	  }

2.如果要实现相同字母缩写的语句的存放,比如dsb后面要存 da sha ba 和 da she bi可以使用map<string,multiset >mp来存放,一方面一个标记可以跟多个语句,一方面multiset可以自动对语句进行字典序的排序
map<string,multiset<string> >mp;
//使用multiset可以让放的字符串按字母序排
//map里面这样放可以实现首字母相同的句子的存放
3.我们要找到两个数组中有多少个相同的数字(统计匹配一次),只需要两层循环,匹配就break出来

点击查看代码
for(int i=0;i<ve[a].size();i++)
        {
        	for(int j=0;j<ve[b].size();j++)
        	{
        		if(ve[a][i]==ve[b][j]){
        			//这里记得要break出来,才能保证一个数只和它相等的匹配一次 
        			ans++;
        			break;
				}
			}
		}

题解模块

7-6 别再来这么多猫娘了!
这题还有两个点没过,先补上再说,思路就是遇到一个脏词后把词左端点标为<,右端点标为>,但是可能有一个词只有一个字母我把它标记为#,然后输出的时候开个flag=1,当遍历到<时把flag标为0,遇到>后再把flag标为1,flag为1原封输出

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve()
{
    int n;
    cin>>n;
    vector<string>ve(n+1);
    for(int i=1;i<=n;i++) cin>>ve[i];
    int k;
    cin>>k;
    cin.ignore();
    string s;
    getline(cin,s);
    //输入部分到此
    //从ve中的第一个词开始找计数看是否脏词超过k

    int sum=0;
    for(int i=1;i<=n;i++)
    {
        int cnt=0,pos=0;
        while((pos=s.find(ve[i],pos))!=-1)
        {
        	if(ve[i].size()==1) s[pos]='#';
            else{
			s[pos]='<';
            s[pos+ve[i].size()-1]='>';
			pos+=ve[i].size();
        	}
            cnt++;
        }
        //cout<<cnt<<endl;
        sum+=cnt;
    }
	
	//cout<<sum<<endl; 
    if(sum>=k){
        cout<<sum<<endl;
        cout<<"He Xie Ni Quan Jia!";
        return ;
    }

    bool flag=1;//用来处理尖括号内的
    //当flag为0时遍历到的就不操作就行了
    for(int i=0;i<s.size();i++)
    {
    	if(s[i]=='#') cout<<"<censored>";
		if(flag&&s[i]!='#') cout<<s[i];
    	if(s[i]=='<'){
    		flag=0;
    		cout<<"censored>";
		}
		if(s[i]=='>') flag=1;
	}
    cout<<endl;

    

    
}

signed main(){
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
	
}

这一题我就看错题目了,以为是要有匹配的个位数才行,真是一坨
7-7 整数的持续性

可以开一个二维的队列来存放对应次数下的数,因为我们从小到大枚举,这样输出的时候可以保证从小到大输出,然后就是验证一下每个数的次数,记录一下最大次数,然后把最大次数的队列输出就可以了

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve()
{
    int a,b,maxx=0;
    queue<int>q[1000];//存对应次数的数 
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        int x=i,cnt=0;
        while(x>9)
        {
        	//temp用来获取每一位数,tt用来得到乘完的下一个数 
        	//cnt记录几次 
            int temp=x,tt=1;
            while(temp!=0)
            {
                tt*=temp%10;
                temp/=10;
            }
            x=tt;
            cnt++;
        }
        maxx=max(maxx,cnt);
     	q[cnt].push(i);
    }
     
    
    cout<<maxx<<endl;
    cout<<q[maxx].front();
    q[maxx].pop();
    while(!q[maxx].empty()) {
    	cout<<" "<<q[maxx].front();
    	q[maxx].pop();
	}
    
}

signed main(){
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}

7-8 九宫格
这题其实就是遍历行和列和宫位就行,但是遍历宫位会比较麻烦一点,参考上述的知识点就行,我也是赛后才发觉可以这样,还是练的不够

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve()
{
    int a[10][10];

    for(int i=1;i<=9;i++)
    for(int j=1;j<=9;j++) cin>>a[i][j];
    
    //检查宫位 
    for(int i=1;i<=7;i+=3)
    {
    	for(int j=1;j<=7;j+=3)
    	{
    		map<int,int>mp;
    		for(int x=i;x<i+3;x++)
    		{
    			for(int y=j;y<j+3;y++)
    			{
    				mp[a[x][y]]++;
    				if(mp[a[x][y]]>1||a[x][y]>9){
    					cout<<0<<endl;
    					return ;
					}
				}
			}
			for(int xx=1;xx<=9;xx++){
			if(mp[xx]!=1) {
				cout<<0<<endl;
				return;
			}
			
		}
	}
    
    //检查行
	for(int i=1;i<=9;i++)
	{
		map<int,int>mp;
		for(int j=1;j<=9;j++)
		{
			mp[a[i][j]]++;
			if(a[i][j]>9||mp[a[i][j]]>1){
				cout<<0<<endl;
				return ;
			}
		}
		for(int xx=1;xx<=9;xx++){
			if(mp[xx]!=1) {
				cout<<0<<endl;
				return;
			}
		}
	 } 
	 
	 //检查列 
	for(int i=1;i<=9;i++)
	{
		map<int,int>mp;
		for(int j=1;j<=9;j++)
		{
			mp[a[j][i]]++;
			if(a[j][i]>9||mp[a[j][i]]>1){
				cout<<0<<endl;
				return ;
			}
		}
		for(int xx=1;xx<=9;xx++){
			if(mp[xx]!=1) {
				cout<<0<<endl;
				return;
			}
		}
	 } 

}
cout<<1<<endl;
}
signed main(){
	int t=1;
	cin>>t;
	while(t--) solve();
	return 0;
	
}

7-9 鱼与熊掌
这道题用食物去匹配人才是正解,因为我们每次验证的时候只取两个食品,然后看同时拥有的有多少个人,这样的话我们开二维数组行标代表食物的种类,然后每行存对应的人,这样验证就很快了

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve()
{
    int n,m;
    cin>>n>>m;
    vector<int>ve[100005];
    //要用动态的不然过不去 其实不用也行 
    for(int i=1;i<=n;i++)
    {
        int k;
        cin>>k;
        while(k--)
        {
            int x;
            cin>>x;
            //用食物来匹配人就好遍历了
			//因为每次食物只有两个 
            ve[x].push_back(i);
        }
    }  

    int s;
    cin>>s;
    while(s--)
    {
        int a,b,ans=0;
        cin>>a>>b;
        for(int i=0;i<ve[a].size();i++)
        {
        	for(int j=0;j<ve[b].size();j++)
        	{
        		if(ve[a][i]==ve[b][j]){
        			//这里记得要break出来,才能保证一个数只和它相等的匹配一次 
        			ans++;
        			break;
				}
			}
		}
        cout<<ans<<endl;
        
    }


    
}

signed main(){
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}

7-10 懂蛇语

使用上述知识点2,然后我们记录每个字母首位组成的字符串作为标记,一个字母前面是空格就一定是首字母,注意开头可能是空格,然后就是字典序的输出,也可以用sort来进行排序

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
map<string,multiset<string> >mp;
//使用multiset可以让放的字符串按字母序排
//map里面这样放可以实现首字母相同的句子的存放
string trans(string &s)//获取首字母组成的字符串
{
    string ans;
    //开头可能是空格
    if(s[0]!=' ') ans+=s[0];
    for(int i=0;i<s.size();i++)
    {
        //一个字母前面是空格那就是词字母
        if(s[i-1]==' '&&s[i]>='a'&&s[i]<='z')
        {
            ans+=s[i];
        }
    }
    return ans;
    
}

void solve()
{
       int n;
       cin>>n;
        cin.ignore();
        for(int i=1;i<=n;i++)
        {
            string str;
            getline(cin,str);
            string head=trans(str);
            mp[head].insert(str);
        }

        int k;
        cin>>k;
        cin.ignore();
       while(k--)
       {
           string str;
           getline(cin,str);
           string head=trans(str);

           if(mp[head].size()==0){
               cout<<str<<endl;
               continue;
           }
		
			//添上| 
           int idx=0;
           for(auto it:mp[head]){
                if(idx++!=0) cout<<"|";
                cout<<it;
           }
           cout<<endl;
       }
    
}

signed main(){
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}

7-11 满树的遍历
待我学习一下树的知识点再来补

标签:宕机,--,cin,long,while,错题,int,solve
From: https://www.cnblogs.com/swjswjswj/p/18151896

相关文章

  • 72.Oradebug用法
    oracle之oradebug命令用法oradebug的前身是在ORACLE7时的ORADBX,它可以启动用停止跟踪任何会话,dumpSGA和其它内存结构,唤醒ORACLE进程,如SMON、PMON进程,也可以通过进程号使进程挂起和恢复等,还有很多功能,实际上这些功能都不常用,但是我们在看别人做问题诊断时,常看到别人在......
  • Airflow
    ApacheAirflowhttps://airflow.apache.org/ Airflow™isaplatformcreatedbythecommunitytoprogrammaticallyauthor,scheduleandmonitorworkflows. fromdatetimeimportdatetimefromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.......
  • a-textarea(textarea)出现模糊问题的可能解决方案
    a-textarea(textarea)出现模糊问题的可能解决方案项目介绍:本项目是一个vue3+ant-design-vue4.x开发,是一个客服机器人的组件。其它项目通过iframe+js文件来引入(iframe的内容就是表单,入口按钮是通过js文件进行dom操作创建)。通过js监听页面宽度,然后通过transform来适配不同分辨率......
  • 性能监控之磁盘IO监控
    1.iotop简介iotop是一个类似top的工具,用来显示实时的磁盘活动。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况。iotop监控Linux内核输出的I/O使用信息,并且显示一个系统中进程或线程的当前I/O使用情况。它显示每个进程/线程读写I/O带宽。它......
  • JaveScript 入门
    HelloWorld基础知识变量类型booleanLetconstvar数组零开始索引.pop();.push();.length函数constFun=tempC=>{consttempF=tempC*1.8+32;returntempF;}调试console输出console.log();Alertalert("Hi");......
  • 美国永久免费虚拟主机
    美国永久免费虚拟主机虚拟主机是一项基础的网络服务,使用户可以通过互联网来承载其网站或在线应用。它们为个人和中小型企业提供了一个经济实惠和易于使用的解决方案,无需担心硬件基础设施的复杂性和高昂的成本。在虚拟主机市场中,美国是主要提供商之一,以下是美国常用的永久免费虚拟......
  • 如何自己写一个开机自启动服务?
    systemd服务介绍systemd是Linux下一个与SysV和LSB初始化脚本兼容的系统和服务管理器。systemd使用socket和D-Bus来开启服务,提供基于守护进程的按需启动策略,保留了Linuxcgroups的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系......
  • RPC请求跟普通Restful请求区别?
    RPC(RemoteProcedureCall,远程过程调用)请求和普通的RESTful请求在设计理念、通信方式、协议等方面有一些区别:设计理念:RPC请求:RPC是一种面向过程的通信模式,其设计目的是让远程调用像本地调用一样简单,它的核心思想是调用远程服务的方法。RESTful请求:RESTful是一种基于资......
  • 面试常问问题-中间件一kafka
    kafka是一个分布式发布订阅消息系统名词:生产者(producer)、消费者(consumer)、topic(一个消息又一个topic)、partition(分区)作用1:传输数据(ey:埋点)kafka发送消息失败的可能:1、网络问题导致kafka的服务器无法连接;2、生产者配置错误;3、消息大小超过服务器配置的限制;4、主......
  • 「洛谷」题解:P1217 回文质数
    题目传送门看着题目好像很简单的样子,实际上做起来才会发现,这么多函数他奶奶的是普及-难度?在这道题目当中,我们最少需要写两个函数,如果需要优化可以再多写一个,待会儿的代码我们就直接放最简单版本的了。有人说这道题可以暴力对拍之后再输出,这完全可以,但是这么简单的题目不至于使用......