NOIP 2001 提高组 题解

No 1. 一元三次方程求解

https://vijos.org/p/1116

看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~

数据小 暴力枚举即可

 double a,b,c,d;
 double x;

 int main()
 {
     ios_base::sync_with_stdio();

     cin>>a>>b>>c>>d;

     ;i<=;i+=)
     {
         x=i/;

         if(abs(a*x*x*x+b*x*x+c*x+d)<0.01)
         {
             printf("%.2f ",x);
         }
     }

     ;
 }

No 2. 数的划分

https://vijos.org/p/1117

dp/dfs

dp

用f(i,j)表示i这个数分成k份有多少种分法

毫无疑问

f[i][j]=f[i-][j-]+f[i-j][j];

因为 f(i,j) 可以从 f(i-1,j-1)推出

又要保持不下降的分划

所以可以从f(i-j,j)推出
 int n,k;
 ][];

 void init()
 {
     cin>>n>>k;

     ;i<=n;i++)
     {
         ;j<=i;j++)
         {
             f[i][j]=inf;
         }
     }

     ;i<=n;i++)
     {
         f[i][]=;
     }
 }

 int main()
 {
     init();

     ;i<=n;i++)
     {
         ;j<=i;j++)
         {
             f[i][j]=f[i-][j-]+f[i-j][j];
         }
     }

     cout<<f[n][k]<<endl;

     ;
 }

dfs

暴力枚举

只要不下降+剪枝就可以了

 int n,k;
 int ans;

 void dfs(int nw,int sum,int num)
 {
     if(num==k)
     {
         if(sum==n)
         {
             ans++;
         }
         else
         {
             return;
         }
     }

     if(sum==n)
     {
         return;
     }

     for(int i=nw;i<=n-sum;i++)
     {
         dfs(i,sum+i,num+);
     }

     return;
 }

 int main()
 {
     ios_base::sync_with_stdio();

     cin>>n>>k;

     ;i<=n/;i++)
     {
         dfs(i,i,);
     }

     cout<<ans<<endl;

     ;
 }

No 3. 统计单词个数

https://vijos.org/p/1118

dp

这几年dp考的好多啊

这题题解我真的不会写 我的写法我自己都看不懂

复制一段

划分这个DP,很基础。

然后,是sum[i][j],第i个字母到第j个字母一共可以形成多少个单词,ccy也用的Dp。

sum[i][j]=sum[i][-1]+(包含可以添加最后一个字母j的单词的总个数)。

ccy,WA在……比如现在可以添加一个新单词,k到j,但是,若果以k为起点,在sum[i][j-1]中已经有过单词,该新单词就不添加。于是乎,ccy光荣地WA掉一个点,因为,

那个点有两个相同的单词,我就扩展了两次。

 string s;
 int slen;
 string words[maxm];
 int wordslen[maxm];
 int f[maxn][maxm];
 int sum[maxn][maxn];
 int n,k,m;

 void init()
 {
     string tmp;
     cin>>n>>k;
     ;i<=n;i++)
     {
         cin>>tmp;
         s+=tmp;
     }
     slen=s.size();
     cin>>m;
     ;i<=m;i++)
     {
         cin>>words[i];
         wordslen[i]=words[i].size();
     }
 }

 int add(int l,int r)
 {
     ;
     >=) ans=sum[l][r-];
     };
     ;i<=m;i++)
     {
         ;
         if (qd<l) continue;
         if (qd==s.find(words[i],qd))
         {
             if (vis[qd]) continue;
             vis[qd]=;
             ans++;
             ;j<=m;j++)
             {
                 int dq=r-wordslen[j];
                 if (dq==qd)
                     if (dq==s.find(words[j],dq))
                     {
                         ans--;
                         break;
                     }
             }
         }
     }
     return ans;
 }

 void gsum()
 {
     ;i<=slen-;i++)
         ;j++)
         {
             sum[i][j]=add(i,j);
         }
 }

 void work()
 {
     ;i<=slen-;i++)
         f[i][]=sum[][i];
     ;i<=slen-;i++)
         ;j<=min(k-,i+);j++)
             ;u<=i-;u++)
                 f[i][j]=max(f[i][j],f[u][j-]+sum[u+][i]);
     ;
     )
         ans=sum[][slen-];
     else
         ;i<=slen-;i++)
             ans=max(ans,f[i][k-]+sum[i+][slen-]);
     printf("%d\n",ans);
 }

 int main()
 {
     int qn;
     qn=;
     while(qn--)
     {
         init();
         gsum();
         work();
     }

     ;
 }

No 4. Car的旅行路线

https://vijos.org/p/1119

简单的Dijkstra就可以过了

直接贴代码

 struct sb
 {
     int x,y,c;
 } pos[];
 ];
 ];
 ],y[],costt[];
 double dis(int x,int y)
 {
     double k;
     k=sqrt(pow(pos[x].x-pos[y].x,)+pow(pos[x].y-pos[y].y,));
     if(pos[x].c==pos[y].c)
         k*=costt[pos[x].c];
     else
         k*=costf;
     return k;
 }
 double dij(int st)
 {
     double min,k;
     int i,j,p;
     memset(b,,sizeof(b));
     memset(d,,sizeof(d));
     d[st]=;
     ; i<=tot; i++)
     {
         min=1e38;
         ; j<=tot; j++)
             if(!b[j]&&d[j]<min)
             {
                 min=d[j];
                 p=j;
             }
         b[p]=;
         ; j<=tot; j++)
             if(!b[j])
                 d[j]=d[j]>d[p]+dis(p,j)?d[p]+dis(p,j):d[j];
     }
     k=1e38;
     ; i<=tot; i++)
     {
         if(pos[i].c==ed)
             ; j<=; j++)
                 k=d[i+j]<k?d[i+j]:k;
         if(pos[i].c==ed)
             break;
     }
     return k;
 }
 main()
 {
     cin>>tc;
     double min=1e38;
     int i,j,k;
     while(tc)
     {
         cin>>n>>costf>>st>>ed;
         ; i<=n; i++)
         {
             cin>>x[]>>y[]>>x[]>>y[]>>x[]>>y[]>>costt[i];
             ; j<=; j++)
                 ; k<=; k++)
                     -k-j]-x[j])+(y[j]-y[k])*(y[-k-j]-y[j])==)
                     {
                         x[]=x[k]+x[-k-j]-x[j];
                         y[]=y[k]+y[-k-j]-y[j];
                     }
             ; j<=; j++)
             {
                 pos[++tot].x=x[j];
                 pos[tot].y=y[j];
                 pos[tot].c=i;
             }
         }
         ; i<=tot; i++)
         {
             if(pos[i].c==st)
                 ; j<=; j++)
                     min=dij(i+j)<min?dij(i+j):min;
             if(pos[i].c==st)
                 break;
         }
         printf("%.1lf",min);
         tc--;
     }

     ;
 }

The End

NOIP 2001 提高组 题解的更多相关文章

  1. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  2. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  3. noip 2016 提高组题解

    前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...

  4. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  5. noip 2014 提高组初赛

    noip 2014 提高组初赛 一. TCP协议属于哪一层协议( ) A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 B TCP(传输控制协议) 若有变量int a; float: x, ...

  6. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  7. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  8. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  9. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

随机推荐

  1. 移动端车牌识别、行驶证识别OCR为共享汽车APP增添技术色彩

    本文主题:移动端车牌识别.行驶证识别OCR为共享汽车APP增添技术色彩 本文关键词:车牌识别,证件识别,移动端车牌识别,行驶证识别,手机车牌识别,驾驶证识别 近两年,随着共享单车以及共享电车的兴起,有 ...

  2. Linux网络编程客户\服务器设计范式

    1.前言 网络编程分为客户端和服务端,服务器通常分为迭代服务器和并发服务器.并发服务器可以根据多进程或多线程进行细分,给每个连接创建一个独立的进程或线程,或者预先分配好多个进程或线程等待连接的请求.今 ...

  3. Notepad++的正则表达式替换和替换

    [1]如果从行首匹配,可以用"^"来实现,[2]如果从行尾匹配,可以用"$"来实现, 在查找内容里面输入"345$" 这里"$&q ...

  4. jQuery(二) jQuery对Ajax的使用

    学习使我快乐!嘿 --WH 一.jQuery使用Ajax 想要了解jQuery如何使用Ajax,并且体会到它所带来的方便性,那么就得了解原始的Ajax是如何编写的,是怎样的繁琐,然后和Jquery的代 ...

  5. SmartSql漫谈

    最近在看smartSql源码,兄弟写的.写的很不错取取经. 记录下一些学习的东西,刚开始我先不系统的写了,随意一点哈,我看的差不多再给大家一个模块一个模块系统的写. public T ExecuteS ...

  6. 从 JavaScript 到 TypeScript

    本文首发在我的个人博客:http://muyunyun.cn/posts/66a54fc2/ 文中的案例代码已经上传到 TypeScript TypeScript 并不是一个完全新的语言, 它是 Ja ...

  7. 使用docker-compose搭建AspNetCore开发环境

    1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上 ...

  8. 【PHP】最详细PHP从入门到精通(五)——PHP错误处理

     PHP从入门到精通 之PHP中的字符串 在创建脚本和 web 应用程序时,错误处理是一个重要的部分.如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门. 本教程介绍了 PH ...

  9. unslider插件的使用

    深入理解unslider.js源码 最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. u ...

  10. Ant部署(linux)

    1.下载 mkdir /opt/ant cd /opt/ant wget http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.4- ...