20170722
来源:互联网 发布:重庆大数据行动计划 编辑:程序博客网 时间:2024/06/04 18:09
今天脑壳抽了 爆0
T1:
给出两个 N×N 的矩阵 A、B,矩阵每行每列标号 0~N-1 。
定义这两个矩阵的乘积 AB 为
现在要在这两个矩阵上依次进行 Q 次修改操作,两种操作描述如下:
- A i j K ,将 Ai,j 的值修改为 K 。
- B i j K ,将 Bi,j 的值修改为 K 。
在每一次修改操作进行后,输出矩阵 AB(这两个矩阵的乘积矩阵)中每个位置元素的权值之和。
输入
2
1 2
3 4
4 3
2 1
3
A 1 1 2
B 0 1 3
A 0 0 10
输出
40对于 100% 的数据,1≤N≤1000,1≤Q≤105,|Aij|,|Bi,j|≤1000。
40
103
送命题 不知道为什么当时修改没全;
#include<bits/stdc++.h>using namespace std;int a[1005][1005],b[1005][1005],c[1005][1005];int sumb[1005],suma[1005];int n,m;int main(){//freopen("matrix.in","r",stdin);//freopen("matrix.out","w",stdout);ios::sync_with_stdio(false);cin.tie(NULL);cin>>n;for(int i=0;i<n;++i)for(int j=0;j<n;++j)cin>>a[i][j],suma[j]+=a[i][j];for(int i=0;i<n;++i)for(int j=0;j<n;++j)cin>>b[i][j],sumb[i]+=b[i][j];long long s=0;for(int i=0;i<n;++i)for(int j=0;j<n;++j) s=s+(long long)a[i][j]*sumb[j];cin>>m;char ch;int x,y,z;for(int i=1;i<=m;++i){cin>>ch;cin>>x>>y>>z;if(ch=='A'){s=s+(long long)(z-a[x][y])*sumb[y];suma[y]=suma[y]+z-a[x][y];a[x][y]=z;}if(ch=='B'){s=s+(long long)(z-b[x][y])*suma[x];sumb[x]=sumb[x]+z-b[x][y];b[x][y]=z;}cout<<s<<endl;}}求和n²求 修改O(1) 总O(n²+m)
//ios::sync_with_stdio(false);cin.tie(NULL); 不想写读入优化可以用 比普通快一点,比优化慢
数据达到300000 用读入优化快得多
ios::sync_with_stdio(false);cin.tie(NULL); 只能用cin
T2:
有 N 个城市,这些城市通过 M 条无向边互相连通,每条边有一个权值 Ci ,表示这条边的长度为 2^(Ci) ,
没有两条边的长度是相同的。
设 d(i,j)为城市 i 到城市 j 的最短路长度,求:
答案以二进制输出。
输入
5 6
1 3 5
4 5 0
2 1 3
3 2 1
4 3 4
4 2 2
输出
1000100因为边的权值为2ⁿ 而且没有两条边的长度是相同的,所以直接跑最小生成树,树上两点距离就是最短路
答案为∑最小生成树上每条边被走过的次数*2的权值次方
必须用类高精度,所以ans[i] 直接等于 权值为i的边贡献的次数 然后扫一次进位得答案
一条边贡献的次数=这条边两端连通快大小的乘积
#include<bits/stdc++.h>using namespace std;int first[100005],father[100005],size[100005];int f[200005],to[200005];int x,y,z,len,k,tot,n,m;bool vis[100005];long long ans[205005];struct node{int next,to,v;}e[200005];int find(int x){if(father[x]!=x) father[x]=find(father[x]);return father[x];}void inser(int x,int y,int z){tot++;e[tot].next=first[x];first[x]=tot;e[tot].to=y;e[tot].v=z;}void dfs(int x){vis[x]=true;for(int u=first[x];u;u=e[u].next){int to=e[u].to;if(!vis[to]){dfs(to);ans[e[u].v]+=(long long)size[to]*(n-size[to]);size[x]+=size[to];}}}int main(){//freopen("roads.in","r",stdin);//freopen("roads.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=n;++i) father[i]=i,size[i]=1;for(int i=1;i<=m;++i){scanf("%d%d%d",&x,&y,&z);f[z]=x,to[z]=y;}for(int i=0;i<m;++i){int px=find(f[i]),py=find(to[i]);if(px!=py){k++;father[px]=py;inser(f[i],to[i],i);inser(to[i],f[i],i);}if(k==n-1) break;}dfs(1);for(int i=0;i<=m+1000;++i) ans[i+1]+=ans[i]/2,ans[i]%=2;for(int i=m+1000;i>=0;--i) if(ans[i]){len=i;break;}for(int i=len;i>=0;--i) cout<<ans[i];return 0;}
阅读全文
0 0
- 20170722
- 20170722memo
- 20170722 卸载美团
- 20170722:数据库命题
- 20170722Windows12_1_虚拟内存
- 20170722日常总结
- 20170722考试总结
- 20170722 死皮赖脸,是为活着
- 20170722学习笔记之使用递归
- 公众号“今日作文素材”文章列表 (20170722-20170728)
- Android Wi-Fi 打开驱动LOG的方法(QCOM平台)
- leetcode 423. Reconstruct Original Digits from English
- 【平价数据】GAN用于半监督学习
- PAT B1057. 数零壹
- 【Redis】redis的安装
- 20170722
- python中检测某个变量是否有定义
- Java并发阻塞队列BlockingQueue概览
- 架构师之路(二十)项目的架构流程演化
- 一台Linux主机搭建kafka集群
- 微信小程序页面跳转
- log4j配置mybatis打印sql
- excel逐列读取excel所有数据
- uva 540 Team Queue