1.数组异或

#include<iostream>
#include<cstdio>
#define maxn 100010
#define mod 1000000007
using namespace std;
int n,a[maxn],b[maxn],c[maxn];
int main(){
freopen("xorarray.in","r",stdin);freopen("xorarray.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)scanf("%d",&b[i]);
c[]=a[]^b[];
for(int i=;i<=n;i++){
c[i]=c[i-];
for(int j=;j<i;j++){
c[i]+=a[i]^b[j];
if(c[i]>=mod)c[i]-=mod;
}
for(int j=;j<i;j++){
c[i]+=a[j]^b[i];
if(c[i]>=mod)c[i]-=mod;
}
c[i]+=a[i]^b[i];
if(c[i]>=mod)c[i]-=mod;
}
for(int i=;i<=n;i++)printf("%d ",c[i]);
fclose(stdin);fclose(stdout);
return ;
}

60分 暴力

/*
累计所有数二进制下的每一位0或1的个数
又因为是xor,所以a[j][0]*b[j][1]+a[j][1]*b[j][0]
*/
#include<iostream>
#include<cstdio>
#define maxn 100010
#define mod 1000000007
using namespace std;
int n,A[maxn],B[maxn];
int a[][],b[][],C[maxn];
int main(){
//freopen("Cola.txt","r",stdin);
freopen("xorarray.in","r",stdin);freopen("xorarray.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&A[i]);
for(int i=;i<=n;i++)scanf("%d",&B[i]);
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
a[j][(A[i]>>j)&]++;
b[j][(B[i]>>j)&]++;
long long c=(1LL*a[j][]*b[j][]%mod+1LL*a[j][]*b[j][]%mod)%mod;
c=c*(<<j)%mod;
C[i]=(C[i]+c)%mod;
}
}
for(int i=;i<=n;i++)printf("%d ",C[i]);
return ;
}

100分

2.侦探游戏(最小生成树,期望)

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 20010
using namespace std;
int n,m,num,head[maxn],dis[maxn],D[maxn];
double ans,w;
bool v[maxn];
struct node{
int to,pre,v;
}e[*];
void Insert(int from,int to,int v){
e[++num].to=to;
e[num].v=v;
e[num].pre=head[from];
head[from]=num;
}
void spfa(int s1,int s2){
queue<int>q;
memset(v,,sizeof(v));memset(dis,/,sizeof(dis));
v[s1]=;v[s2]=;dis[s1]=;dis[s2]=;
if(!v[])v[]=,dis[]=,q.push();
q.push(s1);q.push(s2);
while(!q.empty()){
int now=q.front();q.pop();v[now]=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(dis[to]>dis[now]+e[i].v){
dis[to]=dis[now]+e[i].v;
if(!v[to]){
v[to]=;
q.push(to);
}
}
}
}
for(int i=;i<=n;i++){
ans+=(double)dis[i]*w;
}
int k=min(D[s1],D[s2]);
ans+=(double)k*w;
}
void SPFA(int s){
queue<int>q;
memset(v,,sizeof(v));
memset(D,/,sizeof(D));
v[s]=;D[s]=;
q.push(s);
while(!q.empty()){
int now=q.front();q.pop();v[now]=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(D[to]>D[now]+e[i].v){
D[to]=D[now]+e[i].v;
if(!v[to]){
v[to]=;
q.push(to);
}
}
}
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("detective.in","r",stdin);freopen("detective.out","w",stdout);
scanf("%d%d",&n,&m);
w=(double)(n*(n-))/2.0;
w=1.0/w;
int x,y,z;
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
Insert(x,y,z);Insert(y,x,z);
}
SPFA();
for(int i=;i<=n;i++){
for(int j=;j<i;j++){
spfa(i,j);
}
}
printf("%.2lf",ans);
/*int sz=sizeof(head)+sizeof(e);
cout<<sz/1048576;*/
}

0分 暴力

/*
暴力算法:
求一遍最小生成树,枚举两个点,想象将两个点连上权值为0的边,然后进行倍增,求两点之间最长的一条边,删除这条边,当前树上所有边权和即为此时的花费,最后除以n*(n-1)
*/

O(n^2)暴力算法

/*
枚举哪一条边可以删掉,由于克鲁斯卡尔最小生成树边是按从大到小顺序选入的,所以当前讨论的这条边一定是图上最大的边,而且既然他是最小生成树的一条边,他所连接的两个集合一定是两个树,将两棵树大小进行乘法原理,累计答案 (我在胡言乱语什么)
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 20010
#define maxm 100010
using namespace std;
struct node{
int from,to,v;
bool operator < (const node a)const{
return v<a.v;
}
}e[maxm];
int n,m,fa[maxn],s[maxn];
unsigned long long sum,cnt;
int find(int a){
if(a==fa[a])return a;
return fa[a]=find(fa[a]);
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("detective.in","r",stdin);freopen("detective.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)fa[i]=i,s[i]=;
for(int i=;i<=m;i++)scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].v);
sort(e+,e+m+);
for(int i=;i<=m;i++){
int x=find(e[i].from),y=find(e[i].to);
if(x==y)continue;
cnt+=1ULL*s[x]*s[y]*e[i].v;
sum+=e[i].v;
fa[y]=x;s[x]+=s[y];
}
double ans=sum-cnt/((n*(n-))/2.0);
//double ans = sum - 2.0 * cnt / n / (n - 1);
printf("%.2lf",ans);
return ;
}

100分 最小生成树

3.棋盘迷宫(分治,搜索)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,m,x1,x2,y1,y2,e[][]={{,},{,}};
char map[][];
bool vis[];
int f(int x,int y){
return (x-)*m+y;
}
bool BFS(){
queue<int>q;
memset(vis,,sizeof(vis));
vis[f(x1,y1)]=;
q.push(f(x1,y1));
while(!q.empty()){
int now=q.front();q.pop();
int x=(now-)/m+,y=now-(x-)*m;
for(int i=;i<;i++){
int xx=x+e[i][],yy=y+e[i][];
int w=f(xx,yy);
if(xx==x2&&yy==y2)return ;
if(xx>=&&xx<=n&&yy>=&&yy<=n&&xx<=x2&&yy<=y2&&!vis[w]&&map[xx][yy]=='.'){
vis[w]=;
q.push(w);
}
}
}
return ;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("boardgame.in","r",stdin);freopen("boardgame.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%s",map[i]+);
int q;
scanf("%d",&q);
while(q--){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x2<x1||y2<y1){
printf("No\n");
continue;
}
if(x1==x2){
bool flag=;
for(int i=y1;i<=y2;i++){
if(map[x1][i]=='#'){
flag=;
printf("No\n");break;
}
}
if(!flag)printf("Yes\n");
continue;
}
if(y1==y2){
bool flag=;
for(int i=x1;i<=x2;i++){
if(map[i][y1]=='#'){
flag=;
printf("No\n");break;
}
}
if(!flag)printf("Yes\n");
continue;
}
int fl=BFS();
if(fl)printf("Yes\n");
else printf("No\n");
}
fclose(stdin);fclose(stdout);
return ;
}

20分 暴力

/*
考试的时候忘记判断起点和终点是否合法了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,m,x1,x2,y1,y2,e[][]={{,},{,}};
char map[][];
bool vis[];
int f(int x,int y){
return (x-)*m+y;
}
bool BFS(){
queue<int>q;
memset(vis,,sizeof(vis));
vis[f(x1,y1)]=;
q.push(f(x1,y1));
while(!q.empty()){
int now=q.front();q.pop();
int x=(now-)/m+,y=now-(x-)*m;
for(int i=;i<;i++){
int xx=x+e[i][],yy=y+e[i][];
int w=f(xx,yy);
if(xx>=&&xx<=n&&yy>=&&yy<=n&&xx<=x2&&yy<=y2&&!vis[w]&&map[xx][yy]=='.'){
if(xx==x2&&yy==y2)return ;
vis[w]=;
q.push(w);
}
}
}
return ;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("boardgame.in","r",stdin);freopen("boardgame.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%s",map[i]+);
int q;
scanf("%d",&q);
while(q--){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x2<x1||y2<y1){
printf("No\n");
continue;
}
if(x1==x2){
bool flag=;
for(int i=y1;i<=y2;i++){
if(map[x1][i]=='#'){
flag=;
printf("No\n");break;
}
}
if(!flag)printf("Yes\n");
continue;
}
if(y1==y2){
bool flag=;
for(int i=x1;i<=x2;i++){
if(map[i][y1]=='#'){
flag=;
printf("No\n");break;
}
}
if(!flag)printf("Yes\n");
continue;
}
if(map[x1][y1]=='#'){
printf("No\n");
continue;
}
int fl=BFS();
if(fl)printf("Yes\n");
else printf("No\n");
}
fclose(stdin);fclose(stdout);
return ;
}

40分 暴力

2017-10-6 清北刷题冲刺班p.m的更多相关文章

  1. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  4. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  5. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  6. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  7. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  8. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  9. 2017-10-7 清北刷题冲刺班a.m

    测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...

  10. 2017-10-1 清北刷题冲刺班a.m

    位运算1 (bit) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...

随机推荐

  1. tomcat警告:Setting property 'source' to 'org.eclipse.jst.j2ee.server:ServletPro' did not find a matching property

    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclips ...

  2. kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了

    先看数据: 特征如下: Time Number of seconds elapsed between each transaction (over two days) numeric V1 No de ...

  3. 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度

    来源:http://my.oschina.net/pathenon/blog/65210 1.概述     跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.Mi ...

  4. redis学习--Hashes数据类型

    本文转自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/19/2352932.html 一.概述: 我们可以将Redis中的Hashes类型 ...

  5. Gym - 101196G :That's One Hanoi-ed Teacher (递推)

    题意:给定当前汉诺塔的状态,问还有多少步走完,不合法输出“No”. 思路:显然可以一层一层试探下去的.我们设三个柱子为“起始”,“中转”,“终点”,当前状态的最大的盘子不可能在中转站处:如果在起始站, ...

  6. stackoverflow打开慢

    C:\Windows\System32\drivers\etc 下的hosts文件最下面添加 127.0.0.1  ajax.googleapis.com

  7. FIS 雪碧图sprite合并

    1 安装fis(必须先安装node和npm):npm install -g fis3 2 构建项目发布到根目录下的output:fis3 release -d ./output 项目根目录:FIS3 ...

  8. POJ1958:Strange Towers of Hanoi

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:http://poj.org/problem?id=1958 题目要我们求四柱 ...

  9. 用Word编辑cnblogs的博文并发布

    听说可以用Word直接编辑文件发布博客,请教加研究,终于配置成功,先分享如下: 1. 在www.cnblogs.com上注册用户. 2. 打开Word,选择博客文章 3. 点击管理账户,新建或更改,按 ...

  10. Python图片识别——人工智能篇

     一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅 ...