/* ID: himuhas1 TASK: concom LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<utility> #include<set> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d %d %d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define sf scanf #define pf printf #define pb push_back #define MP make_pair #define fr first #define sc second #define ll long long #define dd double #define all(v) v.begin(), v.end() #define PI acos(-1.0) #define mem(ara, value) memset(ara, value, sizeof(ara)) #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) #define read freopen("input.txt", "r", stdin) #define write freopen("output.txt", "w", stdout) using namespace std; #define MAXX 101 vector<paii>graph[MAXX]; set<int>allNodes; vector<int> result; bool visited[MAXX]; int rank[MAXX]; void dfs(int source) { visited = 1; loop(i, SZ(graph)) { if(!visited[graph[i].fr]) { rank[ graph[i].fr ] += graph[i].sc; if(rank[graph[i].fr] > 50) { result.pb(graph[i].fr); dfs(graph[i].fr); } } } } int main() { #ifndef hasibpc freopen("concom.in", "r", stdin); freopen("concom.out", "w", stdout); #endif // hasibpc int connection; int p, q, r; gi(connection); loop(i, connection) { gi3(p, q, r); allNodes.insert(p); allNodes.insert(q); graph[p].pb(MP(q, r)); } for(set<int>::iterator it=allNodes.begin(); it != allNodes.end(); it++) { result.clear(); mem(visited, 0); mem(rank, 0); dfs(*it); sort(all(result)); loop(i, SZ(result)) { pf("%d %d\n", *it, result[i]); } } return 0; }
Monthly Archives: May 2013
(USACO) Money Systems
0/* ID: himuhas1 TASK: money LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<utility> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d%d%d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define sf scanf #define pf printf #define pb push_back #define MP make_pair #define fr first #define sc second #define ll long long #define dd double #define all(v) v.begin(), v.end() #define PI acos(-1.0) #define mem(ara, value) memset(ara, value, sizeof(ara)) #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) #define read freopen("input.txt", "r", stdin) #define write freopen("output.txt", "w", stdout) using namespace std; #define MAXX 10002 ll dp[MAXX]; int main() { #ifndef hasibpc freopen("money.in", "r", stdin); freopen("money.out", "w", stdout); #endif int V, N; int coin; mem(dp, 0); dp[0] = 1; cin>>V>>N; loop(i, V) { cin>>coin; loop(i, N) { if(i + coin > N) break; dp[i+coin] += dp[i]; //cout<<(i+coin)<<endl; } } cout<<dp[N]<<endl; return 0; }
(USACO) Zero Sum
0/*
ID: himuhas1
TASK: zerosum
LANG: C++
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include<map>
#include
#define FOR(i, s, e) for(int i=s; i<e; i++)
#define loop(i, n) FOR(i, 0, n)
#define gi(a) sf("%d", &a)
#define gi2(a, b) sf("%d%d", &a, &b)
#define gi3(a, b, c) sf("%d%d%d", &a, &b, &c)
#define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d)
#define sf scanf
#define pf printf
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define ll long long
#define dd double
#define all(v) v.begin(), v.end()
#define PI acos(-1.0)
#define mem(ara, value) memset(ara, value, sizeof(ara))
#define paii pair
#define pall pair
#define SZ(a) int(a.size())
#define read freopen("input.txt", "r", stdin)
#define write freopen("output.txt", "w", stdout)
using namespace std;
int n;
vectorv;
void rec(int nxt)
{
if(nxt == n+1)
{
#if 0
loop(j, SZ(v))
{
if(v[j] > 9)
cout<<(char)v[j];
else
cout<<v[j];
}
cout<<endl;
#endif
int lastSum = 0, tmp = 0;
char sign = '+';
int i = 0;
while(i 9)
{
break;
}
lastSum = lastSum*10 + v[i];
i++;
}
while(i < SZ(v))
{
if(v[i] < 10)
{//a number
tmp = tmp*10 + v[i];
}
else
{
if(sign == '+')
{
lastSum += tmp;
}
else
{
lastSum -= tmp;
}
tmp = 0;
sign = v[i];
}
i++;
}
if(sign == '+')
{
lastSum += tmp;
}
else
{
lastSum -= tmp;
}
if(lastSum == 0)
{
cout< 9)
{
pf("%c", v[i]);
}
else
{
if(v[i-1] < 10)
{
pf(" ");
}
pf("%d", v[i]);
}
}
cout<<endl;
}
//cout<<lastSum<>n;
v.pb(1);
rec(2);
return 0;
}
(USACO) Longest Prefix
0// link: http://cerberus.delos.com:790/usacoprob2?a=QX6ufTaKJ4D&S=prefix /* ID: himuhas1 TASK: prefix LANG: C++ */ #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<stdio.h> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<utility> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d%d%d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define all(v) v.begin(), v.end() #define pb push_back #define sf scanf #define pf printf #define mem(a, v) memset(a, v, sizeof(a)) #define dd double #define ll long long #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) using namespace std; #define NO_CHILD -2 #define NO_MAP -1 #define MAXX 200002 struct Trie{ map<int, map<int, int> > childNode; vector<bool>allNodes; int id; int *p; int zero; Trie() { allNodes.pb(0); zero = 0; } void add(const string &val) { p = &zero; int ch; loop(i, SZ(val)) { ch = val[i]; p = &childNode[*p][ch]; if(*p == 0) { *p = SZ(allNodes); allNodes.pb(0); } } allNodes[*p] = 1; } void iniCharByCharSearch() { id = 0; } int charByCharSearch(char ch) { if(childNode[id].find(ch) == childNode[id].end()) { return NO_CHILD; } else { id = childNode[id][ch]; return allNodes[id]; } } }; int main() { #ifndef hasibpc freopen("prefix.in", "r", stdin); freopen("prefix.out", "w", stdout); #endif // hasibpc Trie tr; string name; string str; while(1) { cin>>name; if(name[0] == '.') break; tr.add(name); } while(cin>>name) { str += name; } bool dp[MAXX]; mem(dp, 0); int ret; int result = 0; //dp[0] = 1; for(int i=-1; i<SZ(str); i++) { if(i==-1 || dp[i]) { result = max(result, i+1); tr.iniCharByCharSearch(); FOR(j, i+1, SZ(str)) { ret = tr.charByCharSearch(str[j]); //pf("%d %d ==> %d\n", i, j, ret); if(ret == 1) { //cout<<"j = "<< j<<endl; dp[j] = 1; //result = max(result, j+1); } if(ret == NO_CHILD) break; } } } cout<<result<<endl; return 0; }
(USACO) Runaround Numbers
0// link: http://cerberus.delos.com:790/usacoprob2?a=bcquvHYkCVC&S=runround /* ID: himuhas1 TASK: runround LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<utility> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d%d%d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define sf scanf #define pf printf #define pb push_back #define MP make_pair #define fr first #define sc second #define ll long long #define dd double #define all(v) v.begin(), v.end() #define PI acos(-1.0) #define mem(ara, value) memset(ara, value, sizeof(ara)) #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) #define read freopen("input.txt", "r", stdin) #define write freopen("output.txt", "w", stdout) using namespace std; typedef unsigned long type; int ara[10]; int main() { #ifndef hasibpc freopen("runround.in", "r", stdin); freopen("runround.out", "w", stdout); #endif // hasibpc type num, temp; int k; int mask; int cntDigit; int pos; cin>>num; bool isRunAround; while(1) { num++; isRunAround = 1; mask = 0; temp = num; cntDigit = 0; while(temp) { k = temp % 10; ara[cntDigit] = k; if(mask & (1<<k)) { isRunAround = 0; break; } mask = mask | (1<<k); temp /= 10; cntDigit++; } if(isRunAround) { reverse(ara, ara+cntDigit); mask = 0; pos = 0; while(1) { //cout<<"pos " << pos<<endl; mask = mask | (1<<pos); pos = (pos + ara[pos]) % cntDigit; if(mask & (1<<pos)) { if(pos != 0 || (1<<cntDigit)-1 != mask) { isRunAround = 0; } break; } } } //cout<<num<<endl; if(isRunAround) break; } cout<<num<<endl; return 0; }
(USACO) Subset Sums
0// link: http://cerberus.delos.com:790/usacoprob2?S=subset&a=bcquvHYkCVC /* ID: himuhas1 TASK: subset LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<utility> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d%d%d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define sf scanf #define pf printf #define pb push_back #define MP make_pair #define fr first #define sc second #define ll long long #define dd double #define all(v) v.begin(), v.end() #define PI acos(-1.0) #define mem(ara, value) memset(ara, value, sizeof(ara)) #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) #define read freopen("input.txt", "r", stdin) #define write freopen("output.txt", "w", stdout) using namespace std; #define MAXX 392 int main() { //int p = 1512776590; //cout<<p<<endl; #ifndef hasibpc freopen("subset.in", "r", stdin); freopen("subset.out", "w", stdout); #endif int n; cin>>n; ll int dp[MAXX]; mem(dp, 0); dp[0] = 1; int maxn = 0; int mid = (n*(n+1))>>1; if(mid%2 == 1) { cout<<0<<endl; } else { mid = mid>>1; for(int i=1; i<=n; i++) { for(int j=min(maxn, mid-i); j>-1; j--) { if(i+j < MAXX) dp[i+j] += dp[j]; } maxn += i; } cout<<(dp[ mid ]>>1)<<endl; } return 0; }
(USACO) Hamming Codes
0/* ID: himuhas1 TASK: hamming LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<utility> #define FOR(i, s, e) for(int i=s; i<e; i++) #define loop(i, n) FOR(i, 0, n) #define gi(a) sf("%d", &a) #define gi2(a, b) sf("%d%d", &a, &b) #define gi3(a, b, c) sf("%d%d%d", &a, &b, &c) #define gi4(a, b, c, d) sf("%d%d%d%d", &a, &b, &c, &d) #define sf scanf #define pf printf #define pb push_back #define MP make_pair #define fr first #define sc second #define ll long long #define dd double #define all(v) v.begin(), v.end() #define PI acos(-1.0) #define mem(ara, value) memset(ara, value, sizeof(ara)) #define paii pair<int, int> #define pall pair<ll, ll> #define SZ(a) int(a.size()) #define read freopen("input.txt", "r", stdin) #define write freopen("output.txt", "w", stdout) using namespace std; #define MAXX 256 int N, B, D; bool isHammingDist[MAXX+2][MAXX+2]; vector<int>output; void hammindDistCalc() { int cnt; FOR(i, 0, MAXX) { FOR(j, i+1, MAXX) { cnt = 0; FOR(k, 0, B) { if( (i & (1<<k)) ^ ( j & (1<<k)) ) cnt++; } if(cnt >= D) isHammingDist[i][j] = 1; else isHammingDist[i][j] = 0; } } } bool check(int p) { loop(i, SZ(output)) { if(!isHammingDist[output[i]][p]) return 0; } return 1; } int main() { #ifndef hasibpc freopen("hamming.in", "r", stdin); freopen("hamming.out", "w", stdout); #endif // hasibpc gi3(N, B, D);\ hammindDistCalc(); output.pb(0); int num = 1; while(SZ(output) < N) { while(!check(num)) num++; output.pb(num); } pf("0"); FOR(i, 1, SZ(output)) { if(i%10 == 0) pf("\n"); else pf(" "); pf("%d", output[i]); } pf("\n"); return 0; }