#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;
int main(){
char s[10];
while(scanf("%s",s) != EOF){
int l = strlen(s);
sort(s, s+l);
do {
printf("%s\n", s);
} while ( next_permutation(s, s + l) );
puts("");
}
}
2015年1月29日 星期四
TIOJ 1113 [入門] Evanesco
TIOJ 1101 D.分「樹」
#include <cstdio>
#include <cstdlib>
using namespace std;
struct node{
int up, down;
};
node add(const node a, const node b){
node c;
c.up = a.up + b.up;
c.down = a.down + b.down;
return c;
}
int main(){
int n, m;
while(1){
scanf("%d %d",&n, &m);
if(n + m == 0){break;}
if(n == 1){
if (m == 1){ printf("0/1\n"); }
if (m == 2){ printf("1/0\n"); }
continue;
}
node l, r, mid;
l.up = 0; l.down = 1;
r.up = 1; r.down = 0;
int l_num = 0, r_num = 1 << (n-2), mid_num;
for(int i = 1; i < n-1; i++){
mid = add(l, r);
mid_num = (l_num + r_num)/2;
if(m <= mid_num){
r = mid;
r_num = mid_num;
}
else{
l = mid;
l_num = mid_num;
}
}
mid = add(l, r);
printf("%d/%d\n", mid.up, mid.down);
}
}
2015年1月28日 星期三
TIOJ 1082 C.分堆問題
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define ll long long
ll a[1000002],b[1000002];
int main(){
int n;
while(true){
scanf("%d",&n);
if(n==0)
break;
int black=0,white=0;
ll all_b=0,all_w=0;
ll minus=2147483647;
int site;
ll ans=0;
if(n==1){
scanf("%lld %lld",&a[0],&b[0]);
if(a[0]==0 || b[0]==0)
printf("0\n");
else
printf("-1\n");
continue;
}
for(int i=0;i<n;i++){
scanf("%lld %lld",&a[i],&b[i]);
all_w+=b[i];
all_b+=a[i];
if(a[i]>b[i]){
black++;
ans+=b[i];
}
else{
white++;
ans+=a[i];
}
ll t=abs(a[i]-b[i]);
if(t<minus){
minus=t;
site=i;
}
}
if(black==0 || white==0)
ans+=minus;
printf("%lld\n",ans);
}
}
TIOJ 1048 D.亞洲經濟合作會議
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int pp[15];
bool flag[15];
char ans[15];
int n,m;
char al(int x){
int cnt=0;
int i=0;
for(i=0;i<n;i++){
if(flag[i]&&cnt==x)
break;
if(flag[i])
cnt++;
}
flag[i]=false;
return i+65;
}
int main(){
pp[0]=1;
pp[1]=1;
for(int i=2;i<=12;i++)
pp[i]=pp[i-1]*i;
while(true){
scanf("%d %d",&n,&m);
if(n==0&&m==0)
break;
m--;
m%=pp[n];
for(int i=0;i<15;i++)
flag[i]=true;
for(int i=0;i<n;i++){
int mm=m/pp[n-1-i];
m%=pp[n-1-i];
ans[i]=al(mm);
}
ans[n]='\0';
for(int i=0;i<n-1;i++)
printf("%c ",ans[i]);
printf("%c\n",ans[n-1]);
}
}
TIOJ 1040 C.連分數
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
std::vector<int> ans;
void gcd(int &x,int &y){
int t,xx=x,yy=y;
while(yy!=0){
xx%=yy;
int tt=xx;
xx=yy;
yy=tt;
}
x/=xx;
y/=xx;
return;
}
void ff(int n,int m){
int tans=n/m;
printf("%d",tans);
n%=m;
gcd(n,m);
if(n==1){
printf("+1/%d",m);
return;
}
if(n==0)
return;
printf("+1/{");
ff(m,n);
printf("}");
}
int main(){
int T;
int n,m;
scanf("%d",&T);
while(T-->0){
ans.clear();
scanf("%d %d",&n,&m);
printf("%d/%d = ",n,m);
ff(n,m);
printf("\n");
}
}
TIOJ 1020 F.Number Insertion
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int num;
vector<int> v, ans;
bool compare(){
for (int i = 0; i < n+1; ++i){
if(v[i] != ans[i])
return v[i] > ans[i];
}
return false;
}
void dfs(int x){
if (x > n){
if(compare())
ans = v;
num++;
return;
}
for(int i = 1; i < x ;++i){
if( x % (v[i-1] + v[i]) == 0 ){
v.insert(v.begin()+i, x);
dfs(x+1);
v.erase(v.begin()+i);
}
}
}
int main(){
scanf("%d",&n);
v.push_back(0);
v.push_back(1);
num = 0;
for (int i = 0; i <= n; ++i)
ans.push_back(0);
dfs(2);
printf("%d\n",num);
for (int i = 0; i < n; ++i){
printf("%d ",ans[i]);
}
printf("%d\n",ans[n]);
}
TIOJ 1007 燈泡問題
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main() {
int n,m;
long long int dp[2][17];
scanf("%d %d",&n,&m);
int now = 0,pre = 1;
for (int i = 0; i < n+1; ++i)
dp[now][i] = 1;
dp[now][n+1] = 0;
for(int k = 0; k < m; k++){
swap(now, pre);
dp[now][n+1] = 0;
for (int i = 0; i <= n; ++i)
dp[now][i] = dp[pre][i+1] + dp[pre][0];
}
printf("%lld\n",dp[now][0]);
return 0;
}
訂閱:
文章 (Atom)