362087055

单链表逆转
List Reverse( List L )
{
List p1=NULL,p2=NULL;
while (L)
{
p2=L->Next;
L->Next=p1;
p1=L;
L=p2;
}
return p1;
}

顺序表操作集
List MakeEmpty()
{
List p;
p=(List)malloc(sizeof(struct LNode));
p->Last=-1;
return p;
}
Position Find(List L, ElementType X)
{
int i;
for(i=0; i<=L->Last;i++)
{
if(XL->Data[i])
{
return i;
}
}
return ERROR;
}
bool Insert( List L, ElementType X, Position P )
{
if(L->Last
MAXSIZE-1)
{
printf(“FULL”);
return false;
}
if(P<0||P>L->Last+1)
{
printf(“ILLEGAL POSITION”);
return false;
}
int i;
for(i=L->Last+1;i>P;i–)
{
L->Data[i]=L->Data[i-1];
}
L->Data[i]=X;
L->Last++;
return true;
}
bool Delete( List L, Position P )
{
int i;
if(P<0||P>L->Last)
{
printf(“POSITION %d EMPTY”,P);
return false;
}
for(i = P; i < L->Last; i++)
{
L->Data[i]=L->Data[i+1];
}
L->Last–;
return true;
}

递增的整数序列链表的插入
List Insert( List L, ElementType X )
{
List p = (List)malloc(sizeof(struct Node));
p->Data = X;
List n = L;
while(n->Next!=NULL&&n->Next->Data < X)
{
n = n->Next;
}
p->Next = n->Next;
n->Next = p;
return L;
}

顺序表的查找操作
int LocateElem(SqList L,ElemType e)
{
int i,cnt=0;
for(i=0;i<L.length;i++)
{
if(L.elem[i] == e)
return i+1;
}
return 0;
}

求链表的倒数第m个元素
ElementType Find( List L, int m )
{
List p1, p2;
p1 = L->Next;
p2 = L->Next;
int n = m;
while(n–)
{
if(!p2)
return ERROR;
p2 = p2->Next;
}
while(p2)
{
p2 = p2->Next;
p1 = p1->Next;
}
return p1->Data;
}

求二叉树高度
int GetHeight(BinTree BT)
{
int L,R;
if (!BT)
return 0;
else
{
L=GetHeight(BT->Left);
R=GetHeight(BT->Right);
if(R>L)
return R+1;
else
return L+1;
}
}

二叉树的遍历
void InorderTraversal( BinTree BT )
{
if(BT)
{
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
}
void PreorderTraversal( BinTree BT )
{
if(BT)
{
printf(" %c",BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
}
void PostorderTraversal( BinTree BT )
{
if(BT)
{
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
}
void LevelorderTraversal( BinTree BT )
{
if(!BT)
return;
int i=0,j=0;
BinTree t[100];
t[j++]=BT;
while(i<j)
{
printf(" %c",t[i]->Data);
if(t[i]->Left)
t[j++]=t[i]->Left;
if(t[i]->Right)
t[j++]=t[i]->Right;
i++;
}
}

多项式求和
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
double a,x,s=0;
scanf("%d %lf",&n,&x);
for(i=n;i>=0;i–)
{
scanf("%lf",&a);
s+=a*pow(x,i);
}
printf("%.3lf",s);
return 0;
}

最大子列和问题
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,i,j,a[100000],max=0,sum;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(max<a[i])
max=a[i];
}
for(i=0;i<=n-2;i++)
{
sum=0;
for(j=i;j<=n-1;j++)
{
sum=sum+a[j];
if(sum>max)
max=sum;
}
}
printf("%d\n",max);
return 0;
}

两个有序序列的中位数
#include<stdio.h>
#define N 100005
int a[N],b[N];
int main(){
int n,i,j,k,t;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
for(k=0,i=0,j=0;k<n;k++){
if(a[i]<b[j])t=a[i++];
else t=b[j++];
}
printf("%d",t);
return 0;
}

数组循环左移
#include <stdio.h>
int main()
{
int n,m,a[110];
int i;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
m%=n;
if(nm)
{
for(i=0;i<n;i++)
{
if(i
0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
}
else
{
for(i=m;i<n;i++)
{
if(i==m)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
for(i=0;i<m;i++)
printf(" %d",a[i]);
}
}

数列求和-加强版
#include<stdio.h>
#include<string.h>
int main()
{
int a,n;
scanf("%d%d",&a,&n);
char num[100000];
int i,jw=0;
if(n==0) {
printf(“0”);
return 0;
}
for(i=1;i<=n;i++)
{
num[i]=(a*(n+1-i)+jw)%10+‘0’;
jw=((a*(n+1-i)+jw)-(a*(n+1-i)+jw)%10)/10;
}
if(jw>0) {printf("%d",jw);}
for(i=n;i>=1;i–)
printf("%c",num[i]);
return 0;
}

一元多项式求导
#include<stdio.h>
#include<math.h>
int main()
{
int s[10000],t[10000],i=0,j,a,b=1,con=0;
while(scanf("%d %d",&a,&b)!=EOF)
{
s[i]=a*b;
t[i]=b-1;
i++;
}
for(j=0;j<i;j++)
{
if(t[j]!=-1)
{
if(con)
printf(" %d %d",s[j],t[j]);
else
{
printf("%d %d",s[j],t[j]);
con++;
}
}
}
if(!con)
printf(“0 0”);
return 0;
}

顺序表的建立及遍历
#include<stdio.h>
int main()
{
int i,n,m;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
if(i==n-1)
printf("%d",m);
else
printf("%d ",m);
}
return 0;
}

最长连续递增子序列
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,m,n,max=0,k;
scanf("%d",&n);
int s[n];
for(i=0;i<n;i++)
scanf("%d",&s[i]);
for(i=0;i<n;i++)
{
int t=1;
for(j=i+1;j<n;j++)
{
if(s[j]>s[j-1])
t++;
else
break;
}
if(t>max)
{
max=t;
k=i;
}
}
printf("%d",s[k]);
for(j=k+1;j<max+k;j++)
{
printf(" %d",s[j]);
}
return 0;
}

堆栈操作合法性
#include<stdio.h>
#include<math.h>
char c[105];
int main()
{
int i,j,n,m,k;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
int ts=0,r=0;
scanf("%s",c);
for(j=0;c[j];j++)
{
if(c[j]‘S’)
r++;
else if(c[j]
‘X’)
{
if(!r)
{
ts=1;
break;
}
r–;
}
if(r>m)
{
ts=1;
break;
}
}
if(r||ts)
printf(“NO\n”);
else
printf(“YES\n”);
}
return 0;
}

银行业务队列简单模拟
#include<stdio.h>
int A[1005],B[1005];
int main()
{
int i,j=0,n,m,k=0,t=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
if(m%2)
A[j++]=m;
else
B[k++]=m;
}
int j1=0,k1=0;
while(j1<j||k1<k)
{
if(j1<j)
{
if(t)
printf(" %d",A[j1++]);
else
{
printf("%d",A[j1++]);
t++;
}
}
if(j1<j)
printf(" %d",A[j1++]);
if(k1<k)
{
if(t)
printf(" %d",B[k1++]);
else
{
printf("%d",B[k1++]);
t++;
}
}
}
return 0;
}

求解迷宫从入口到出口的路径
#include<stdio.h>
typedef struct {
int x,y;
}TT;
TT st[1000];
int s[11][11],t[11][11],k=0,n;
int tong(int x,int y);
int main(){
int i,m,j;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&s[i][j]);
}
}
if(tong(1,1)){
for(i=k-1;i>=0;i–){
printf("(%d,%d)",st[i].x,st[i].y);
}
}
else printf(“NO”);
return 0;
}
int tong(int x,int y){
if(xn-2&&yn-2) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
if(s[x][y]||t[x][y]) return 0;
t[x][y]=1;
if(tong(x,y+1)){
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x+1,y)){
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x,y-1)){
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x-1,y)){
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else{
s[x][y]=1;
return 0;
}
}

迷宫寻路
#include<stdio.h>
typedef struct {
int x,y;
} TT;
TT st[1000];
int s[11][11],t[11][11],k=0,n,m;
int tong(int x,int y);
int main() {
int i,j;
while(1) {
scanf("%d %d",&n,&m);
if(m==-1) return 0;
for(i=1; i<=n; i++) {
for(j=1; j<=m; j++) {
scanf("%d",&s[i][j]);
}
}
if(tong(1,1)) {
for(i=k-1; i>=0; i–) {
printf("%d,%d\n",st[i].x,st[i].y);
}
}
else printf(“NO FOUND”);
printf("\n");
}
}
int tong(int x,int y) {
if(xn&&ym) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
if(s[x][y]||t[x][y]||!x||!y||x>n||y>m) return 0;
t[x][y]=1;
if(tong(x+1,y)) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x,y+1)) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x-1,y)) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else if(tong(x,y-1)) {
st[k].x=x;
st[k].y=y;
k++;
return 1;
}
else {
s[x][y]=1;
return 0;
}
}

二分查找
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,m,s[1005],cot=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&s[i]);
int l=0,r=n-1,z;
scanf("%d",&m);
while(l<=r)
{
cot++;
z=(l+r)/2;
if(s[z]>m) r=z-1;
else if(s[z]<m) l=z+1;
else break;
}
if(l>r)
printf("-1\n%d",cot);
else
printf("%d\n%d",z,cot);
return 0;
}

顺序存储的二叉树的最近的公共祖先问题
#include<stdio.h>
#include<string.h>
#define N 1005
int s[N];
int find(int x,int y){
while(x&&y){
if(x>y)x/=2;
else if(x==y)return x;
else y/=2;
}
return 0;
}
int main(){
int n,i,x,y,t;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&s[i]);
}
scanf("%d %d",&x,&y);
if(s[x]==0)printf(“ERROR: T[%d] is NULL”,x);
else if(s[y]==0)printf(“ERROR: T[%d] is NULL”,y);
else{
t=find(x,y);
printf("%d %d",t,s[t]);
}
return 0;
}

列出叶结点
#include<stdio.h>
#define N 15
struct node{
int l,r;
}s[N];
void bfs(int t){
int q[N*N],f=0,r=0,it=0;
q[r++]=t;
while(f<r){
if(s[q[f]].l!=-1||s[q[f]].r!=-1){
if(s[q[f]].l!=-1)q[r++]=s[q[f]].l;
if(s[q[f]].r!=-1)q[r++]=s[q[f]].r;
}
else{
if(it++)printf(" “);
printf(”%d",q[f]);
}
f++;
}
}
int main(){
int n,i,x,y,t=0;
char l,r;
scanf("%d",&n);
for(i=0;i<n;i++){
getchar();
s[i].l=s[i].r=-1;
t+=i;
scanf("%c %c",&l,&r);
if(l!=’-’){
s[i].l=l-‘0’;
t-=s[i].l;
}
if(r!=’-’){
s[i].r=r-‘0’;
t-=s[i].r;
}
}
bfs(t);
return 0;
}

修理牧场
#include<stdio.h>
#define N 10005
int q[N],idx=0;
void push(int x){
int i;
for(i=++idx;x<q[i/2];i=i/2){
q[i]=q[i/2];
}
q[i]=x;
}
int pop(){
int i,mx=q[1],chi;
int x=q[idx–];
for(i=1;i2<=idx;i=chi){
chi=i
2;
if(chi<idx&&q[chi]>q[chi+1])chi++;
if(x<q[chi])break;
else q[i]=q[chi];
}
q[i]=x;
return mx;
}
int main(){
int n,i,x,y,s=0;
q[0]=-99999;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
push(x);
}
while(idx>=2){
x=pop(),y=pop();
x=x+y;
push(x);
s=s+x;
}
printf("%d",s);
return 0;
}

哈夫曼树
#include<stdio.h>
#define N 1005
int q[N],idx=0;
void push(int x){
int i;
for(i=++idx;x<q[i/2];i=i/2){
q[i]=q[i/2];
}
q[i]=x;
}
int pop(){
int i,mx=q[1],chi;
int x=q[idx–];
for(i=1;i2<=idx;i=chi){
chi=i
2;
if(chi+1<=idx&&q[chi]>q[chi+1])chi++;
//q[i]=q[chi]; //最后一个不一定是最大的
if(x<q[chi])break;
else q[i]=q[chi];
}
q[i]=x;
return mx;
}
int main(){
int n,i,x,y;
long long s=0;
q[0]=-99999;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
push(x);
}
while(idx>=2){
x=pop(),y=pop();
x=x+y;
push(x);
s=s+x;
}
printf("%lld",s);
return 0;
}

树的遍历
#include<stdio.h>
#include<stdlib.h>
#define N 35
typedef struct node{
int data;
struct node *lchild,*rchild;
}Tree;
Tree *create(int post[],int in[],int n){
if(n){
Tree *t;
t=(Tree *)malloc(sizeof(Tree));
t->data=post[n-1];
int i=0;
while(post[n-1]!=in[i])i++;
t->lchild=create(post,in,i);
t->rchild=create(post+i,in+i+1,n-i-1);
return t;
}
else return NULL;
}
void sq(Tree *t){
if(t){
Tree *q[N];
int f=0,r=0;
q[r++]=t;
while(f<r){
t=q[f];
if(f)printf(" “);
printf(”%d",t->data);
if(t->lchild)q[r++]=t->lchild;
if(t->rchild)q[r++]=t->rchild;
f++;
}
}
}
int main(){
int n,post[N],in[N],i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&post[i]);
}
for(i=0;i<n;i++){
scanf("%d",&in[i]);
}
Tree *t=create(post,in,n);
sq(t);
return 0;
}

求二叉树的叶子结点个数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 55
typedef struct node{
char data;
struct node *lchild,*rchild;
}Tree;
char s[N];
int n,cnt,i;
Tree *creater(){
if(s[i]’#’){
i++;
return NULL;
}
Tree *t=(Tree *)malloc(sizeof(Tree));
t->data=s[i++];
t->lchild=creater();
t->rchild=creater();
if(t->lchild
NULL&&t->rchild==NULL){
cnt++;
}
return t;
}
void inorder(Tree *t){
if(t){
inorder(t->lchild);
printf("%c",t->data);
inorder(t->rchild);
}
}
int main(){
scanf("%s",s);
n=strlen(s+1);
Tree *t=creater();
inorder(t);
printf("\n%d",cnt);
return 0;
}

推断学生所属学校的人数
#include<stdio.h>
#include<string.h>
#define N 200005
#define _max(a,b) (a>b?a:b)
struct node{
char data[33];
int next;
}dt[N];
char s[N][33];
int hs[N],f[N],cnt[N],idx,p=200003;
int hash(char str[]){
int i,a=0,t=1;
for(i=0;str[i]!=’\0’;i++){
a=(a*10+(str[i]-‘0’))%p;
}
return a%p;
}
int find(char str[]){
for(int i=hs[hash(str)];i!=-1;i=dt[i].next){
if(strcmp(dt[i].data,str)0){
return i;
}
}
return -1;
}
void insert(char str[]){
int it=hash(str),id=find(str);
if(id
-1){
strcpy(s[idx],str);
strcpy(dt[idx].data,str);
dt[idx].next=hs[it],hs[it]=idx++;
}
}
int Find(int x){
if(f[x]==x)return x;
else return f[x]=Find(f[x]);
}
int main(){
int i,n,m,id1,id2,num=0,mcnt=0;
char x[33],y[33];
for(i=0;i<N;i++){
hs[i]=-1;
f[i]=i;
}
scanf("%d",&n);
for(i=0;i<n;i++){
getchar();
scanf("%s",&s[i]);
insert(s[i]);
}
scanf("%d",&m);
for(i=0;i<m;i++){
getchar();
scanf("%s %s",&x,&y);
id1=find(x);id2=find(y);
if(Find(id1)!=Find(id2)){
f[Find(id2)]=f[Find(id1)];
}
}
for(i=0;i<idx;i++){
id1=find(dt[i].data);
cnt[Find(id1)]++;
}
for(i=0;i<N;i++){
if(cnt[i]){
num++;
mcnt=_max(mcnt,cnt[i]);
}
}
printf("%d %d",num,mcnt);
return 0;
}

部落
#include<stdio.h>
#define N 10005
int f[N],vis[N];
int find(int x){
if(xf[x])return x;
else return f[x]=find(f[x]);
return x
f[x]?x:f[x]=find(f[x]);
}
int main(){
int x,y,i,j,n,m,num=0,cnt=0;
for(i=0;i<N;i++){
f[i]=i;
}
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&m);
scanf("%d",&x);
vis[x]=1;
for(j=1;j<m;j++){
scanf("%d",&y);
vis[y]=1;
if(find(x)!=find(y)){
f[find(y)]=find(x);
}
}
}
for(i=1;i<N;i++){
if(vis[i]){
num++;
if(find(i)==i){
cnt++;
}
}
}
printf("%d %d\n",num,cnt);
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d %d",&x,&y);
if(find(x)==find(y))puts(“Y”);
else puts(“N”);
}
return 0;
}

树种统计
#include
#include
#include
#include
using namespace std;
map<string,int> mp;
int main(){
int n,i;
cin>>n;
string str;
getchar();
for(i=0;i<n;i++){
getline(cin,str);
mp[str]++;
}
map<string,int>::iterator it=mp.begin();
for(;it!=mp.end();it++){
cout<first<<" “;
printf(”%.4f%%\n",it->second/(double)(n)*100);
}
}
二叉树的遍历
#include<stdio.h>
#define N 15
struct node{
int l,r;
}s[N];
int f=0;
void pre(int it){
if(it){
printf("%d “,it);
pre(s[it].l);
pre(s[it].r);
}
}
int main(){
int n,i,t=0;
int l,r;
scanf(”%d",&n);
for(i=1;i<=n;i++){
s[i].l=s[i].r=0;
t+=i;
scanf("%d %d",&s[i].l,&s[i].r);
t-=s[i].l;
t-=s[i].r;
}
pre(t);
return 0;
}

列出所有祖先结点
#include<stdio.h>
#define N 15
int t,pre[N];
void dfs(int it){
if(pre[it]==-1){
printf("%d",it);
return;
}
else{
dfs(pre[it]);
printf(" %d",it);
}
}
int main(){
int n,i;
char l,r;
for(i=0;i<N;i++){
pre[i]=-1;
}
scanf("%d",&n);
for(i=0;i<n;i++){
getchar();
scanf("%c %c",&l,&r);
pre[l-‘0’]=i;
pre[r-‘0’]=i;
}
scanf("%d",&t);
if(pre[t]!=-1){
dfs(pre[t]);
}
return 0;
}

根据后序和中序遍历输出先序遍历
#include<stdio.h>
#include<stdlib.h>
#define N 35
typedef struct node{
int data;
struct node *lchild,*rchild;
}Tree;
Tree *create(int post[],int in[],int n){
if(n){
Tree *t;
t=(Tree *)malloc(sizeof(Tree));
t->data=post[n-1];
int i=0;
while(post[n-1]!=in[i])i++;
t->lchild=create(post,in,i);
t->rchild=create(post+i,in+i+1,n-i-1);
return t;
}
else return NULL;
}
void pre(Tree *t){
if(t){
printf(" %d",t->data);
pre(t->lchild);
pre(t->rchild);
}
}
int main(){
int n,post[N],in[N],i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&post[i]);
}
for(i=0;i<n;i++){
scanf("%d",&in[i]);
}
Tree *t=create(post,in,n);
printf(“Preorder:”);
pre(t);
return 0;
}

邻接矩阵表示法创建无向图
#include<stdio.h>
#include<stdlib.h>
#define N 15
int g[130][130];
char s[N],x,y;
int main(){
int n,m,i,j,t;
scanf("%d %d",&n,&m);
scanf("%s",&s);
for(i=0;i<m;i++){
getchar();
scanf("%c%c",&x,&y);
g[x][y]=g[y][x]=1;
}
for(i=0;i<n;i++){
t=0;
for(j=0;j<n;j++){
t+=g[s[i]][s[j]];
}
if(i)printf(" “);
printf(”%d",t);
}
return 0;
}

旅游规划
#include<stdio.h>
#include<string.h>
#define N 505
#define inf 1e9
#define swap(a,b) {struct pit t=a;a=b;b=t;}
struct pit{
int len,num;
}d[N],g[N][N];
int s[N],vis[N];
void dijstra(int n,int bg,int ed){
int i,mw,k;
d[bg].len=0;
d[bg].num=0;
while(1){
mw=inf,k=-1;
for(i=0;i<n;i++){
if(!vis[i]&&mw>d[i].len){
mw=d[i].len,k=i;
}
}
if(k==-1)break;
vis[k]=1;
for(i=0;i<n;i++){
if(!vis[i]){
if(d[i].len>d[k].len+g[k][i].len){
d[i].len=d[k].len+g[k][i].len;
d[i].num=d[k].num+g[k][i].num;
}
else if(d[i].len==d[k].len+g[k][i].len){
if(d[i].num>d[k].num+g[k][i].num){
d[i].num=d[k].num+g[k][i].num;
}
}
}
}
}
printf("%d %d\n",d[ed].len,d[ed].num);
}
int main(){
int i,j,n,m,x,y,w,bg,ed;
scanf("%d %d %d %d",&n,&m,&bg,&ed);
for(i=0;i<n;i++){
d[i].len=d[i].num=inf;
for(j=0;j<n;j++){
g[i][j].len=g[i][j].num=inf;
}
}
for(i=0;i<m;i++){
scanf("%d %d",&x,&y);
scanf("%d %d",&g[x][y].len,&g[x][y].num);
g[y][x]=g[x][y];
}
dijstra(n,bg,ed);
return 0;
}

城市间紧急救援
#include<stdio.h>
#include<string.h>
#define N 505
#define inf 1e9
#define swap(a,b) {struct pit t=a;a=b;b=t;}
struct pit{
int len,num,cnt;
}d[N];
int s[N],g[N][N],vis[N],pre[N];
void out(int it){
if(pre[it]-1){
printf("%d",it);
return;
}
else{
out(pre[it]);
printf(" %d",it);
}
}
void dijstra(int n,int bg,int ed){
int i,mw,k;
d[bg].len=0;
d[bg].num=s[bg];
d[bg].cnt=1;
pre[bg]=-1;
while(1){
mw=inf,k=-1;
for(i=0;i<n;i++){
if(!vis[i]&&mw>d[i].len){
mw=d[i].len,k=i;
}
}
if(k
-1)break;
vis[k]=1;
for(i=0;i<n;i++){
if(!vis[i]){
if(d[i].len>d[k].len+g[k][i]){
d[i].len=d[k].len+g[k][i];
d[i].num=d[k].num+s[i];
d[i].cnt=d[k].cnt;
pre[i]=k;
}
else if(d[i].len==d[k].len+g[k][i]){
d[i].cnt=d[i].cnt+d[k].cnt;
if(d[i].num<d[k].num+s[i]){
d[i].len=d[k].len+g[k][i];
d[i].num=d[k].num+s[i];
pre[i]=k;
}
}
}
}
}
printf("%d %d\n",d[ed].cnt,d[ed].num);
out(ed);
}
int main(){
int i,j,n,m,x,y,w,bg,ed,f;
scanf("%d %d %d %d",&n,&m,&bg,&ed);
for(i=0;i<n;i++){
scanf("%d",&s[i]);
d[i].len=inf;
d[i].num=d[i].cnt=0;
for(j=0;j<n;j++){
g[i][j]=inf;
}
}
for(i=0;i<m;i++){
scanf("%d %d %d",&x,&y,&w);
g[x][y]=g[y][x]=w;
}
dijstra(n,bg,ed);
return 0;
}

公路村村通
#include<stdio.h>
#include<string.h>
#define N 1005
#define swap(a,b) {struct pit t=a;a=b;b=t;}
struct pit{
int x,y,w;
}s[3*N];
int f[N];
void quick_sort(int l,int r){
int i=l,j=r,mid=(l+r)/2;
struct pit t,x=s[mid];
while(i<=j){
while(x.w>s[i].w)i++;
while(x.w<s[j].w)j–;
if(i<=j){
swap(s[i],s[j]);
i++,j–;
}
}
if(l<j)quick_sort(l,j);
if(i<r)quick_sort(i,r);
}
int find(int x){
if(xf[x])return x;
else return f[x]=find(f[x]);
// return x
f[x]?x:f[x]=find(f[x]);
}
void kruskal(int n,int m){
int i,k,num=0;
for(i=0,k=1;k<n&&i<m;i++){
if(find(s[i].x)!=find(s[i].y)){
num=num+s[i].w;
f[find(s[i].y)]=find(s[i].x);
k++;
}
}
if(k>=n)printf("%d",num);
else puts("-1");
}
int main(){
int i,n,m;
scanf("%d %d",&n,&m);
for(i=0;i<=n;i++){
f[i]=i;
}
for(i=0;i<m;i++){
scanf("%d %d %d",&s[i].x,&s[i].y,&s[i].w);
}
quick_sort(0,m-1);
kruskal(n,m);
return 0;
}

电话聊天狂人
#include<stdio.h>
#define N 500000
typedef long long ll;
struct count{
ll cnt;
ll data;
}dt[N];
ll p,cnt,ans,nt[N],idx=0;
int is(ll x){
ll i;
for(i=2;i*i<=x;i++){
if(x%i0)return 0;
}
return 1;
}
ll key(ll x){
return x/10000%p;
}
ll find(ll x){
for(ll i=key(x);i!=-1;i=nt[i]){
if(dt[i].data
x){
dt[i].cnt++;
if(cnt<dt[i].cnt){
cnt=dt[i].cnt;
ans=x;
}
else if(cntdt[i].cnt&&ans>x){
ans=x;
}
return 1;
}
}
return 0;
}
void insert(ll x){
if(!find(x)){
ll id=key(x);
dt[idx].data=x,dt[idx].cnt++;
if(cnt<dt[idx].cnt){
cnt=dt[idx].cnt;
ans=x;
}
else if(cnt
dt[idx].cnt&&ans>x){
ans=x;
}
nt[idx]=nt[id],nt[id]=idx++;
}
}
int main(){
ll x,y,n,i,t=0;
for(i=N-1;;i–){
if(is(i)){
p=i;
break;
}
}
for(i=0;i<N;i++){
nt[i]=-1;
dt[i].cnt=0;
}
scanf("%lld",&n);
for(i=0;i<n;i++){
scanf("%lld %lld",&x,&y);
insert(x);
insert(y);
}
for(i=0;i<N;i++){
if(dt[i].cnt==cnt){
t++;
}
}
printf("%lld %lld",ans,cnt);
if(t>1)printf(" %lld",t);
return 0;
}

航空公司VIP客户查询
#include<stdio.h>
#include<string.h>
#define N 500010
typedef long long ll;
struct count{
ll num;
char data[20];
}dt[N];
ll p,nt[N],idx=0;
ll is(ll x){
for(ll i=2;ii<=x;i++){
if(x%i==0)return 0;
}
return 1;
}
ll key(char x[]){
ll t=0,i;
for(ll i=7;i<13;i++){
t=t
10+(x[i]-‘0’);
}
return t%p;
}
ll find(char x[]){
for(ll i=key(x);i!=-1;i=nt[i]){
if(strcmp(dt[i].data,x)0){
return i;
}
}
return -1;
}
void insert(char x[],ll num){
ll f=find(x);
if(f
-1){
ll id=key(x);
strcpy(dt[idx].data,x),dt[idx].num+=num;
nt[idx]=nt[id],nt[id]=idx++;
}
else{
dt[f].num+=num;
}
}
int main(){
ll num,n,k,i,t;
char x[20];
for(i=N-1;;i–){
if(is(i)){
p=i;
break;
}
}
for(i=0;i<N;i++){
nt[i]=-1;
dt[i].num=0;
}
scanf("%lld %lld",&n,&k);
for(i=0;i<n;i++){
getchar();
scanf("%s %lld",&x,&num);
if(num<k)num=k;
insert(x,num);
}
scanf("%lld",&n);
for(i=0;i<n;i++){
getchar();
scanf("%s",&x);
t=find(x);
if(t==-1)puts(“No Info”);
else printf("%lld\n",dt[t].num);
}
return 0;
}

QQ帐户的申请与登陆
#include<stdio.h>
#include<string.h>
#define N 100055
typedef long long ll;
struct node{
ll account;
char password[20];
int next;
}dt[N];
int hs[N],idx,p=100049;
int hash(ll num){
return num/100%p;
}
int find(ll num){
for(int i=hs[hash(num)];i!=-1;i=dt[i].next){
if(dt[i].accountnum){
return i;
}
}
return -1;
}
void insert(ll num,char str[]){
int id=hash(num),it=find(num);
if(it
-1){
dt[idx].account=num,strcpy(dt[idx].password,str);
dt[idx].next=hs[id],hs[id]=idx++;
puts(“New: OK”);
}
else puts(“ERROR: Exist”);
}
int main(){
int n,i,id;
ll num;
char op,str[20];
for(i=0;i<N;i++){
hs[i]=-1;
}
scanf("%d",&n);
for(i=0;i<n;i++){
getchar();
scanf("%c %lld %s",&op,&num,&str);
if(op==‘L’){
id=find(num);
if(id==-1)puts(“ERROR: Not Exist”);
else{
if(strcmp(dt[id].password,str)==0)puts(“Login: OK”);
else puts(“ERROR: Wrong PW”);
}
}
else insert(num,str);
}
return 0;
}

A-B
#include<stdio.h>
#define N 10005
int vis[130];
char a[N],b[N];
int main(){
int n,m,i,j,t;
scanf("%[^\n]",&a);
getchar();
scanf("%[^\n]",&b);
for(i=0;b[i]!=’\0’;i++){
vis[b[i]]++;
}
for(i=0;a[i]!=’\0’;i++){
if(!vis[a[i]]){
printf("%c",a[i]);
}
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于python+pyqt5开发的俄罗斯方块游戏源码+使用说明.zip基于python+pyqt5开发的俄罗斯方块游戏源码+使用说明.zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 功能 播放音乐 暂停游戏 消除方块的音效 窗口自由拖拽 游戏存档 安装和运行 ### 1. 使用`pip` ```shell # csdn下载此项目源码解压重命名为PyQt5-Tetris(不要有中文路径) 进入到项目 cd PyQt5-Tetris # 使用pip安装依赖 pip install -r requirements.txt # 运行 python main.py ``` ### 2. 使用`pipenv` ```shell # csdn下载此项目源码解压重命名为PyQt5-Tetris(不要有中文路径) # 进入到项目 cd PyQt5-Tetris # 使用pipenv安装依赖 pipenv sync # 运行 pipenv run start ``` ### 3. 按键说明 - `A` - 向左移动 - `D`- 向右移动 - `W` - 变形 - `S` - 加速下降 - `P` - 暂停 - `ESC` - 退出程序 ## PyInstaller 打包 ### 1. 使用`pip` ```shell # 安装依赖 pip install -r requirements-dev.txt # 打包,打包成功之后exe文件在dist文件夹下 pyinstaller main.spec ``` ### 2. 使用`pipenv` ```shell # 安装依赖 pipenv install --dev # 打包,打包成功之后exe文件在dist文件夹下 pipenv run build ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值