admin管理员组

文章数量:1621657

今天做的是模拟10题  马上要给同学讲解了  所以做得比较透。

第一题:

LUOGU1003题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到n 。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

这道题也有些细节  因为这个矩形可以很大  (两三万) 所以直接开数组肯定是会炸的。所以要用到离散化(虽然我也不明白什么事离散化 黄涵大佬和我说的 但和我的思路是一样的)  就是读到那个需要的坐标后  对每个地毯进行判断是否覆盖该点 

 AC代码如下:


#include<bits/stdc++.h>
using namespace std;
int main()
{
 int n,x[10010],y[10010],x1[10010],y1[10010];
 int a,b;
 scanf("%d",&n);
 for(int i=1;i<=n;i++)
  scanf("%d%d%d%d",&x[i],&y[i],&x1[i],&y1[i]);
 scanf("%d%d",&a,&b);
 int s=0;
 for(int i=1;i<=n;i++)
  if((a>=x[i])&&(a<=x[i]+x1[i])&&(b>=y[i])&&(b<=y[i]+y1[i]))
     s=i;
 if(s==0) s--;
 printf("%d",s);
 return 0;
}
暴力题比较简单。

第二题:

LUOGU1089 题目描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

这题就非常简单了  暴力过 AC代码如下:
#include<bits/stdc++.h>
using namespace std;
int main ()
{
  int  money=0,n,i=0,save=0;	
  bool flag=true;
  while((i<12)&&(flag))	
  {	
   i++;
   scanf("%d",&n);
   money+=300;	
   money-=n;	
   if(money>=100) {n=money/100;money-=n*100;save=save+n*100;}	
     else if(money<0) flag=false; 
  }
  if (flag) printf("%d",save*120/100+money);
    else printf("-%d",i);
  return 0;	
}
第三题:

LUOGU1328

题目描述石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第8 集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。

现在,小A 和小B 尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小 A以“石头 - 布- 石头- 剪刀- 蜥蜴人- 斯波克”长度为6 的周期出拳,那么他的出拳序列就是“石头- 布- 石头- 剪刀- 蜥蜴人- 斯波克- 石头- 布- 石头- 剪刀- 蜥蜴人- 斯波克- ……”,而如果小B 以“剪刀- 石头- 布- 斯波克- 蜥蜴人”长度为5 的周期出拳,那么他出拳的序列就是“剪刀- 石头- 布- 斯波克- 蜥蜴人- 剪刀- 石头- 布-斯波克- 蜥蜴人- ……”已知小A 和小B 一共进行N 次猜拳。每一次赢的人得1 分,输的得0 分;平局两人都得0 分。现请你统计N 次猜拳结束之后两人的得分。

也是暴力  代码如下:

#include<bits/stdc++.h>
using namespace std;
int main ()
{
  int p,q,n,a,b,A[300],B[300];
  int awin=0,bwin=0;
  scanf("%d%d%d",&n,&a,&b);
  for(int i=1;i<=a;i++)
    scanf("%d",&A[i]);
  for(int i=1;i<=b;i++)
    scanf("%d",&B[i]);
  p=0;q=0;
   for(int i=1;i<=n;i++)  
   {
     p=p%a+1;	
   	 q=q%b+1;
   	 switch(A[p])
       {
	    case 0:switch(B[q])   //a出剪刀 
	    	{
	    	   case 1:bwin++;break;	
	    	   case 2:awin++;break;	
   	           case 3:awin++;break;
   	           case 4:bwin++;break;
   	        };break;
   	    case 1:switch(B[q])   //a出石头 
   	        {
   	           case 0:awin++;break;	
	    	   case 2:bwin++;break;	
   	           case 3:awin++;break;
   	           case 4:bwin++;break;
   	        };break;
        case 2:switch(B[q])   //a出布 
	    	{
	    	   case 0:bwin++;break;	
	    	   case 1:awin++;break;	
   	           case 3:bwin++;break;
   	           case 4:awin++;break;
   	        };break;
	    case 3:switch(B[q])  //a出蜥蜴人 
	    	{
	    	   case 0:bwin++;break;	
	    	   case 1:bwin++;break;	
   	           case 2:awin++;break;
   	           case 4:awin++;break;
			};break;
	    case 4:switch(B[q])  //a出斯波克 
	    	{
	    	   case 0:awin++;break;	
	    	   case 1:awin++;break;	
   	           case 2:bwin++;break;
   	           case 3:bwin++;break; 
			};break;
	   
	   }
   }
 printf("%d %d",awin,bwin);
 return 0;	
}
溜了


本文标签: