pat1101-1110
来源:互联网 发布:中国软件服务市场 编辑:程序博客网 时间:2024/05/21 18:50
1101
#include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<queue>#include<stack>#include<algorithm>using namespace std;typedef long long ll;const int N = 1e5+5;const int INF = 0x3f3f3f3f;#define MP(x, y) make_pair(x, y)int tree[N];int n;void add(int pos, int num) { for(int i = pos; i <= n; i += i&-i) { tree[i] += num; }}int sum(int pos) { int ans = 0; for(int i = pos; i; i-= i&-i) { ans += tree[i]; } return ans;}struct Node{ int val, po, hh;}E[N];int cmp(Node a, Node b) { return a.val < b.val;}int cmp2(Node a, Node b) { return a.po < b.po;}int main() { while(~scanf("%d", &n)) { memset(tree, 0, sizeof(tree)); for(int i = 1; i <= n; ++i) { scanf("%d", &E[i].val); E[i].po = i; } sort(E+1, E+n+1, cmp); for(int i = 1; i <= n; ++i) { E[i].hh = i; } sort(E+1, E+n+1, cmp2); int ans = 0; vector<int> vc; for(int i = 1; i <= n; ++i) { int tt = sum(E[i].hh); // printf("%d %d\n", tt, E[i].val); if(tt == E[i].hh-1 && E[i].hh == i) ans ++, vc.push_back(E[i].val); add(E[i].hh, 1); } printf("%d\n", ans); for(int i = 0; i < vc.size(); ++i) { if(i) printf(" "); printf("%d", vc[i]); } printf("\n"); } return 0;}
1102
#include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<queue>#include<stack>#include<algorithm>using namespace std;typedef long long ll;const int N = 15;const int INF = 0x3f3f3f3f;#define MP(x, y) make_pair(x, y)int L[N];int R[N];int has[N];void bfs(int x) { queue<int> Q; Q.push(x); int fl = 0; while(!Q.empty()) { int tt = Q.front(); Q.pop(); if(!fl) fl = 1; else printf(" "); printf("%d", tt); if(R[tt] != INF) Q.push(R[tt]); if(L[tt] != INF) Q.push(L[tt]); }}vector<int> vc;int ff;void dfs(int x) {// printf("%d\n", x); if(L[x] != INF) dfs(L[x]); vc.push_back(x); if(R[x] != INF) dfs(R[x]);}int main() { int n; while(~scanf("%d", &n)) { ff = 0; for(int i = 0; i < n; ++i) { L[i] = INF; R[i] = INF; } memset(has, 0, sizeof(has)); for(int i = 0; i < n; ++i) { char a[10], b[10]; scanf("%s %s", a, b); // printf("%d %d\n", a[0]-'0', b[0]-'0'); if(a[0] != '-') { L[i] = a[0]-'0'; has[a[0]-'0'] ++; } if(b[0] != '-') { R[i] = b[0]-'0'; has[b[0]-'0'] ++; } } for(int i = 0; i < n; ++i) { if(!has[i]) { bfs(i); printf("\n"); dfs(i); break; } } for(int i = vc.size()-1; i >= 0; --i) { if(i != vc.size()-1) printf(" "); printf("%d", vc[i]); } printf("\n"); } return 0;}
1103爆搜,没怎么剪
#include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<queue>#include<stack>#include<algorithm>using namespace std;typedef long long ll;const int N = 15;const int INF = 0x3f3f3f3f;#define MP(x, y) make_pair(x, y)int Pow(int x, int y) { int ans = 1; while(y) { if(y & 1) ans *= x; x *= x; y >>= 1; } return ans;}vector<int> tmp;vector<int> ans;void jud() { if(ans.size() == 0) { for(int i = 0; i < tmp.size(); ++i) ans.push_back(tmp[i]); } else { int t1 = 0; for(int i = 0; i < ans.size(); ++i) t1 += ans[i]; int t2 = 0; for(int i = 0; i < tmp.size(); ++i) t2 += tmp[i]; if(t1 < t2) { ans.clear(); for(int i = 0; i < tmp.size(); ++i) ans.push_back(tmp[i]); }else { int fl = 0; for(int i = 0; i < min( tmp.size(), ans.size() ); ++i) { if(tmp[i] != ans[i]) { if(tmp[i] > ans[i]) { fl = 1; } break; } } if(fl) { ans.clear(); for(int i = 0; i < tmp.size(); ++i) ans.push_back(tmp[i]); } } }}void dfs(int x, int y, int z, int maxx) { if(y == 1) { if(x) { int num = pow(x, 1.0/z); if( pow(num, z) == x) { int num = pow(x, 1.0/z); tmp.push_back(num); jud(); tmp.erase(--tmp.end()); } } return; } else if(maxx * y == x) { int num = pow(maxx, 1.0/z); for(int i = 1; i <= y; ++i) tmp.push_back(num); jud(); for(int i = 1; i <= y; ++i) tmp.erase(--tmp.end()); return; } for(int i = min((int)pow(x, 1.0/z), maxx) ; i >= 1; --i) { int tt = pow(i, z); if(tt*y < x) continue; tmp.push_back(i); dfs(x-tt, y-1, z, i); tmp.erase(--tmp.end()); }}int main() { int n, k, p; while(~scanf("%d %d %d", &n, &k, &p)) { tmp.clear(); ans.clear(); dfs(n, k, p, INF); if(ans.size() == 0) { printf("Impossible\n"); }else { printf("%d =", n); for(int i = 0; i < ans.size(); ++i) { if(i) printf(" +"); printf(" %d^%d", ans[i], p); } printf("\n"); } } return 0;}
1104
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int MOD = 1e9+7;const int N = 1e5+5;typedef long long ll;#define MP(x, y) make_pair(x, y)double a[N];int main() { int n; while(~scanf("%d", &n)) { double ans = 0; for(int i = 0; i < n; ++i) { scanf("%lf", &a[i]); ans += a[i] * (i+1) * (n-i); } printf("%.2f\n", ans); } return 0;}
1105
#include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<queue>#include<stack>#include<algorithm>using namespace std;typedef long long ll;const int N = 1e4+5;const int INF = 0x3f3f3f3f;#define MP(x, y) make_pair(x, y)int a[N];int wid, hei;map<pair<int, int>, int> mp;int cmp(int a, int b) { return a > b;}void solve(int id, int stx, int sty, int W, int H) { if(W == 1) { for(int i = sty; i <= sty+H-1; ++i) { mp[MP(stx, i)] = a[id++]; } return; }else if(H == 1) { for(int i = stx; i <= stx+W-1; ++i) { mp[MP(i, sty)] = a[id++]; } return; } int X = stx; int Y = sty; for(; X <= stx + W-1; ++X) { mp[MP(X, Y)] = a[id ++]; // printf("%d %d\n", X, Y, a[id-1]); } X--; Y++; for(; Y <= sty + H-1; ++Y) { mp[MP(X, Y)] = a[id ++]; } Y--; X--; for(; X >= stx; --X) { mp[MP(X, Y)] = a[id ++]; } X++; Y--; for(; Y > sty; --Y) { mp[MP(X, Y)] = a[id ++]; } if(W-2 > 0 && H-2 > 0) solve(id, ++X, ++Y, W-2, H-2);}int main() { int n; while(~scanf("%d", &n)) { mp.clear(); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); sort(a, a+n, cmp); for(int i = 1; i <= sqrt(n); ++i) { if(n % i == 0) { wid = i; } } hei = n/wid; // printf("%d %d\n", wid, hei); solve(0, 0,0, wid, hei); for(int i = 0; i < hei; ++i) { for(int j = 0; j < wid; ++j) { if(j) printf(" "); printf("%d", mp[MP(j, i)]); } printf("\n"); } } return 0;}
1106
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e5+5;typedef long long ll;#define MP(x, y) make_pair(x, y)int n; double p, r;struct Node{ int to, nx;}E[N*1000];int has[N];int head[N]; int tot;void add(int fr, int to) { E[tot].to = to; E[tot].nx = head[fr]; head[fr] = tot++;}double ans; vector<double> vc;void dfs(int x, double price) { if(!has[x]) { if(ans > price) { ans = price; } vc.push_back(price); return; } for(int i = head[x]; ~i; i = E[i].nx) { int to = E[i].to; dfs(to, price*(1+ r/100)); }}int main() { while(~scanf("%d %lf %lf", &n, &p, &r)) { ans = INF; vc.clear(); memset(head, -1, sizeof(head)); memset(has, 0, sizeof(has)); tot = 0; int root; for(int i = 0; i < n; ++i) { int a; scanf("%d", &a); for(int j = 0; j < a; ++j) { int b; scanf("%d", &b); add(i, b); has[i] ++; } } dfs(0, p); int all = 0; for(int i = 0; i < vc.size(); ++i) { if(vc[i] == ans) { all ++; } } printf("%.4f %d\n", ans , all); } return 0;}
1107 题意不清,,,我猜是并查集,反正对了
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+5;typedef long long ll;#define MP(x, y) make_pair(x, y)vector<int> hob[N];int f[N];int cnt[N];int find(int x) { return x==f[x]? x : f[x] = find(f[x]); }int cmp(int a, int b) { return a > b;}int main() { int n; while(~scanf("%d", &n)) { for(int i = 0; i < n; ++i) f[i] = i; for(int i = 0; i < n; ++i) { int a; scanf("%d:", &a); for(int j = 0; j < a; ++j) { int b; scanf("%d", &b); hob[b].push_back(i); } } for(int i = 1; i <= 1000; ++i) { if(hob[i].size() > 1) { for(int j = 1; j < hob[i].size(); ++j) { int t1 = find(hob[i][0]); int t2 = find(hob[i][j]); if(t1 != t2) f[t2] = t1; } } } for(int i = 0; i < n; ++i) { int t1 = find(i); cnt[t1] ++; } sort(cnt, cnt+n, cmp); int all = 0; for(int i = 0; i < n; ++i) { if(cnt[i]) { all ++; } } printf("%d\n", all); for(int i = 0; i < n; ++i) { if(!cnt[i]) break; if(i) printf(" "); printf("%d", cnt[i]); } printf("\n"); } return 0;}
1108
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e3+5;typedef long long ll;#define MP(x, y) make_pair(x, y)int main() { int n; while(~scanf("%d", &n)) { double ans = 0; int ansp = 0; for(int i = 0; i < n; ++i) { char s[30]; scanf("%s", s); int fl = 1; int zhen = 1; if(s[0] == '-') zhen *= -1; int len = strlen(s); for(int cnt = 0, j = (zhen==-1) ; j < len; ++j) { if(s[j] == '.') { if(len-j > 3 || j == (zhen==-1) ) { fl = 0; break; } cnt ++; if(cnt > 1) { fl = 0; break; } } else if( s[j] >= '0' && s[j] <= '9'); else { fl = 0; break; } } if(fl) { double tt; sscanf(s, "%lf", &tt); if(tt < -1000 || tt > 1000) { fl = 0; }else ansp ++, ans += tt; } if(!fl) printf("ERROR: %s is not a legal number\n", s); } if(ansp == 0) printf("The average of 0 numbers is Undefined\n"); else if(ansp == 1) printf("The average of %d number is %.2f\n", ansp, ans/ansp); else printf("The average of %d numbers is %.2f\n", ansp, ans/ansp); } return 0;}
1109
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<algorithm>#include<ctime>#include<cstdlib>#include<map>#include<set>using namespace std;const int INF = 0x3f3f3f3f;const int N = 1e4+5;typedef long long ll;#define MP(x, y) make_pair(x, y)char nam[N][10];struct Node{ int id, grade;}E[N];int cmp(Node a, Node b) { if(a.grade != b.grade) return a.grade > b.grade; else { char *A = nam[a.id]; char *B = nam[b.id]; int l1 = strlen(A); int l2 = strlen(B); for(int i = 0; i < min(l1, l2); ++i) { if(A[i] != B[i]) return A[i] < B[i]; } return l1 < l2; }}int value[N];int main() { int n, p; while(~scanf("%d %d", &n, &p)) { for(int i = 0; i < n; ++i) { scanf("%s %d", nam[i], &E[i].grade); E[i].id = i; } sort(E, E+n, cmp); // for(int i = 0; i < n; ++i) printf("%s ", nam[E[i].id]); printf("\n"); int rownum = n/p; for(int i = 0; i < n; i += rownum) { int l = i; int r = i+rownum-1; // printf("%d %d\n", l, r); if(i == 0) r += n%p; // printf("%d %d\n", l, r); int L = (r-l+1)/2 + l; int R = L; // printf("%d %d\n", L, R); int cnt = l; while(1) { if(L == R) value[L] = cnt++; else { if(L >= l) value[L] = cnt++; if(R <= r) value[R] = cnt++; } L --; R ++; if(L < l && R > r) break; } for(int i = l; i <= r; ++i) { if(i != l) printf(" "); printf("%s", nam[E[value[i]].id]); } printf("\n"); if(i == 0) i += n%p; } } return 0;}
1110原来傻逼错误是 字符串转数字那里,醉了
include<cmath>#include<map>#include<iostream>#include<cstring>#include<cstdio>#include<set>#include<vector>#include<queue>#include<stack>#include<algorithm>using namespace std;typedef long long ll;const int N = 25;const int INF = 0x3f3f3f3f;#define MP(x, y) make_pair(x, y)int L[N];int R[N];int has[N];int all;int ok[N];int cnt[N];int ansdep; int ans;void bfs(int x) { queue<pair<int ,int> > Q; Q.push(MP(x, 0)); while(Q.front().first != INF) { int po = Q.front().first; int dep = Q.front().second; Q.pop(); // printf("%d\n", po); all ++; cnt[dep] ++; if(dep >= ansdep) { ansdep = dep; ans = po; } Q.push(MP(L[po], dep+1)); Q.push(MP(R[po], dep+1)); }}int main() { int n; while(~scanf("%d", &n)) { all = 0; memset(ok, 0, sizeof(ok)); memset(cnt, 0, sizeof(cnt)); for(int i = 0; i < n; ++i) { L[i] = INF; R[i] = INF; } memset(has, 0, sizeof(has)); for(int i = 0; i < n; ++i) { char a[10], b[10]; scanf("%s %s", a, b); int tt; // printf("%d %d\n", a[0]-'0', b[0]-'0'); if(a[0] != '-') { sscanf(a,"%d", &tt); L[i] = tt; has[tt] ++; } if(b[0] != '-') { sscanf(b,"%d", &tt); R[i] = tt; has[tt] ++; } } int root; for(int i = 0; i < n; ++i) { if(!has[i]) { all = 0; ansdep = -1; bfs(i); root = i; break; } } // printf("%d\n", all); if(all == n) printf("YES %d\n", ans); else { printf("NO %d\n", root); } } return 0;}
阅读全文
0 0
- pat1101-1110
- PAT1101. Quick Sort
- 1110
- 1110
- 1110
- 1110
- problem 1110
- zoj 1110
- 1110日报
- ZOJ 1110
- ZOJ-1110
- PAT 1110
- PAT 1110
- PAT 1110
- bzoj 1110
- 1110: 排列
- 1110:排列
- 题目1110:小白鼠排队
- Ubuntu 在playonlinux上安装ps(补充:尚有问题未解决)
- 卡尔曼滤波以及opencv源代码分析
- DES加密解密---可执行完整版------(附2个版本RSA加密解密)
- 【高级语言程序设计期末复习No.1】动态链表的建立,输出,插入和删除
- Android性能最佳实践
- pat1101-1110
- iOS-UITableview性能优化
- cocos2d-x3.8骨骼动画加载
- sublime text 3 配置Python编译器
- mmap--最简单的测试程序(用户空间与内核空间数据交换&&用户态和内核态的数据交换用例)
- 170613 逆向-CrackMe之023
- Ubuntu 下deb包的安装方法
- Jquery.form.js的使用
- Ubuntu16.04下安装网易云