A.字符画

签到

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2163

#include<bits/stdc++.h>
using namespace std;
int w;
void go(){for(int i=1;i<=w;i++)cout<<".";
}
int main(){cin>>w;cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo\n";cout<<"..o";go();cout<<"o.o";go();cout<<".o.";go();cout<<"o.o\n";cout<<"ooo";go();cout<<"o.o";go();cout<<".o.";go();cout<<"ooo\n";cout<<"o..";go();cout<<"o.o";go();cout<<".o.";go();cout<<"o.o\n";cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo\n";return 0;
}

View Code

B.2018

打表规律

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2164

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL dp[2005][2005];
int main(){int n,m;for(int i=1;i<=2000;i++){dp[1][i]=dp[i][1]=i;}for(int i=2;i<=2000;i++)for(int j=2;j<=2000;j++){dp[i][j]=dp[i-1][j]+dp[i][j-1]+1;dp[i][j]=dp[i][j]%1000000007;}while(~scanf("%d %d",&n,&m)){printf("%lld\n",dp[n][m]*dp[n][m]%1000000007);}return 0;
}

View Code

C.时间旅行

读题签到

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2165

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int main(){int n,m;while(~scanf("%d %d",&n,&m)){if(n>m) cout<<n<<"\n";else cout<<m+1<<"\n";}return 0;
}

View Code

D.卖萌表情包

贪心,找到表情优先级即可

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2166

#include<bits/stdc++.h>
#define LL long long
using namespace std;
char s[1005][1005];
bool vis[1005][1005];
void go(int i,int j){vis[i][j]=1;
}
int main(){int n,m;while(~scanf("%d %d",&n,&m)){int ans=0;memset(vis,0,sizeof(vis));memset(s,0,sizeof(s));for(int i=1;i<=n;i++)scanf("%s",s[i]+1);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(vis[i][j]) continue;if(s[i][j]=='^'){if(!vis[i+1][j-1]&&!vis[i+1][j+1]&&s[i+1][j-1]=='v'&&s[i+1][j+1]=='v'){go(i+1,j-1);go(i+1,j+1);go(i,j);ans++;}else if(!vis[i][j+2]&&!vis[i+1][j+1]&&s[i][j+2]=='^'&&s[i+1][j+1]=='v'){ans++;go(i,j+2);go(i+1,j+1);go(i,j);}}else if(s[i][j]=='<'){if(!vis[i-1][j+1]&&!vis[i+1][j+1]&&s[i+1][j+1]=='>'&&s[i-1][j+1]=='>'){ans++;go(i+1,j+1);go(i-1,j+1);go(i,j);}else if(!vis[i+1][j+1]&&!vis[i+2][j]&&s[i+1][j+1]=='>'&&s[i+2][j]=='<'){ans++;go(i+2,j);go(i+1,j+1);go(i,j);}} }}cout<<ans<<"\n";}return 0;
}

View Code

J.买一送一

因为题目是一棵树,u点的贡献 == u(fa)的贡献 + 商品的总数 -(第一次出现此商品前的商品个数)

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2172

#include<bits/stdc++.h>
#define LL long long
using namespace std;
vector<int> v[100005];
int a[100005];
LL f[100005];
int vis[100005];
int pre[100005];
void dfs(int u,int cnt){for(int i=0;i<(int)v[u].size();i++){int to=v[u][i];if(!vis[a[u]]) cnt++;vis[a[u]]++;f[to]=f[u]+cnt-pre[a[to]];int hv=pre[a[to]];pre[a[to]]=cnt;dfs(to,cnt);if(--vis[a[u]]==0) cnt--;pre[a[to]]=hv;}
}
int main(){int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++) v[i].clear();memset(vis,0,sizeof(vis));memset(f,0,sizeof(f));memset(pre,0,sizeof(pre));for(int i=2;i<=n;i++){int u;scanf("%d",&u);v[u].push_back(i);}for(int i=1;i<=n;i++) scanf("%d",&a[i]);        dfs(1,0);for(int i=2;i<=n;i++) printf("%lld\n",f[i]);}return 0;
}

View Code

K.Use FFT

我们将多项式a * 多项式b 得出如下

a0*b0 a0*b1 a0*b2 a0*b3      等于a0 * b3前缀和

   a1*b0 a1*b1 a1*b2  等于a1 *b2前缀和

      a2*b0 a2*b1

         a3*b0

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2173

#include<bits/stdc++.h>
#define LL long long
#define mod 1000000007
using namespace std;
LL a[500005],b[500005];
LL sum[1000005];
int main(){int n,m,l,r;while(~scanf("%d %d %d %d",&n,&m,&l,&r)){for(int i=1;i<=n+1;i++)scanf("%lld",&a[i]);for(int i=1;i<=m+1;i++){scanf("%lld",&b[i]);sum[i]=(sum[i-1]+b[i]+mod)%mod;}for(int i=m+2;i<=r+1;i++)sum[i]=sum[i-1];LL ans=0;for(int i=1;i<=n+1;i++){ans=(ans+a[i]*(sum[r+1]-sum[l]+mod)%mod+mod)%mod;if(l>0) l--;if(r>=0) r--; else break;}printf("%lld\n",(ans+mod)%mod);}return 0;
}

View Code

H.千万不要用树套树

对于每个查询 答案等于 -1r左边的线段个数 + l+1右边的线段个数(这样就不会重复)

我们用两个线段树维护 一个维护左线段 一个维护右线段

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2170

#include<bits/stdc++.h>
#define LL long long
#define mod 1000000007
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn = 100005;
int sum1[maxn<<2],sum2[maxn<<2],cnt[maxn];
void update1(int l,int r,int rt,int pos){if(l==r){sum1[rt]+=1;return ;}int m=(l+r)>>1;if(pos<=m) update1(lson,pos);else update1(rson,pos);sum1[rt]=sum1[rt<<1]+sum1[rt<<1|1];
}
void update2(int l,int r,int rt,int pos){if(l==r){sum2[rt]+=1;return ;}int m=(l+r)>>1;if(pos<=m) update2(lson,pos);else update2(rson,pos);sum2[rt]=sum2[rt<<1]+sum2[rt<<1|1];
}
int query1(int l,int r,int rt,int L,int R){if(L<=l&&r<=R){return sum1[rt];}int m=(l+r)>>1;int ans=0;if(L<=m) ans+=query1(lson,L,R);if(R>m) ans+=query1(rson,L,R);return ans;
}
int query2(int l,int r,int rt,int L,int R){if(L<=l&&r<=R){        return sum2[rt];}int m=(l+r)>>1;int ans=0;if(L<=m) ans+=query2(lson,L,R);if(R>m) ans+=query2(rson,L,R);return ans;
}
int main(){int  n,q;while(~scanf("%d %d",&n,&q)){int all=0;for(int i=1;i<=n*4;i++){if(i<=n) cnt[i]=0;sum1[i]=sum2[i]=0;}while(q--){int op,l,r;scanf("%d",&op);if(op==1){scanf("%d %d",&l,&r);if(l==r) cnt[l]++;update1(1,n,1,l);update2(1,n,1,r);all++;}else {scanf("%d %d",&l,&r);int ans=all;if(n>=l+1) {   ans-=query1(1,n,1,l+1,n);}if(r-1>=1) { ans-=query2(1,n,1,1,r-1);}if(r-l==2) ans+=cnt[l+1];printf("%d\n",ans);}}}return 0;
}

View Code

转载于:https://www.cnblogs.com/MengX/p/10645119.html

2018 hncpc 部分题相关推荐

  1. 牛客网 2018校招真题 美团点评 K的倍数

    Description 牛客网 2018校招真题 K的倍数 Solving Ideas sum[i + 1]: 表示序列p[0]...p[i]的和 从长度最大的子串开始判断,当剩余需要判断子串长度不可 ...

  2. 牛客网 2018校招真题 摩拜 排序次数

    Description 牛客网 2018校招真题 排序次数 Solving Ideas 将数组a的元素拷贝到数组b 对数组b进行排序 对比数组b,统计数组a中已排序的元素个数 如:a = [2, 11 ...

  3. 牛客网 2018校招真题 滴滴出行 寻找丑数

    Description 牛客网 2018校招真题 寻找丑数 Solving Ideas 参考<剑指offer>丑数 Time complexity : O(n)O(n)O(n) Space ...

  4. 牛客网 2018校招真题 爱奇艺 最后一位

    Description 牛客网 2018校招真题 最后一位 Solving Ideas 二分查找 Solution import java.io.BufferedReader; import java ...

  5. 牛客网 2018校招真题 京东 回文

    Description 牛客网 2018校招真题 回文 Solving Ideas 计算以str[str.length() - 1]为结尾的最大的回文长度,从而判断最少需要追加多少个字母才能使整个串成 ...

  6. 牛客网 2018校招真题 美团点评 关灯游戏

    Description 牛客网 2018校招真题 关灯游戏 Solving Ideas 只与最右边的数字有关,如果最右边的数字为1,则Alice赢,否则Bob赢 假设最右边的数字为1 因为Alice是 ...

  7. 牛客网 2018校招真题 网易 骰子游戏

    Description 牛客网 2018校招真题 骰子游戏 Solving Ideas 参考<剑指offer>n个骰子的点数 考虑用两个数组来存储骰子点数的每一个总数出现的次数. 在一次循 ...

  8. 牛客网 2018校招真题 美团点评 重要节点

    Description 牛客网 2018校招真题 重要节点 Solving Ideas BFS 创建一个标记数组arrive,arrive[i][j]为true表示从i可以到达j, false则不能 ...

  9. 牛客网 2018校招真题 招商银行信用卡 整数成绩最大化

    Description 牛客网 2018校招真题 整数成绩最大化 Solving Ideas 当n>4时,最大受益为尽可能拆分出更多的数字3,最后一个不足3的,若其为1则分给其中一个3,得到4, ...

最新文章

  1. 怎么复制链接伟html,index.html
  2. linux查看节点使用进程后退出,Linux通过端口号查看使用进程-结束进程
  3. [收集] C++ memset ,memcpy 和strcpy 的区别
  4. 如何修改mysql服务器,怎么修改mysql服务器地址
  5. Kafka本身的架构
  6. ThinkPHP5.0.5RCE
  7. python 经典排序算法
  8. SpringBoot 整合 Shiro实践
  9. SVM支持向量机习题解答
  10. 微波遥感SNAP(四)——检测地表沉降(2)相位解缠与地理编码
  11. CSDN写博客怎么插入数学公式(干货满满呦)
  12. Java学习从入门到放弃
  13. Spring Cloud从入门到精通(四):熔断器 Hystrix
  14. OpenCV实现图片锐化
  15. 精益管理研究院陈逸超 | 用精益思维创造数据价值金矿
  16. django 下mailgun的使用
  17. java服务端集成极光消息推送
  18. 【Baxter机器人末端轨迹坐标采集和轨迹还原】
  19. 申请QQ密码保护,保护号码安全!(转)
  20. 一名拿到阿里、京东、百度等公司offer的Java程序员年终总结

热门文章

  1. 字符在计算机中是如何表示的?
  2. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
  3. android uri转drawable,Glide4(URL转File,URL转Drawable)
  4. 曼彻斯特解密_曼彻斯特编码解码方法与流程
  5. What are training set, validation set and test set?
  6. CODEVS-3303-翻转区间
  7. [JLOI2011]不重复数字
  8. BZOJ 4032 luogu P4112 [HEOI2015]最短不公共子串 (DP、后缀自动机)
  9. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...
  10. python标准输入输出用来干什么_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...