zoukankan      html  css  js  c++  java
  • 2019/2/13测试(noip2016提高组day1原题)

    除了第一个题较水,后两个题还是有点难度

    题目 A: 玩具迷题

    一个模拟题,没什么好说的
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn =1e5+10;
     5 
     6 int n,m;
     7 
     8 char mz[maxn][12];
     9 int zx[maxn];
    10 int main(){
    11     scanf("%d%d",&n,&m);
    12     for(int i=1;i<=n;i++){
    13         scanf("%d",zx+i);
    14         scanf("%s",mz[i]);
    15     }
    16     int pos=1;
    17     for(int i=1;i<=m;i++){
    18         int a,b;
    19         scanf("%d%d",&a,&b);
    20         if(a==0) {
    21             if(zx[pos]==0){
    22                 pos-=b;if(pos<1) {
    23                     pos%=n;pos+=n;
    24                 }
    25             }
    26             else {
    27                 pos+=b;if(pos>n) pos%=n;
    28             }
    29         }
    30         else {
    31             if(zx[pos]==0){
    32                 pos+=b;if(pos>n) pos%=n;
    33             }
    34             else {
    35                 pos-=b;if(pos<1) pos%=n,pos+=n;
    36             }
    37         }
    38     }
    39     printf("%s",mz[pos]);
    40     return 0;
    41 }

    题目 B: 天天爱跑步

    这道题还是没写出来,只会用暴力骗分。。。

    题目 C: 换教室

    一个期望dp,当时没怎么做过期望dp的题,所以这题也只能骗分了
    考完后讲了思路,调了一下午才调出来,很多细节的问题
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 2010;
     4 inline int read(){
     5     int x=0,f=1;char ch=getchar();
     6     while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
     7     while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
     8     return x*f;
     9 }
    10 
    11 int n,m,v,e,c[maxn],d[maxn],dis[310][310];
    12 
    13 double k[maxn],dp[maxn][maxn][2];
    14 
    15 int main(){
    16     freopen("in.txt","r",stdin);
    17     n=read(),m=read(),v=read(),e=read();
    18     for(int i=1;i<=n;i++) c[i]=read();
    19     for(int i=1;i<=n;i++) d[i]=read();
    20     for(int i=1;i<=n;i++) scanf("%lf",k+i);
    21     memset(dis,0x3f,sizeof(dis));
    22     for(int i=1;i<=v;i++) dis[i][i]=0;
    23     for(int i=1;i<=e;i++){
    24         int x=read(),y=read();
    25         dis[x][y]=dis[y][x]=min(dis[x][y],read());
    26     } 
    27     for(int kk=1;kk<=v;kk++)
    28         for(int i=1;i<=v;i++)
    29             for(int j=1;j<=v;j++) 
    30                 dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);
    31     for(int i=1;i<=n;i++) 
    32         for(int j=0;j<=m;j++) dp[i][j][0]=dp[i][j][1]=999999999;
    33     dp[1][0][0]=dp[1][1][1]=0;
    34     for(int i=2;i<=n;i++){
    35         for(int j=0;j<=min(i,m);j++){
    36             dp[i][j][0]=min(dp[i-1][j][0]+dis[c[i-1]][c[i]],dp[i-1][j][1]+dis[d[i-1]][c[i]]*k[i-1]+dis[c[i-1]][c[i]]*(1-k[i-1]));
    37             if(j!=0)
    38             dp[i][j][1]=min(dp[i-1][j-1][0]+dis[c[i-1]][d[i]]*k[i]+dis[c[i-1]][c[i]]*(1-k[i]),
    39             dp[i-1][j-1][1]+dis[d[i-1]][d[i]]*k[i-1]*k[i]+dis[d[i-1]][c[i]]*k[i-1]*(1-k[i])+dis[c[i-1]][d[i]]*k[i]*(1-k[i-1])+dis[c[i-1]][c[i]]*(1-k[i])*(1-k[i-1]));              
    40         }
    41     }
    42     double ans=999999999;
    43     for(int i=0;i<=m;i++) ans=min(dp[n][i][0],min(dp[n][i][1],ans));
    44     printf("%.2f",ans);
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    学习:Intents和Intent Filters(理论部分)
    天书夜读:从汇编语言到Windows内核编程笔记(1)
    学习:Intents和Intent Filters(实例部分)
    寒江独钓(1):内核数据类型和函数
    寒江独钓(2):串口的过滤
    学习:了解WDK目录
    Nginx 414 RequestURI Too Large 海口
    Ansible 批量修改密码 海口
    记一次node进程无法kill 问题 海口
    Vue学习心得新手如何学习Vue(转载)
  • 原文地址:https://www.cnblogs.com/plysc/p/10371700.html
Copyright © 2011-2022 走看看