C++心得&疑问~

    技术2022-05-20  32

    最近学C++已经有点感觉了,但是总体还是没有P那么习惯~

    正常的程序可以写~但是还没有开始学STL库~

    那个东西确实很强大,但是需要背的东西也比较多~

    还有总算是把一些函数过程和他们需要调的头文件对上号了~

    当然问题还有一大堆~

    希望路过的C++大神可以帮我下:

    1、P里面的repeat怎么通过C++实现~

    2、如果在整个过程中要先后读两个文件甚至要同时读两个文件怎么做到

    3、如何实现过程或函数中将某些参数的值带回主程序或递归的上一层

     

    最后贴个比较丑的代码~但是是nocow上c++这题最快的了~

    /* TASK:ariprog LANG:C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std; int n, m, tot=0; bool flag=false; bool exist[125001]; int path[5001][101], list[40001], l[5001]; int main() { freopen("ariprog.in","r",stdin); freopen("ariprog.out","w",stdout); int i, j; scanf("%d%d", &n, &m); memset(exist,0, sizeof(exist)); memset(path, -1, sizeof(path)); for(i=0; i<=m; i++) for(j=i; j<=m; j++) exist[i*i+j*j]=true; for(i=2*m*m; i>=0; i--) if(exist[i]) { list[tot]=i; tot++; } for(i=0; i<tot-1; i++) for(j=i+1; j<tot; j++) { int ln=1, d=list[i]-list[j]; int next=list[i]-d; if(list[i]-(n-1)*d<0) break; while(1) { ln++; if(ln>=n) { path[d][l[d]]=next; l[d]++; } next-=d; if(next<0 || !exist[next]) break; } } for(int k=1; k<5001; k++) if(l[k]>1) for(i=0; i<l[k]; i++) for(j=i; j<l[k]; j++) if(path[k][i]>path[k][j]) swap(path[k][i],path[k][j]); for(i=1; i<5001; i++) for(j=0; j<l[i]; j++) if(path[i][j]!=path[i][j+1]) { flag=true; printf("%d %d/n", path[i][j], i); } if(!flag) printf("NONE/n"); return 0; }  


    最新回复(0)