zoukankan      html  css  js  c++  java
  • [NOIP2011TG] Day 1 Solution

    T1:由n至1判断是否cover到即可。

    Code:

     1 #include<cstdio> 
     2 #define MN 10005 
     3 using namespace std; 
     4 int n,x,y,a[MN],b[MN],g[MN],k[MN]; 
     5 int main() 
     6 { 
     7     scanf("%d",&n); 
     8     for (int i=1;i<=n;i++) 
     9     scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]); 
    10     scanf("%d%d",&x,&y); 
    11     for (int i=n;i>=1;i--){ 
    12         if (x>=a[i]&&x<=a[i]+g[i]&&y>=b[i]&&y<=b[i]+k[i]) 
    13         {printf("%d",i);return 0;} 
    14     } printf("-1");return 0; 
    15 }

    T2:

    t[c]表示颜色为c的酒店有几间,cnt[c]表示当前可去的颜色为c的酒店有几间。

    读入每间酒店的色调和咖啡店的最低消费同时,若l<=p,则以前相同色调的酒店都可以住,更新cnt,答案加上cnt[c].

    Code:

     1 #include<iostream>  
     2 #include<cmath>  
     3 #include<cstdio>  
     4 #include<cstdlib>  
     5 #include<cstring>  
     6 #include<queue>  
     7 #include<algorithm> 
     8 using namespace std; 
     9 int n,k,p,c,l,ans; 
    10 int cnt[52],t[52]; 
    11 int main() 
    12 { 
    13     scanf("%d%d%d",&n,&k,&p); 
    14     for (int i=1;i<=n;i++){ 
    15         scanf("%d%d",&c,&l); 
    16         if (l<=p)memcpy(cnt,t,sizeof(t)); 
    17         ans+=cnt[c]; 
    18         if (l<=p) cnt[c]++;t[c]++; 
    19     } 
    20     printf("%d",ans);return 0; 
    21 }

    T3:

    dfs枚举交换的位置,并模拟消除与掉落的过程(可能有多次),将空白当作颜色0处理。

    剪枝1:若某颜色方块少于三个,return;

    剪枝2:不必分1或-1的情况分别讨论,因为若两个不为0的色块位置互换,可看成是左面色块右移1得到的(1的优先级大于-1)。若左边色块为0,则为-1,右边的色块为0,则为1.

    Code:

     1 #include<cstdio> 
     2 #include<cstring> 
     3 #include<algorithm> 
     4 using namespace std; 
     5 int x[6],y[6],dir[6],ct[11]; 
     6 int map[6][8],mcol,n,t,cnt=0; 
     7 bool check() 
     8 { 
     9     for (int i=1;i<=5;i++) 
    10     for (int j=1;j<=7;j++) if (map[i][j]) return 0; 
    11     return 1; 
    12 } 
    13 void print() 
    14 { 
    15     for (int i=1;i<=n;i++) printf("%d %d %d
    ",x[i]-1,y[i]-1,dir[i]);exit(0); 
    16 } 
    17 void down() 
    18 { 
    19     for (int i=1;i<=5;i++){ 
    20         int pos=0; 
    21         for (int j=1;j<=7;j++) 
    22         if (map[i][j]){ 
    23             int temp=map[i][j]; 
    24             map[i][j]=0;map[i][++pos]=temp;  
    25         } 
    26     } 
    27 } 
    28 bool cancel() 
    29 { 
    30     bool used[6][8]={0},changed=0; 
    31     for (int i=1;i<=5;i++) 
    32     for (int j=1;j<=7;j++){ 
    33         if (!map[i][j]) continue; 
    34         if (i<=3&&map[i][j]==map[i+1][j]&&map[i][j]==map[i+2][j]) 
    35         {used[i][j]=used[i+1][j]=used[i+2][j]=1;changed=1;} 
    36         if (j<=5&&map[i][j]==map[i][j+1]&&map[i][j]==map[i][j+2]) 
    37         {used[i][j]=used[i][j+1]=used[i][j+2]=1;changed=1;} 
    38     } 
    39     for (int i=1;i<=5;i++) 
    40     for (int j=1;j<=7;j++) if (used[i][j]) map[i][j]=0;   
    41     return changed; 
    42 } 
    43 void dfs(int step) 
    44 { 
    45     int tmap[6][8]; 
    46     if (step>n) {if (check()) print();else return;} 
    47     for (int i=1;i<=5;i++) 
    48     for (int j=1;j<=7;j++) ct[map[i][j]]++; 
    49     for (int i=1;i<=mcol;i++) if(ct[i]==1||ct[i]==2) return; 
    50     memcpy(tmap,map,sizeof(map)); 
    51     for (int i=1;i<5;i++) 
    52     for (int j=1;j<=7;j++) 
    53     { 
    54         if (map[i][j]!=map[i+1][j]){ 
    55             if (!map[i][j]) { 
    56                 x[step]=i+1;y[step]=j;dir[step]=-1; 
    57             }else{ 
    58                 x[step]=i;y[step]=j;dir[step]=1; 
    59             } 
    60             swap(map[i][j],map[i+1][j]); 
    61             down();while(cancel())down();dfs(step+1); 
    62             memcpy(map,tmap,sizeof(map)); 
    63         } 
    64     } 
    65 } 
    66 int main() 
    67 { 
    68     scanf("%d",&n);memset(map,0,sizeof(map)); 
    69     for (int i=1;i<=5;i++) 
    70     { 
    71         int tmp=0;scanf("%d",&t);mcol=t; 
    72         while(t){map[i][++tmp]=t;scanf("%d",&t);mcol=max(t,mcol);} 
    73     } 
    74     dfs(1);printf("-1"); 
    75     return 0; 
    76 } 
     
  • 相关阅读:
    Asp.net mvc 使用Ajax调用Action 返回数据。
    浅析Asp.net MVC 中Ajax的使用
    Asp.net MVC2中使用Ajax的三种方式
    Ajaxa请求:参数、传递的数据、返回的数据
    ASP.NET MVC 模块与组件——发送邮件
    MVC中根据后台绝对路径读取图片并显示在IMG中
    MVC、一般处理程序hanlder 输出图片文件
    邮箱验证功能原理 语法 属性
    C# 注册邮箱验证的实现代码
    注册页实现激活邮箱验证(asp.net c#) 详细实现
  • 原文地址:https://www.cnblogs.com/codingutopia/p/noip2011day1.html
Copyright © 2011-2022 走看看