斐波那契

/*
相同颜色的节点与父亲节点的差相等,且是一个小于它的最大斐波那契数
所以降两个点同时减去小与它的最大斐波那契数,直到两点相等
*/
#include<cstdio>
const int maxm=3e5+;
int m;
long long f[]={,};
int main(){
freopen("fibonacci.in","r",stdin);freopen("fibonacci.out","w",stdout);
for(int i=;i<=;i++) f[i]=f[i-]+f[i-];
scanf("%d",&m);
long long a,b;
while(m--){
scanf("%lld%lld",&a,&b);
for(int i=;a!=b;i--){
if(a>f[i]) a-=f[i];
if(b>f[i]) b-=f[i];
}
printf("%lld\n",a);
}
return ;
}

100分

数颜色

#include<iostream>
#include<cstdio>
#define maxn 300010
using namespace std;
int n,m,a[maxn],sum[maxn],pos[maxn],s[][],mx;
bool flag1,flag2;
void work2(){
int op,l,r,x;
while(m--){
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&l,&r,&x);
if(pos[x]>r||pos[x]<l)putchar('');
else putchar('');
putchar('\n');
}
else {
scanf("%d",&x);
swap(a[x],a[x+]);
swap(pos[a[x]],pos[a[x+]]);
}
}
}
void work(){
for(int i=;i<=n;i++){
for(int j=;j<=mx;j++){
if(j==a[i])s[i][j]=s[i-][j]+;
else s[i][j]=s[i-][j];
}
}
int op,l,r,x;
for(int i=;i<=m;i++){
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&l,&r,&x);
int cnt=s[r][x]-s[l-][x];
printf("%d\n",cnt);
}
else {
scanf("%d",&x);
s[x][a[x]]--;
s[x][a[x+]]++;
}
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("color.in","r",stdin);freopen("color.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
mx=max(mx,a[i]);
sum[a[i]]++;
if(sum[a[i]]>)flag2=;
pos[a[i]]=i;
}
if(!flag2){//所有兔子亚瑟都不相同
work2();
return ;
}
if(n<=){work();return ;}
int op,l,r,x;
for(int i=;i<=m;i++){
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&l,&r,&x);
int w=r-l+;
if(w<=n-w){
int cnt=;
for(int j=l;j<=r;j++)if(a[j]==x)cnt++;
printf("%d\n",cnt);
continue;
}
else {
int cnt=;
for(int j=;j<=l;j++)if(a[j]==x)cnt++;
for(int j=r+;j<=n;j++)if(a[j]==x)cnt++;
cnt=sum[x]-cnt;
printf("%d\n",cnt);
}
}
else {
scanf("%d",&x);
swap(a[x],a[x+]);
}
}
return ;
}

30分 暴力

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define maxn 300010
using namespace std;
vector<int>a[maxn];
int n,m,l,r,x;
int pos[maxn];
int main(){
freopen("color.in","r",stdin);freopen("color.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&pos[i]),a[pos[i]].push_back(i);
for(int i=;i<=;i++)sort(a[i].begin(),a[i].end());
for(int i=;i<=m;i++){
int opt;scanf("%d",&opt);
if(opt==){
scanf("%d%d%d",&l,&r,&x);
int ll=,rr=a[x].size()-,ans=-,mid;
while(ll<=rr){
mid=(ll+rr)>>;
if(a[x][mid]>=l)ans=mid,rr=mid-;
else ll=mid+;
}
if(ans==-){printf("0\n");continue;}
ll=,rr=a[x].size()-;int ans2=-;
while(ll<=rr){
int mid=(ll+rr)>>;
if(a[x][mid]<=r)ans2=mid,ll=mid+;
else rr=mid-;
}
if(ans2==-){printf("0\n");continue;}
else printf("%d\n",ans2-ans+);
}
else {
scanf("%d",&x);
if(pos[x]==pos[x+])continue;
else {
a[pos[x]][lower_bound(a[pos[x]].begin(),a[pos[x]].end(),x)-a[pos[x]].begin()]++;
a[pos[x+]][lower_bound(a[pos[x+]].begin(),a[pos[x+]].end(),x+)-a[pos[x+]].begin()]--;
swap(pos[x],pos[x+]);
}
}
}
return ;
}

100分 动态数组+二分答案

分组

#include<iostream>
#include<cstdio>
#include<cmath>
#define maxn 131073
using namespace std;
int n,k,a[maxn],q[maxn],ans=-,cnt,pp[maxn],numm,mid;
bool flag;
bool no(int w){
int ww=sqrt(w);
if(w==ww*ww)return ;
return ;
}
void dfs(int zu,int pos){
if(flag)return;
if(pos==n+&&zu<=mid){
flag=;
return;
}
int num=numm;
int p[];
for(int i=;i<=numm;i++)p[i]=pp[i];
if(zu<mid&&pos!=){
numm=;
pp[++numm]=pos;
q[zu]=pos-;
dfs(zu+,pos+);
if(flag)return;
}
bool ok=;
for(int i=;i<=num;i++)
if(no(a[pos]+a[p[i]])){
ok=;
break;
} if(ok==){
numm=num;for(int i=;i<=numm;i++)pp[i]=p[i];
numm=numm+;
pp[numm]=pos;
dfs(zu,pos+);
if(flag)return;
}
if(flag)return; }
bool check(){
flag=;numm=;
dfs(,);
if(flag)return ;
return ;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("division.in","r",stdin);freopen("division.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
if(k==){
int l=,r=n;
while(l<=r){
mid=(l+r)>>;
if(check())ans=mid,r=mid-;
else l=mid+;
}
if(ans!=-){
printf("%d\n",ans);
for(int i=;i<ans;i++)printf("%d\n",q[i]);
return ;
}
return ;
}
printf("1\n\n");
return ;
}

12分 暴力

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 131073
using namespace std;
int n,m,k;
int a[maxn],b[maxn],f[maxn<<];
bool vis[maxn],dvis[maxn],issqr[maxn<<];
int find(int x){
return f[x]>?(f[x]=find(f[x])):x;
}
void merge(int u,int v){
u=find(u),v=find(v);
if(u!=v){
if(f[u]>f[v])swap(u,v);
f[u]+=f[v];f[v]=u;
}
}
bool check(int u,int v){
int r1=find(u),r2=find(u+maxn);
int s1=find(v),s2=find(v+maxn);
if(r1==s1||r2==s2)return ;
merge(r1,s2);merge(r2,s1);
return ;
}
void work1(){
for(int i=n,j=n;i;){
for(bool flag=;j;j--){
for(int k=;k*k-a[j]<maxn;k++){
if(k*k-a[j]<=)continue;
if(vis[k*k-a[j]]){flag=;break;}
}
if(!flag)break;
vis[a[j]]=;
}
if(!j)break;b[++m]=j;
for(;i>j;i--)vis[a[i]]=;
}
}
void work2(){
memset(f,-,sizeof(f));
for(int i=;i*i<*maxn;i++)issqr[i*i]=;
for(int i=n,j=n;i;){
for(bool flag=;j;j--){
if(vis[a[j]]){
if(issqr[a[j]+a[j]]){
if(dvis[a[j]])break;
for(int k=;k*k-a[j]<maxn;k++){
if(k*k-a[j]<=)continue;
if(vis[k*k-a[j]]&&k*k!=a[j]*){flag=;break;}
}
if(!flag)break;dvis[a[j]]=;
}
}
else {
for(int k=;k*k-a[j]<maxn;k++){
if(k*k-a[j]<=)continue;
if(vis[k*k-a[j]]){
if(check(k*k-a[j],a[j])){flag=;break;}
}
}
if(!flag)break;vis[a[j]]=;
}
}
if(!j)break;b[++m]=j;
for(;i>j;i--)f[a[i]]=f[a[i]+maxn]=-,vis[a[i]]=,dvis[a[i]]=;
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("division.in","r",stdin);freopen("division.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
if(k==)work1();
else work2();
printf("%d\n",m+);
for(int i=m;i;i--)printf("%d ",b[i]);
putchar('\n');
return ;
}

100分 并查集

/*
T1考场上没想出正解来,就打了个暴力,暴力挂了,得到正解发现这题是这么的简单
T2,T3直接练暴力了,T3调了将近一个半小时
这次考试成绩不理想,主要是败在T1了,noip的T1应该是一眼题,这个T1不是
再加上心态不好
考场上总还是不免有一些题想不出正解,但是暴力出错就太可惜了,以后暴力还是要努力写的,尽量不要出错误(不要不屑于手造数据),希望以后能避免类似今天T1的错误
Noip前每次模拟考试出现的失误都有可能反映在正式考试中
切记切记,下不为例 */

小结

2017-10-12 NOIP模拟赛的更多相关文章

  1. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  4. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  5. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  6. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  7. 2018.02.12 noip模拟赛T2

    二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得 ...

  8. 2018.10.12 NOIP模拟 字符处理(模拟)

    传送门 sb模拟,考试跟着sb了90分. 代码

  9. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  10. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

随机推荐

  1. 机器学习(十九)— xgboost初试kaggle

     1.官网下载kaggle数据集Homesite Competition数据集,文件结构大致如下: 2.代码实战 #Parameter grid search with xgboost #featur ...

  2. vue-mixins使用注意事项和高级用法

    因为在项目中 mixins(混合)特性使用频率是很高的 有必要熟练掌握官方文档: mixins 实际项目中 一般都存在 列表(list) 这种很常见的使用场景 话再多都不如上demo file: mi ...

  3. 百度编辑器ueditor的toolbars的各个元素代表的功能说明

    百度编辑器ueditor的toolbars的各个元素代表的功能说明

  4. redis学习--String数据类型。

    本文摘自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/14/2349815.html 一.概述: 字符串类型是Redis中最为基础的数据存 ...

  5. Xposed模块开发学习记录

    Xposed模块相关API可以参考在线文档: https://api.xposed.info/reference/packages.html     入门教程可以参考: https://github. ...

  6. LeetCode Majority Element I

    原题链接在这里:https://leetcode.com/problems/majority-element/ 题目: Given an array of size n, find the major ...

  7. bzoj 3012: [Usaco2012 Dec]First! Trie+拓扑排序

    题目大意: 给定n个总长不超过m的互不相同的字符串,现在你可以任意指定字符之间的大小关系.问有多少个串可能成为字典序最小的串,并输出这些串.n <= 30,000 , m <= 300,0 ...

  8. bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳

    题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...

  9. 【LeetCode】084. Largest Rectangle in Histogram

    题目: Given n non-negative integers representing the histogram's bar height where the width of each ba ...

  10. mongodb 学习资料

    1 入门 http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html http://www.cnblogs.com/hoo ...