2021-3-20 信息总结 (模拟)

14 篇文章 0 订阅
12 篇文章 0 订阅
本文介绍了编程竞赛中的模拟类型问题,包括条件判断的等价性,日期转换的算法,以及字符串处理和数组操作在解决复杂问题中的应用。通过实例讲解了如何根据题目要求编写代码,并总结了常见陷阱和解决策略,如注意循环语句的位置,理解不同数据类型的特性,以及正确处理相遇而非追上的逻辑。此外,还涉及了二维数组的判断技巧和优化算法的选择。
摘要由CSDN通过智能技术生成

今日所学:模拟类型

1.if(flag)与if(flag==true)含义相同

2.G. [usaco2019jan bronze]shell 果壳游戏

#include<bits/stdc++.h>
using namespace std;

int n;

struct nut
{
	int x;
	int y;
	int z;
}a[110000];

int main()
{
	
	freopen("shell.in","r",stdin);
	freopen("shell.out","w",stdout);

    cin>>n;
    
	for(int i=1;i<=n;i++)
	{
	  	cin>>a[i].x>>a[i].y>>a[i].z;
	}	
	
	int maxn=-1;
	
	int flag[10000]={0,0,0,0};
	
	  for(int i=1;i<=n;i++)
	  {
	  	memset(flag,0,sizeof(flag));
	  	int sum=0;
	  	flag[i]=1;
		for(int j=1;j<=n;j++)
		{
		    swap(flag[a[j].x],flag[a[j].y]);
		
	    	if(flag[(a[j].z)]==1)  sum++;	
	    
			if(maxn<sum)  maxn=sum;
		}
	  }
	   
	cout<<maxn;

	return 0;
}

根据老师所讲,运用结构体输入和判断,但明显过于麻烦

所谓模拟,即按照题目意思,做出相应的代码

这里一定要注意bool flag与int flag的区别

bool类型只能返回1或者零

而int则返回整型,可以是-1,-2, 1, 2…

还有注意双重循环时一些语句是放在第一层还是第二层

3.黑色星期五

运用到日期转星期的公式,直接硬钢即可

int getweek(int y,int m,int d)
{
    if(m==1)
    {
        y--;
        m=13;
    }
    if(m==2)
    {
        y--;
        m=14;
    }
    int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
    if(w==0) w=7; 
    return w;
}

3.瑶馨相遇

void init1()
{
	for(int i=1;i<=x;i++)
	 {
	 	cin>>n>>str;
	 	tool+=n;
	 	if(str=='R')
	 	{
	 		for(int j=1;j<=n;j++)
	 		{
	 		   	id1++;
	 		   	timen++;
				a[timen]=id1;	
			}
		}
		if(str=='L')
	 	{
	 		for(int j=1;j<=n;j++)
	 		{
	 		   	id1--;
	 		   	timen++;
				a[timen]=id1;	
			}
		}
	 } 
}

void init2()
{
	 for(int i=1;i<=y;i++)
	 {
	 	cin>>n>>str;
	 	tooln+=n;
	 	if(str=='R')
	 	{
	 		for(int j=1;j<=n;j++)
	 		{
	 		   	id2++;
	 		   	time1++;
				b[time1]=id2;	
			}
		}
		if(str=='L')
	 	{
	 		for(int j=1;j<=n;j++)
	 		{
	 		   	id2--;
	 		   	time1++;
				b[time1]=id2;	
			}
		}
	 }
}

void print()
{
	int maxn=max(tool,tooln);
	
	if(maxn==tool)
	{
		//补全第二个 
		for(int i=tooln+1;i<=maxn;i++)
		{
		   time1++;
	       b[time1]=id2;
		}
	}
	else
	{
		//补全第一个 
		for(int i=tool+1;i<=maxn;i++)
		{
		   timen++;
	       a[timen]=id1;
		}
	}
	
	for(int i=1;i<=maxn;i++)
    {
		if(a[i]==b[i]&&a[i-1]!=b[i-1])
		answer++;
	} 
	
	 cout<<answer;
}

总结坑点:
1,题目中点明为相遇,而不是追上,所以前一刻位置必须不同
2,计算时间
3,分别记录路程

4.字符串展开

主要是设计函数和字符串的灵活运用

例如:append,eraser,insert…

5.馨馨测量

if(a[i][j]==a[i-1][j-1]||
	   a[i][j]==a[i-1][j]||
	   a[i][j]==a[i-1][j+1]||
	   a[i][j]==a[i][j-1]||
	   a[i][j]==a[i][j+1]||
	   a[i][j]==a[i+1][j-1]||
	   a[i][j]==a[i+1][j]||
	   a[i][j]==a[i+1][j-1])
	   {
	   	    if(a[i][j]>=maxn) maxn=a[i][j];
	   }
	 }

根据题目理解设置mycmp函数或者选择结构即可

注意选择结构的逻辑性

5.魔法石头

目前还不会QAQ

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值