1013B 输出第N到M的所有素数……
这个和前面一道题基本一致,比较恶心的是,N和M最大到10000,我并不知道第10000个素数是哪个,就给了很大的一个数,保证不超时就好……
等等,我为什么不计数??哈哈哈哈就这样吧,代码如下:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int is_prime( int a)
{ int j;
for(j=2;j*j<=a;j++)
{
if(a%j==0)
return 0;
}
return 1;
}
int main()
{
vector<int>prime;
int i,m,flag;
prime.push_back(1);
prime.push_back(2);
prime.push_back(3);
for(i=5;i<214740;i+=2)
{ flag=1;
if ( i % 3 == 0)
continue;
else flag=is_prime(i);
if(flag)
prime.push_back(i);
}
int l,r;
cin>>l>>r;
int count=0;
for(m=l;m<r;m++)
{
cout<<prime[m];
count++;
if(count==10)
{
cout<<endl;
count=0;
}
else cout<<" ";
}
cout<<prime[r];
return 0;
}
1003A emergency!
啊,看题干看了十分钟,很好理解,就是信息量有点大,滤清关系就好!然后思路大概是有的,清楚地意识到要用回溯算法,很好,这是我的薄弱点,试着写了写,然鹅,还是写到最后不写了,有点乱哈哈哈哈哈。
先贴个半成品代码,方便后期修改哈哈哈哈哈哈6
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int citynum,roadnum,home,sos;
cin>>citynum>>roadnum>>home>>sos;
int resnum[500][500]={0};
int i=0,res;
while(i<citynum)
{
cin>>res;
resnum[i][i]=res;
i++;
}
int go,to,l;
int road[500][500]={0};
i=0;
while(i<roadnum)
{
cin>>go>>to>>l;
road[go][to]=l;
//road[to][go]=l;
i++;
}
int j,k,m,n;
int short=500;int team=1;
int count=0;
if(road[now][sos]!=0)
{
short=road[now][sos];
team=resnum[now][now]+resnum[sos][sos];
}
is_road(now);
return 0;
}
int is_road(int a)
{ for(i=0;i<citynum;i++)
{ if(road[a][i])
{
if(road[now][i]&&(road[now][a]<road[now][i]+road[a][i]))
break;
else
{
road[now][i]=road[now][a]+road[a][i];
resnum[now][i]>=resnum[now][a]+resnum[a][i]?resnum[now][i]:resnum[now][a]+resnum[a][i];
if(i!=sos)
is_road(i);
}
}
}
is_road(i);
}
这是一道路径规划题,很多答案涉及到了DFS算法,然后就开始补了一下它的基础知识,这篇文章写的挺好的,我就直接贴链接吧,我总结也总结不好,估计用个两三次才会记住……
Depth First Search英文的缩写,翻译过来就是“深度优先搜索”。(好像在数据结构里面见过……)
https://blog.csdn.net/chensanwa/article/details/79717835
博主总结的好,就是“不撞南墙不回头”的算法,走走走,走不动了往回走(这不就是回溯么……)
DJ阿龙,drug a beat!
然后网上找了很多答案,仿佛看见了曾经的自己,乱命名,以至于变量太多,它写的是个啥???而且发现很多人用了INF,又顺手百度了一下这是个啥。
INF:infinity 无限大,自己定义大小,即在它的生存期内,它最大,可以认为除数为0是=时,商为INF。
NAN:not a number 就可以定义为负数开根号的结果,或者0/0 的答案。
这个博主写的还是比较详细易懂的,我们来看一下!
https://blog.csdn.net/qq_43064271/article/details/82662675
思路大体跟我一致,简单看了下,打算后期看这个修改一下自己的。
随后我打开了《算法笔记》,里面有这道题的官方答案,我能说啥呢,可能是比较高深,所以需要很认真看才能看懂……我觉得还不如民间大神写得好呢。
然后里面有一点知识点,总结一下:
fill(first,last,val)函数,就是指定迭代器的首末端,进行初始化,初始化的值为val;
memset(void *s,int c,n)函数,也是初始化函数,将指针变量s所指向的前n个字节的内存单元用一个整数c替换。
具体的,可能在以后的博客里更新哈哈哈哈哈……
吃饭去!