第十三题。。。哇偶。。好难啊。。有没有c++大神樱说一下程序步骤。。😔我还小。。看不

HelloCPPAMP C++AMP的程序,需要安装VS2012,供并行计算初学者学习,内有文档. MPI
238万源代码下载-
&文件名称: HelloCPPAMP
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 19 KB
&&上传时间:
&&下载次数: 14
&&提 供 者:
&详细说明:C++AMP的程序,需要安装VS2012,供并行计算初学者学习,内有文档.-a program of C++AMP,which is for parallel compute learners and need to install VS2012. There is a document in it
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&HelloC++AMP.cpp&&HelloC++AMP.sln&&HelloC++AMP.vcxproj&&docs\HelloC++AMP.doc&&docs
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 用C++ AMP进行并行编程的例子,可以用GPU对程序进行优化编程。
&[] - C++AMP手册,介绍了 AMP的内存共享模型,以及在此模型上的异构并行计算模型,是 direct computer 的VS版,学习简单。BZOJ3224 CODEVS4543 普通平衡树 题解&代码
醉啦醉啦= =第k大第k小纠结了好久,最后瞎蒙了一个蒙错了然后纠结了好久,后来学长告诉我【你们排名难道是成绩低的排前面么】题意: 维护一个序列,按照val[]排序,支持: 1. 插入x 2. 删除x(若有多个相同的val,因只删除一个) 3. 查询x是第几大(若有多个相同的数,因输出最小的排名) 4. 查询第k大 5. 求x的前驱(前驱定义为小于x,且最大的数,可能树中不存在x) 6. 求x的后继(后继定义为大于x,且最小的数,同上)思路: 维护一个顺序序列,维护s[]表示节点子树大小,z[]表示节点个数 求前驱后继的时候先插入一个再删除就行#include&iostream&#include&stdio.h&#define lson ch[x][0]#define rson ch[x][1]using namespace std;const int maxn=100005;int n,op,x,tot,root,fa[maxn],ch[maxn][2],val[maxn],s[maxn],z[maxn];void link(int x,int y,int d){
if(y)ch[y][d]=x;
if(x)fa[x]=y;}void maintain(int x){
if(x)s[x]=s[lson]+s[rson]+z[x];}int ischild(int x){
return ch[fa[x]][1]==x;}void rotate(int x){
int y=fa[x],d=ischild(x);
if(!fa[y])root=x;
link(x,fa[y],ischild(y));
link(ch[x][!d],y,d);
link(y,x,!d);
maintain(y);}void Splay(int x,int goal=0){
int y=fa[x],z=fa[y];
while(y!=goal)
if(z==goal)
rotate(x);
if(ischild(x)^ischild(y))rotate(x);
else rotate(y);
rotate(x);
y=fa[x],z=fa[y];
maintain(x);}int newnode(int v){
s[t]=z[t]=1;
return}int getval(int value){
if(val[x]==value)return
if(ch[x][val[x]&value])x=ch[x][val[x]&value];
else return
return}void addtree(int v){
root=newnode(v);
int x=getval(v),t=x;
if(val[x]==v)z[x]++;
else t=newnode(v),link(t,x,val[x]&v);
Splay(t);}void deltree(int v){
int x=getval(v);
if(z[x]&1)
x=ch[x][0];
while(ch[x][1])x=ch[x][1];
Splay(x,root);
link(ch[root][1],x,1);
fa[root]=0;//false
root=ch[root][1];
fa[root]=0;
maintain(root);}int getvalth(int v){
addtree(v);
int x=getval(v);
int ans=s[lson]+1;
deltree(v);
return}int getkth(int k){
//cout&&k&&' '&&x&&
//cout&&ch[x][0]&&' '&&z[x]&&
if(k&=s[ch[x][0]])x=ch[x][0];
else if(k&=s[ch[x][0]]+z[x])return val[x];
else k-=s[ch[x][0]]+z[x],x=ch[x][1];
//cout&&x&&
return val[x];}int getpre(int v){
addtree(v);
int x=ch[root][0];
while(ch[x][1])x=ch[x][1];
deltree(v);
return val[x];}int getnext(int v){
addtree(v);
int x=ch[root][1];
while(ch[x][0])x=ch[x][0];
deltree(v);
return val[x];}void print(int x){
if(ch[x][0])print(ch[x][0]);
printf("%d %d/n",x,val[x]);
if(ch[x][1])print(ch[x][1]);}int main(void){
scanf("%d",&n);
for(int i=1;i&=n;i++)
scanf("%d%d",&op,&x);
//cout&&op&&
addtree(x);
deltree(x);
printf("%d/n",getvalth(x));
printf("%d/n",getkth(x));
printf("%d/n",getpre(x));
printf("%d/n",getnext(x));
//print(root);
return 0;}
最新教程周点击榜
微信扫一扫1596人阅读
C/C++练习(12)
解题思路:
由题意,能得出方程组:
x+y = 5;
y+z = 3;
2z = 2;    (1)
由(1)得z=1或6。一种是进位的情况,一种是不进位的情况,下面对两种情况进行分析。
一、如果不考虑进位的情况,则分析可得
z = 1;
y = 2;
x = 3;
二、考虑进位的情况,则上面方程组应进行相应的变化:
情况1:x+y = 4;(不是5是因为十位相加进1)
y+z = 12;(不是13是因为个位数相加进1)
2z = 12;
得: z = 6;
y = 6;
x = -2;
这种情况应排除,因为x=-2意味着两个数不再是相加,而是相减,则个位数的z相加也就不再适应。
情况2:x+y = 5;
y+z = 2;
2z = 12;
得: z = 6;
y = -4;
x = 9;
这种情况应排除,同情况1。
综上所述,得x、y、z的最终取值是:x=3,y=2,z=1;
程序设计如下:
#include &iostream&
int main()
int x,y,z;
int num1,num2;
for(x=0; x&=5; x++)
for(y=0; y&=5; y++)
num1 = x*100 + y*10 +
num2 = y*100 + z*10 +z;
if((num1 + num2) == 532)
cout&&&x=&&&x&&&,y=&&&y&&&,z=&&&z&&
//下面这几行可以不用,因为经过分析可知其不存在值
num1 = x*100 + y*10 +
num2 = y*100 + z*10 +z;
if((num1 + num2) == 532)
cout&&&x=&&&x&&&,y=&&&y&&&,z=&&&z&&
佳都新太的一道笔试题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:71597次
积分:1368
积分:1368
排名:千里之外
原创:67篇
转载:14篇
评论:20条
(1)(6)(1)(1)(1)(6)(5)(1)(3)(1)(14)(12)(28)bzoj 2109 & 2535 航空管制 题解
【分析】真的是一道贪心好题。开始我以为是一道大水题。建立拓扑图后(没环就是方便!),直接把最外层设定序号为1,第二层为2,bfs下去即可。。。结果发现:飞行序号不能相同。。。于是开始想。
先考虑第一个问题:打印一个合法序列。我开始是这么想的:
观察每个飞机的最晚飞行序号Ki,因为必定有解,所以我们可以让它的序号就是Ki。然后用它的时间去更新前面的时间(图可以反向建立)。应该可以维护一个大根堆,每次挑出最大的一个进行处理。
【简易代码】
memset(T,0x7f,sizeof(T));
for (i=1;i<=n;i++)
if (!num[i]) T[i]=k[i],q.push(make_pair(k[i],i));
while (!q.empty())
temp=q.top();q.pop();
for (i=end[P];i;i=a[i].next)
if (T[P]-1<T[go]) T[go]=T[P]-1,q.push(make_pair(T[go],go));
sort(id+1,id+n+1,cmp);
for (i=1;i<=n;i++)
if (i<n) printf("%d ",id[i]);else printf("%d\n",id[i]);
考虑第二个问题:求出每个飞机最早的起飞序列。好像嘛,有点~~
我是这么想的:每次枚举一架飞机i,先找到所有在它之前的飞机(以下的dfs进行了一遍flood—fill)
显然这些是一定在前面的。然后我再去找剩余的飞机——统计最晚时间ki的个数。然后枚举可行的时间点j并判断是否可行(二分也可以,不过反正已经O(N)了)。
【简易代码】
for (now=1;now<=n;now++)
memset(T,0,sizeof(T));
memset(deep,0,sizeof(deep));
ans=sum=0;
for (i=1;i<=n;i++)
if (T[i]&&i!=now) ans++;else if (i!=now) deep[k[i]]++;
//for (i=1;i<=k[now];i++) sum+=deep[i];
for (i=1;i<=k[now];i++)
if (ans+sum<i)
sum+=deep[i];
printf("%d ",i);
【思考】啦啦啦~~~可惜,以上的想法都是错的。。。。
第二个有点想通了,因为ki的限制,有些飞机的最晚时间可能的确大于j,但是他们必须立刻起飞,否则就没有时间了。我跑出来的解和标准数据相差的不是很大,可以当骗分用。
【正解】膜拜了VLK的题解——可以把所有的边反向,ki与N取反。这样,最晚时间变成了最早时间,也就是说,枚举到每个点的时候,都可以尽可能的拖晚时间。
【AC代码】
#define N 2005
struct arr{int go,}a[20005];
int end[N],ord[N],T[N],k[N],dis[N],num[N],id[N],Q[N];
int P,n,m,i,x,y,now,cnt,go,ans,
inline void add(int u,int v)
a[++cnt].go=v;a[cnt].next=end[u];end[u]=
inline int work(int x)
memcpy(dis,num,sizeof(num));
int h=0,t=0,v,p,i;
for (i=p=1;i<=n;i++)
for (;p<=n&&k[v=ord[p]]<i;p++)
if (!dis[v]&&v!=x) Q[++t]=v;
for (int j=end[v];j;j=a[j].next)
int go=a[j].dis[go]--;
if (!dis[go]&&go!=x&&k[go]<i) Q[++t]=
inline bool cmp(int a,int b)
return T[a]<T[b];
inline bool cmp2(int a,int b)
return k[a]<k[b];
int main()
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
scanf("%d",&k[i]),k[i]=n-k[i],ord[i]=i;
for (i=1;i1) printf(" ");else printf("\n");
for (i=1;i<=n;i++)
printf("%d ",n-work(i));
【总结】一道NOI的好题,有时间&#20540;得再次回顾!
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 qq大神网络 的文章

 

随机推荐