Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions 13307130285/12.15/1.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

int a[30];
//a[letter-'A']=num
string s[15];
//words
int temp;
//first letter appear -'A'
bool use[10];
//true:has used
//false:not used yet
int number=0;
long long x[15];
int n;
int uuuu=0;

bool check()
{
memset(x,0,sizeof(x));
int sum=0;
for(int k=0;k<n;k++)
if(a[s[k][0]-'A']==0)
return false;
for(int i=0;i<n-1;i++)
sum=(sum+a[s[i][s[i].length()-1]-'A'])%10;
if(sum!=a[s[n-1][s[n-1].length()-1]-'A'])
return false;
for(int i=0;i<n;i++)
for(unsigned int j=0;j<s[i].length();j++)
x[i]=x[i]*10+a[s[i][j]-'A'];
for(int i=1;i<n-1;i++)
x[i]+=x[i-1];
if(x[n-2]==x[n-1])
return true;
return false;
}

void set(int p)
{
if(p==30)
{
if(check()==true)
number++;
return;
}
if(a[p]==-1)
{
set(p+1);
}
else
{
for(int i=0;i<10;i++)
if(use[i]==false )
{
use[i]=true;
a[p]=i;
set(p+1);
use[i]=false;
}
}


}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>s[i];
for(int i=0;i<30;i++)
a[i]=-1;
for(int i=0;i<n;i++)
for(unsigned int j=0;j<s[i].length();j++)
a[s[i][j]-'A']=0;
for(int i=0;i<30;i++)
if(a[i]!=-1)
{
temp=i;
break;
}
set(temp);
cout << number << endl;
return 0;
}
154 changes: 154 additions & 0 deletions 13307130285/12.22/1.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>

using namespace std;

#define MAX 2000

int P,T;
//s=0
bool a1[10005];
//s=P-1
int ans=0;
bool b1[10005];
int p1,p2,l;
struct aaa{
int num;
int dis;
aaa* next;
};
aaa *x[10005];

struct node{
int id;
int w;
friend bool operator <(node a,node b)
{
return a.w > b.w;

}
}d[10005],dd[10005];

//插入边
void add(int a,int b,int c)
{
aaa *address_1=new aaa;
address_1->num=b;
address_1->dis=c;
address_1->next=x[a];
x[a]=address_1;
aaa *address_2=new aaa;
address_2->num=a;
address_2->dis=c;
address_2->next=x[b];
x[b]=address_2;
return;
}
//dijkstra start=0
void dijkstra_1()
{
memset(a1,0,sizeof(a1));
priority_queue<node> q;
for(int i=0;i<10005;i++)
{
d[i].id=i;
d[i].w=MAX;
}
d[0].w=0;
q.push(d[0]);
while(!q.empty())
{
node cd=q.top();
q.pop();
int u=cd.id;
if(a1[u]) continue;
a1[u]=true;
for(aaa* p=x[u];p!=NULL;p=p->next)
{
int v=p->num;
if(!a1[v]&&d[v].w>d[u].w+p->dis)
{
d[v].w=d[u].w+p->dis;
q.push(d[v]);
}
}
}
}


//dijkstra start=P-1
void dijkstra_2()
{
memset(a1,0,sizeof(a1));
priority_queue<node> q;
for(int i=0;i<10005;i++)
{
dd[i].id=i;
dd[i].w=MAX;
}
dd[P-1].w=0;
q.push(dd[P-1]);
while(!q.empty())
{
node cd=q.top();
q.pop();
int u=cd.id;
if(a1[u]) continue;
a1[u]=true;
for(aaa* p=x[u];p!=NULL;p=p->next)
{
int v=p->num;
if(!a1[v]&&dd[v].w>dd[u].w+p->dis)
{
dd[v].w=dd[u].w+p->dis;
q.push(dd[v]);
}
}
}
}
void check_and_print()
{
for(int i=0;i<P;i++)
for(aaa* p=x[i];p!=NULL;p=p->next)
if(p->dis+d[p->num].w+dd[i].w==d[P-1].w)
ans+=p->dis;
cout << ans*2<<endl;

}
int main()
{
for(int i=0;i<10005;i++)
x[i]=NULL;


cin>>P>>T;
while(T--)
{
scanf("%d%d%d",&p1,&p2,&l);
add(p1,p2,l);
}
dijkstra_1();
dijkstra_2();
check_and_print();
return 0;
}
/*
10 15
0 1 580
1 4 90
1 4 90
4 9 250
4 2 510
2 7 600
7 3 200
3 3 380
3 0 150
0 3 100
7 8 500
7 9 620
9 6 510
6 5 145
5 9 160
*/