/*20150131 hanting*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
int edge[3];
cin>>edge[0]>>edge[1]>>edge[2];
sort(edge,edge+3);
cout<<(edge[0]+edge[1]>edge[2] ? "OK":"Wrong!!")<<endl;
}
return 0;
}
2015年1月31日 星期六
[UVA] 11936 - The Lazy Lumberjacks
2015年1月30日 星期五
[UVA] 610 - Street Directions
/*20150131 hanting*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool Find(vector<int> &vec,int i)
{
vector<int>::iterator it=find(vec.begin(),vec.end(),i);
return (it!=vec.end());
}
int DFS(int *visit,vector<int> *node,int vertex,int parent,vector<int> *store)
{
static int time=0;
int mini=time;
visit[vertex]=time++;
for(int i=0;i<node[vertex].size();i++)
{
int temp=mini;
if(visit[ node[vertex][i] ]==-1)
{
store[vertex].push_back(node[vertex][i]);//路徑儲存
temp=DFS(visit,node,node[vertex][i],vertex,store);
if(temp>visit[vertex])//找橋
{
store[ node[vertex][i] ].push_back(vertex);
}
}
else if(node[vertex][i]!=parent)//其他路徑//backedge
{//若已存1 3 不必存3 1
if(!Find(store[ node[vertex][i] ],vertex))store[vertex].push_back(node[vertex][i]);
temp=visit[ node[vertex][i] ];
}
if(temp<mini) mini=temp;
}
return mini;//由backedge能回溯的最小visit
}
int main()
{
int nodeNum,connectNum;
int Times=0;
while(cin>>nodeNum>>connectNum && nodeNum+connectNum)
{
cout<<++Times<<endl<<endl;
vector<int> node[nodeNum+1];
for(int i=0;i<connectNum;i++)
{
int a,b;
cin>>a>>b;
node[a].push_back(b);
node[b].push_back(a);
}
int visit[nodeNum+1];
vector<int> store[nodeNum+1];
fill(visit,visit+nodeNum+1,-1);
for(int i=1;i<=nodeNum;i++)
{
if(visit[i]==-1)
{
DFS(visit,node,i,-1,store);
}
}
for(int i=1;i<=nodeNum;i++)
{
sort(store[i].begin(),store[i].end());
for(int j=0;j<store[i].size();j++)
{
cout<<i<<" "<<store[i][j]<<endl;
}
}
cout<<"#"<<endl;
}
return 0;
}
[UVA] 796 - Critical Links
/*20150131 hanting*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int DFS(vector<int> *vertex,int node,int parent,int *visit,vector<int> *store)
{
static int Count=0;
int mini=Count;
visit[node]=Count++;
for(int i=0;i<vertex[node].size();i++)
{
int temp=mini;
if(visit[ vertex[node][i] ]==-1)/*子節點 沒拜訪過的*/
{
temp=DFS(vertex,vertex[node][i],node,visit,store);
if(temp>visit[node])/*橋*/
{
int x=node;
int y=vertex[node][i];
if(x>y) swap(x,y);
store[x].push_back(y);
}
}
else if(vertex[node][i]!=parent)/*拜訪過 判斷回溯*/
{
temp=visit[ vertex[node][i] ];
}
if(mini>temp) mini=temp;
}
return mini;
}
int main()
{
int N;
while(cin>>N)
{
vector<int> vertex[N];
vector<int> store[N];
int visit[N];
fill(visit,visit+N,-1);
for(int i=0;i<N;i++)
{
int server,connectNum,connect;
char c;
cin>>server>>c>>connectNum>>c;
for(int j=0;j<connectNum;j++)
{
cin>>connect;
vertex[server].push_back(connect);
}
}
for(int i=0;i<N;i++)
{
if(visit[i]==-1)
{
DFS(vertex,i,-1,visit,store);
}
}
int count=0;
for(int i=0;i<N;i++)
{
count+=store[i].size();
}
cout<<count<<" critical links"<<endl;
for(int i=0;i<N;i++)
{
sort(store[i].begin(),store[i].end());
for(int j=0;j<store[i].size();j++)
{
cout<<i<<" - "<<store[i][j]<<endl;
}
}
cout<<endl;
}
return 0;
}
2014年11月21日 星期五
[UVA] 516 - Prime Land
/*20141122 hanting*/
#include <iostream>
#include <sstream>
#include <cmath>
using namespace std;
int main()
{
string s;
while(getline(cin,s) && s!="0")
{
stringstream sin(s);
int sum=1;
int _pow;
int num;
while(sin>>num>>_pow) sum*=pow(num,_pow);
sum--;
bool Num[50000]={0};
int prime[10000];
int x=0;
for(int i=2;i<50000;i++)
{
if(Num[i]==0)
{
prime[x++]=i;
for(int j=i*2;j<50000;j+=i)
{
Num[j]=1;
}
}
}
int ans[1000];
int q=0;
for(int i=0;sum!=1;i++)
{
while(sum%prime[i]==0)
{
ans[q++]=prime[i];
sum/=prime[i];
}
}
for(int i=q-1;i>=0;i--)
{
int pow=1;
if(i!=q-1) cout<<" ";
cout<<ans[i];
while(i-1>=0 && ans[i-1]==ans[i])
{
pow++;
i--;
}
cout<<" "<<pow;
}
cout<<endl;
}
}
2014年11月11日 星期二
[UVA] 11879 - Multiple of 17
/*20141111 hanting*/
#include <iostream>
using namespace std;
int seventeen[105]={0};
inline bool compare(int *seventeen,int *num)
{
for(int i=104;i>=0;i--)
{
if(num[i]>seventeen[i]) return 0;
else if(num[i]<seventeen[i]) return 1;
}
return 1;
}
bool IsSeventeen(int* num,int p)
{
if(compare(seventeen,num))
{
if((num[0]==7 && num[1]==1)||p==0) return 1;
else return 0;
}
else
{
int d=num[0];
d*=5;
for(int i=0;i<p-1;i++)//shift ( remove the last number )
{
num[i]=num[i+1];
}
num[p-1]=0;
p--;
int sub_5d[105]={d};
for(int i=1;i<2;i++)//carry
{
sub_5d[i]+=sub_5d[i-1]/10;
sub_5d[i-1]%=10;
}
/*num-5d*/
int siz=max(p,2);
for(int i=0;i<siz;i++)
{
num[i]-=sub_5d[i];
}
for(int i=0;i<siz;i++)
{
if(num[i]<0)
{
num[i]+=10;
num[i+1]--;
}
}
if(num[siz]<0)//if( num < 5d )
{
num[siz]=0;
for(int i=0;i<siz;i++)//complement
{
num[i]=9-num[i];
}
num[0]++;
for(int i=1;i<siz;i++)//carry
{
num[i]+=num[i-1]/10;
num[i-1]%=10;
}
}
for(int i=104;i>=0;i--)
{
if(num[i]!=0)
{
p=i+1;
break;
}
else if(i==0) p=0;
}
return IsSeventeen(num,p);
}
}
int main()
{
seventeen[0]=7;
seventeen[1]=1;
string s;
while(cin>>s && s!="0")
{
int num[105]={0};
int p=0;
for(int i=s.size()-1;i>=0;i--)
{
num[p++]=s[i]-48;
}
cout<<IsSeventeen(num,p)<<endl;
}
return 0;
}
2014年11月8日 星期六
[UVA] 10140 - Prime Distance
/*20141108 hanting*/
#include <iostream>
#include <cmath>
#include <sstream>
using namespace std;
bool Num[100000];
int prime[10000];
int x=0;
bool isprime(unsigned int num)
{
if(num<100000) return Num[num]==0 ? 1:0;
int s=sqrt(num);//另存s//在for迴圈會慢
for(int i=0;prime[i]<=s;i++)
{
if(num%prime[i]==0) return 0;
}
return 1;
}
int main()
{
for(unsigned int i=2;i<100000;i++) Num[i]=0;
Num[1]=1;
for(unsigned int i=2;i<100000;i++)
{
if(!Num[i])
{
prime[x++]=i;
for(unsigned int j=i*2;j<100000;j+=i)
{
Num[j]=1;
}
}
}
unsigned int L,U;
string s;
while(getline(cin,s))
{
stringstream sin(s);
sin>>L>>U;
unsigned int l,u;
for(l=L;!isprime(l);l++);
L=l;
for(u=U;!isprime(u);u--);
U=u;
if(L>=U) cout<<"There are no adjacent primes."<<endl;
else
{
int clos1=L,clos2=L,dis1=L,dis2=L;
int temp1=L,temp2=L;
int mini=U-L+1,maxi=0;
unsigned int i;
if(L==2) i=L+1;
else i=L+2;
for( i;i<=U;i+=2)
{//質數一定是6n+1或6n-1,所以+2+4+2+4判斷增加效率
if(isprime(i))
{
temp1=temp2;
temp2=i;
if(temp2-temp1<mini)
{
clos1=temp1;
clos2=temp2;
mini=clos2-clos1;
}
if(temp2-temp1>maxi)
{
dis1=temp1;
dis2=temp2;
maxi=dis2-dis1;
}
}
if((i-1)%6==0) i+=2;//+4
}
cout<<clos1<<","<<clos2<<" are closest, "<<dis1<<","<<dis2<<" are most distant."<<endl;
}
}
return 0;
}
2014年11月6日 星期四
[UVA] 369 - Combinations
/*20141107 hanting*/
#include <iostream>
using namespace std;
int prime[30];
int factor[100]={0};
int x=0;
void part1(int num)
{
for(int i=0;num!=1;i++)
{
while(num%prime[i]==0)
{
factor[prime[i]]++;
num/=prime[i];
}
}
}
void part2(int num)
{
for(int i=0;num!=1;i++)
{
while(num%prime[i]==0)
{
factor[prime[i]]--;
num/=prime[i];
}
}
}
void mul(int* ans,int n)
{
for(int i=0;i<100;i++)
{
ans[i]*=n;
}
for(int i=1;i<100;i++)
{
ans[i]+=ans[i-1]/10;
ans[i-1]%=10;
}
}
void output(int *ans)
{
int i;
for(i=99;i>=0;i--)
{
if(ans[i]!=0) break;
}
for(int j=i;j>=0;j--)
{
cout<<ans[j];
}
}
int main()
{
int Num[100]={0};
for(int i=2;i<100;i++)
{
if(Num[i]==0)
{
prime[x++]=i;
for(int j=i;j<100;j+=i) Num[j]=1;
}
}
int n,m;
while(cin>>n>>m && n+m)
{
for(int i=0;i<100;i++) factor[i]=0;
cout<<n<<" things taken "<<m<<" at a time is ";
int ans[100]={1};
if(m>n/2) m=n-m;;
for(int i=2;i<=m;i++)
{
part2(i);
}
for(int i=n;m--;i--)
{
part1(i);
}
for(int i=2;i<98;i++)
{
while(factor[i]--)
{
mul(ans,i);
}
}
output(ans);
cout<<" exactly."<<endl;
}
return 0;
}
================================================
# /* 題目: UVa 369 - Combinations
# * onlinejudge.org/external/3/369.pdf
# * Language: Python
# * Created on: 2019年12月19日
# * Author: hanting
# */
def C(a, b):
if a-b < b :
b = a-b
result = 1
w = 1
for i in range(a-b+1, a+1):
result *= i
result //= w
w += 1
return result
while(True):
x, y = map(int, input().split())
if [x, y] == [0, 0]:
break
print('{} things taken {} at a time is {} exactly.'.format(x, y, C(x, y)))
訂閱:
文章 (Atom)