[NOIP2017赛前复习第二期]复赛考试技巧与模版-普及组
考试技巧
1.拿到考卷首先通看题目,按自己感觉的难度排序(普及一般是1-2-3-4了~还是相信出题人不会坑我们的2333)
2.一般来说,普及组前两道题比较简单(大水题啊233~),但是通常坑很多,例如NOIP2000计算器的改良一题….非常坑,需要注意1.未知数从A-z中的任意一个字母2.字母系数为1时可以省略….因此要多读3遍题,切记仔细读题,一个字都不能放过。before that think twice and double check you code.(多想几遍然后反复检查代码了~)
3.处理完T1,T2就来到有(ju)趣(ken)的T3了~一般来说普及组的T3 还是挺水的通常思考5~20分钟就能思考出来。然而实现的坑也不比T1,T2。通常T3会让我们进行一些模运算和long long运算。别看这些都这么简单,然而这就是出题老师将100分坑成20分的得力工具啊233~先说long long:在一个运算公式里,要得到long long的结果,一般要让加入运算的所有都开long long(一定要注意是全开long long!!),否则100变50-。再说取模运算:并不是所有的运算都可以乱%的,一定要先判断是否对结果有影响再%,另外记住一点——能%的地方一定不要放过。
4.接着就是T4了,这种题一般都不能得满分的,毕竟还是有难度(像我这种蒟蒻就更做不起了233…),建议是按题目的数据范围一步步优化,尽量拿更高的分数
考试模版
考试专供
随机数据生成器
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
int num[1000005];
int main()
{
srand(time(NULL));
freopen("begining.out","w",stdout);
int n=(rand()%10000)+1;
printf("%d\n",n);
for(int i=1;i<=n;i++)
{
num[i]=rand()%10000;
}
sort(num+1,num+n+1);
for(int i=1;i<=n;i++)printf("%d ",num[i]);
}
对拍程序
bat版
先新建一个记事本文档;
在文档中写:
@echo off
:loop
begining.exe > data.out
start.exe < data.out > start.out
std.exe < data.out > std.out
fc start.out std.out
if not errorlevel 1 goto loop
pause
goto loop
c++版(推荐)
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
int testdata=100;
while(1)
{
testdata--;
system("data.exe > data.txt");
system("biaoda.exe < data.txt > biaoda.txt");
system("test.exe < data.txt > test.txt");
if(system("fc test.txt biaoda.txt")) break;
}
if(testdata==0) cout<<"no error"<<endl;
else cout<<"error"<<endl;
system("pause");
return 0;
}
读入优化
int read()
{
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
算法——排序
sort版
#include<iostream>
#include<algorithm>
using namespace std;
long long n,a[100000];
int main()
{
scanf("%lld",&n);
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
for(int i=0;i<n-1;i++) cout<<a[i]<<' ';
cout<<a[n-1];
return 0;
}
快速排序
从小到大
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int a[100005];
int l,n,m,cont,c;
void quicksort(int x,int y)
{
int l=x,r=y,mid;
mid=a[(l+r)/2];
while(l<=r)
{
while(a[l]<mid)l++;
while(a[r]>mid)r--;
if(l<=r){swap(a[l],a[r]);l++;r--;}
}
if(x<r)quicksort(x,r);
if(y>l)quicksort(l,y);
}
int main()
{
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
quicksort(1,n);
for(i=1;i<=n;i++)printf("%d ",a[i]);
}
归并排序
从小到大
#include<iostream>
#include<cstdio>
using namespace std;
int a[100005],s[100005];
long long cont;
void merge(int st,int m,int ov)
{
int l=st,r=m+1,q=0;
while(l<=m&&r<=ov)
{
if(a[l]<=a[r])s[q++]=a[l++];
else {s[q++]=a[r++];cont+=m-l+1;}
}
while(l<=m)s[q++]=a[l++];
while(r<=ov)s[q++]=a[r++];
for(int i=st;i<=ov;i++)a[i]=s[i-st];
}
void mergesort(int st,int ov)
{
if(st<ov)
{
int mid=(st+ov)/2;
mergesort(st,mid);
mergesort(mid+1,ov);
merge(st,mid,ov);
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
mergesort(1,n);
for(int i=1;i<=n;i++)printf("%d ",a[i]);
printf("\n");
//printf("%lld",cont);//本输出用于求逆序对
}
数据结构
优先队列
#include<queue>
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
priority_queue<int> QAQ;
int n,x,a;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==1){scanf("%d",&a);QAQ.push(-a);}
if(x==2)printf("%d\n",-QAQ.top());
if(x==3)QAQ.pop();
}
}
并查集
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,fa[10005],z,x,y;
int find(int p)
{
if(fa[p]!=p)fa[p]=find(fa[p]);
return fa[p];
}
void bin(int x1,int y1)
{
fa[x1]=y1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&z,&x,&y);
int ta=find(x),tb=find(y);
if(z==1)
{
if(ta==tb)continue;
else bin(ta,tb);
}
if(z==2)
{
if(ta==tb)printf("Y\n");
else printf("N\n");
}
}
}
根据两种遍历顺序确定树结构
#include<cstdio>
#include<iostream>
#include<climits>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
string s1,s2;
void xfind(int len1,int re1,int len2,int re2)
{
int m=s2.find(s1[len1]);
if(m>len2)xfind(len1+1,len1+m-len2,len2,m-1);
if(m<re2)xfind(len1+m-len2+1,re1,m+1,re2);
printf("%c",s1[len1]);
}
int main()
{
cin>>s1>>s2;
xfind(0,s1.length()-1,0,s2.length()-1);
return 0;
}
图论
有向图的DFS
#include<iostream>
#include<algorithm>
#include<climits>
#include<vector>
using namespace std;
struct node
{
int v,next;
}a[20010];
int b[205];
int n,m,maxx,s,num;
bool visit[205];
int read()
{
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
void fpush(int from,int to)
{
a[++num].v=to,a[num].next=b[from],b[from]=num;
}
void dfs(int j)
{
visit[j]=1;maxx++;
for(int i=b[j];i;i=a[i].next)
if(visit[a[i].v]==0)dfs(a[i].v);
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;i++)
{
int u,v;
u=read();v=read();
fpush(u,v);
}
s=read();
dfs(s);
printf("%d",maxx);
}
无向图的BFS
#include<iostream>
#include<cstring>
using namespace std;
int n,m,k,head=0,tail=1,a[205],s;
bool b[205],ks[205][205];
int main()
{
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
ks[u][v]=1;
ks[v][u]=1;
}
scanf("%d",&s);
printf("%d",s);
a[1]=s;
b[s]=1;
while(head!=tail)
{
head++;
int kk=a[head];
for(int i=1;i<=n;i++)
{
if(!b[i]&&ks[kk][i]==1)
{
printf(" %d",i);
tail++;
a[tail]=i;
b[i]=1;
}
}
}
return 0;
}
哈密顿环
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>a[205];
bool visit[205],flag=1;
int x,n,ans,start=1;
void dfs(int s,int deep)
{
if(deep==n)ans++;
for(int i=0;i<a[s].size();i++)
if(!visit[a[s][i]])
{
visit[a[s][i]]=1;
dfs(a[s][i],deep+1);
visit[a[s][i]]=0;
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&x);
if(x==1)a[i].push_back(j);
}
for(int i=1;i<=n;i++)
visit[i]=1,dfs(i,1),visit[i]=0;
printf("%d",ans);
}
欧拉回路
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool k[105][105],flag=1;
int x,n,du,sum,ff[10005],start=1,p;
void dfs(int s)
{
for(int i=1;i<=n;i++)
if(i!=s&&k[s][i])
{
k[s][i]=0;k[i][s]=0;
dfs(i);
}
ff[++p]=s;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
du=0;
for(int j=1;j<=n;j++)
{
scanf("%d",&x);
if(x==1){k[i][j]=1;du++;}
else k[i][j]=0;
}
if(du%2==1){if(!sum)start=i;sum++;}
}
if(sum>2){printf("No Solution!\n");return 0;}
dfs(start);
printf("%d",ff[p]);
for(int i=p-1;i>=1;i--)printf(" %d",ff[i]);
}
最小生成树
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct node
{
int x,y,price;
}a[200005];
int n,m,p,u,v,father[5005],x,y,num,ans,ksum;
bool cmp(node s1,node s2)
{
return s1.price<s2.price;
}
int read()
{
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
int find(int p)
{
if(father[p]!=p)father[p]=find(father[p]);
return father[p];
}
void bin(int p1,int p2)
{
father[p2]=p1;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)bin(i,i);
for(int i=1;i<=m;i++)
u=read(),v=read(),a[++num].price=read(),a[num].x=u,a[num].y=v;
sort(a+1,a+num+1,cmp);
for(int i=1;i<=num;i++)
{
if(ksum==n-1)break;
int s1=find(a[i].x),s2=find(a[i].y);
if(s1!=s2)
{
bin(s1,s2);
ans+=a[i].price;
ksum++;
}
}
if(ksum==n-1)printf("%d\n",ans);
else printf("orz\n");
}
SPFA
#include<cstdio>
#include<queue>
#include<climits>
using namespace std;
int b[10005],vis[10005],now,x,y,z,xnext,cnt,m,n,s,en,d[10005],cont,flag=1;
queue<int>a;
struct node
{
int next,to,w;
}e[500005];
void fpush(int u,int v,int w)
{
e[++cnt].next=b[u];
e[cnt].w=w;
e[cnt].to=v;
b[u]=cnt;
}
void SPFA()
{
a.push(s);
d[s]=0;
while(!a.empty())
{
cont++;
now=a.front();
a.pop();
vis[now]=0;
for(int i=b[now];i;i=e[i].next)
{
xnext=e[i].to;
if(d[now]+e[i].w<d[xnext])
{
d[xnext]=d[now]+e[i].w;
if(!vis[xnext])
{
a.push(xnext);
vis[xnext]=true;
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)
d[i]=INT_MAX/2;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
fpush(x,y,z);
}
SPFA();
for(int i=1;i<=n;i++)
if(d[i]!=INT_MAX/2)printf("%d ",d[i]);
else printf("2147483647 ");
return 0;
}
数论
gcd
int gcd(int m,int n)
{
while(m>0)
{int c=n%m;n=m,m=c;}
return n;
}
线性筛素数
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,l,r;
bool isPrime[10000005];
int main()
{
scanf("%d%d",&m,&n);
memset(isPrime,0,sizeof(isPrime));
isPrime[1]=true;
for(int i=2;i<=sqrt(m);i++)
{
if(isPrime[i]==0)
{
for(int j=2*i;j<=m;j+=i)
isPrime[j]=true;
}
}
for(int i=1;i<=n;i++)
{
scanf("%d",&r);
if(!isPrime[r])
printf("Yes\n");
else
printf("No\n");
}
}
[NOIP2017赛前复习第二期]复赛考试技巧与模版-普及组的更多相关文章
- 寻找大学目标及行动步骤——记ITAEM团队第二期宣讲会(2014.05.14)
·昨晚8:00-9:40.在 钟海楼03029 ,进行了ITAEM团队第二期宣讲会(第一期见第一期宣讲会总结).来參加的主要是大一学生.以信院为主.也有法学院.文学院的同学. 在宣讲会中,大家都比較积 ...
- 20155320信息安全系统设计第二周课堂考试总结及myod的实现
20155320 信息安全系统设计第二周课堂考试总结及myod的实现 第二周测试一二已在课上提交 第二周测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置一个行断点 在main ...
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 05:统计单词数【NOIP2011复赛普及组第二题】
05:统计单词数 总时间限制: 1000ms 内存限制: 65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次 ...
- 智能生活 科技无限 CTO VOICE 第二期 智能硬件创新创业专场演讲嘉宾招募
生活不只有诗和远方,还有当下的痛点和需求 当可穿戴设备.虚拟现实.无人机.机器人进入人们视线甚至生活当中 下一个风口就在智能硬件领域上凸显 那么,创业者如何撕掉智能外衣,设计一款有竞争力的智能硬件? ...
- 下载频道--IT资源关东煮第二期[申明:来源于网络]
下载频道–IT资源关东煮第二期[申明:来源于网络] 地址:http://geek.csdn.net/news/detail/129509?ref=myread
- 《Linux就该这么学》第二期视频
Linux就该这么学--第二期学习笔记... ------------- 你的未来取决于你现在点点滴滴的努力 需要用到的一些工具: Vm11激活码 ---------- root在Linux系统中相当 ...
- 【sky第二期--PID算法】--【智能车论坛】
[sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread& ...
随机推荐
- Linux 新手应该知道的 26 个命令
https://linux.cn/article-6160-1.html 当你进入了 Linux 的世界,在下载.安装 了某个 Linux 发行版,体验了 Linux 桌面并安装了一些你喜爱和需要的软 ...
- 高性能平滑动画_requestAnimationFrame
高性能平滑动画_requestAnimationFrame 在下一次重绘之前,执行一个函数
- swust oj 984
利用二叉树中序及先序遍历确定该二叉树的后序序列 1000(ms) 10000(kb) 2754 / 5599 已知二叉树的中序和先序遍历可以唯一确定后序遍历.已知中序和后序遍历可以唯一确定先序遍历,但 ...
- c#拷贝整个文件夹到指定文件夹下(非递归)
public static void CopyEntireDir(string sourcePath, string destPath) { //Now Create all of the direc ...
- robot framework + win7 64 上的安装
1.安装 python 2.7 2.cmd 管理模式 python -m pip install --upgrade pip pip install robotframework==3. ...
- JVM内存模型与垃圾回收
内存模型 1,程序计数器(Program Counter Register):程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,可以理解为是当前线程的行号指示器.字节码解 ...
- Windows nessus安装
1.官网下载nessus,下载速度很慢,要有耐心 2.安装,安装完成后访问https://localhost:8834,最好使用chrome浏览器 3.页面注册,更新plugins等 4.如果页面无法 ...
- 使用sessionStorage进行数据存值
<!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...
- MYSQL 事务和用户权限
一. 什么是事务:简单说,所谓事务就是一组操作,要么操作都成功要么都不成功. 二.事务的使用流程 1. 第一步:开启一个事务,start transaction; 2. 第二步:正常的SQL语句操作, ...
- xmind使用
按住alt可以使子主题线条拉长: