Merge pull request #2 from Kiritow/master

Catch up with you~
This commit is contained in:
KiritoTRw 2016-04-27 20:37:40 +08:00
commit a4130565bb
7 changed files with 373 additions and 0 deletions

82
QUSTOJ/1650.cpp Normal file
View File

@ -0,0 +1,82 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
//Kiritow's BIGN (class BigNumber) Written on Nov. 12th, 2015
//Original Version: Build 1
class bign
{
public:
//WARNING: We use public here to reduce time consumed on Interface, although this is not a recommended way.
int data[3000];
bool more_than_zero;
bign()
{
more_than_zero=true;
}
void set_empty()
{
memset(data,0,sizeof(int)*3000);
}
int lenx()
{
for(int i=3000-1;i>=0;i--)
{
if(data[i]!=0) return i+1;
}
return 0;
}
};
char CompareBIGN(bign& a,bign& b)
{
int lena=a.lenx();
int lenb=b.lenx();
if(lena<lenb)
{
return '<';
}
else if (lena>lenb)
{
return '>';
}
else
{
for(int i=lena-1;i>=0;i--)
{
if(a.data[i]>b.data[i])
{
return '>';
}
else if(a.data[i]<b.data[i])
{
return '<';
}
}
return '=';
}
}
void ConvertSTRtoBIGN(const char* incstr,bign& incbign)
{
int len=strlen(incstr);
for(int i=0;i<len;i++)
{
incbign.data[len-i-1]=incstr[i]-'0';
}
}
bign a,b;
char buff[3000];
int main()
{
a.set_empty();
b.set_empty();
gets(buff);
ConvertSTRtoBIGN(buff,a);
gets(buff);
ConvertSTRtoBIGN(buff,b);
printf("%c\n",CompareBIGN(a,b));
return 0;
}

66
QUSTOJ/1651.cpp Normal file
View File

@ -0,0 +1,66 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
//Kiritow's BIGN (class BigNumber) Written on Nov. 12th, 2015
//Original Version: Build 1 (Version 2)
//CCBIGN : from BIGN (Build 1 -version 2)
class ccbign
{
public:
//WARNING: We use public here to reduce time consumed on Interface, although this is not a recommended way
int data[3000];
int length;
ccbign()
{
length=0;
}
void set_empty()
{
memset(data,0,sizeof(int)*3000);
}
};
int ConvertSTRtoCCBIGN(const char* incstr,ccbign& incbign)
{
int len=strlen(incstr);
for(int i=0;i<len;i++)
{
incbign.data[i]=incstr[i]-'0';
}
incbign.length=len;
return len;
}
ccbign a;
char buff[3000];
int main()
{
int times;
scanf("%d%*c",&times);
for(;times>0;times--)
{
a.set_empty();
gets(buff);
int len=ConvertSTRtoCCBIGN(buff,a);
for(int i=0;i<len-1;i++)
{
int tmp=a.data[i]*10+a.data[i+1];
if(tmp<17)
{
a.data[i+1]+=a.data[i]*10;
continue;
}
else
{
a.data[i+1]=tmp%17;
}
}
int answer=a.data[a.length-1];
printf("%d\n",answer);
}
return 0;
}

18
ZOJ/3936.cpp Normal file
View File

@ -0,0 +1,18 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("%d %d\n",c,b+d);
printf("%d %d\n",a,b+d);
}
return 0;
}

98
ZOJ/3937_csdn.cpp Normal file
View File

@ -0,0 +1,98 @@
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
class Solution {
static const int MAXN = 100000 + 10;
static const LL inf = 1ll << 60;
vector<int> G[MAXN];
int w[MAXN], n;
struct Line {// m * x + b
LL m, b;
double inter(const Line &r) const {
return (r.b - b) / (m - r.m);
}
inline LL eval(LL x) {return m * x + b;}
} Q[MAXN];a
int rt, mins, total, top;
int vs[MAXN], sz[MAXN], dep[MAXN];
LL val[MAXN], ps[MAXN], ret;
void getCenter(int u, int f = -1) {
int mx = 0; sz[u] = 1;
for (auto &v: G[u]) if (v != f && !vs[v]) {
getCenter(v, u); sz[u] += sz[v];
mx = max(mx, sz[v]);
}
mx = max(mx, total - sz[u]);
if (mx < mins) mins = mx, rt = u;
}
int dfs1(int u, int d = 1) {
ret = max(ret, val[d]);
for (auto &v: G[u]) if (!vs[v] && u > v) {
ps[v] = ps[u] + w[v];
val[d + 1] = val[d] + ps[v];
return dfs1(v, d + 1) + 1;
}
return 1;
}
void dfs2(int u, int d = 0, LL sum = 0) {
sum += 1ll * d * w[u];
// max(ps[u] * m + b + sum)
int left = 0, right = top - 2;
while (left < right) {
int mid = (left + right) >> 1;
if (Q[mid].eval(ps[u]) >= Q[mid + 1].eval(ps[u])) right = mid;
else left = mid + 1;
}
ret = max(ret, Q[left].eval(ps[u]) + sum);
if (left + 1 < top) ret = max(ret, Q[left + 1].eval(ps[u]) + sum);
for (auto &v: G[u]) if (!vs[v] && u < v) {
ps[v] = ps[u] + w[v];
dfs2(v, d + 1, sum);
}
}
void solve(int u, int _tot) {
total = _tot; mins = _tot * 2;
getCenter(u); u = rt; vs[u] = 1; getCenter(u);
val[1] = ps[u] = w[u];
int md = dfs1(u);
top = 0;
for (int i = 1; i <= md; ++i) {
Line now = (Line){i, val[i]};
while (top >= 2 && Q[top - 2].inter(Q[top - 1]) >= Q[top - 1].inter(now)) --top;
Q[top++] = now;
}
ps[u] = 0; dfs2(u);
for (int i = 0; i <= md; ++i) val[i] = -inf;
for (auto &v: G[u]) if (!vs[v]) {
solve(v, sz[v]);
}
}
public:
void run() {
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", w + i); G[i].clear();
}
for (int i = 1; i < n; ++i) {
int x; scanf("%d", &x); --x;
G[x].push_back(i);
G[i].push_back(x);
}
ret = 0;
for (int i = 0; i < n; ++i) val[i] = -inf;
memset(vs, 0, sizeof(vs[0]) * n);
solve(0, n);
printf("%lld\n", ret);
}
} sol;
int main() {
int T; scanf("%d", &T);
for (int cas = 1; cas <= T; ++cas) sol.run();
return 0;
}

49
ZOJ/3938_csdn.cpp Normal file
View File

@ -0,0 +1,49 @@
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
vector<PII> res;
int b[5][5], a[5];
int main() {
int T; scanf("%d", &T);
for (int cas = 1; cas <= T; ++cas) {
int r[5];
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 5; ++j) {
cin >> b[i][j];
}
}
// stage 1
int *x = b[0], d = x[0];
if (d <= 2) r[0] = 2;
else r[0] = d;
// stage 2
x = b[1], d = x[0];
for (int i = 1; i < 5; ++i) a[x[i]] = i;
if (d == 1) r[1] = a[4];
else if (d == 3) r[1] = 1;
else r[1] = r[0];
// stage 3
x = b[2], d = x[0];
for (int i = 1; i < 5; ++i) a[x[i]] = i;
if (d == 1) r[2] = a[b[1][r[1]]];
else if (d == 2) r[2] = a[b[0][r[0]]];
else if (d == 4) r[2] = a[4];
else r[2] = d;
// stage 4
x = b[3], d = x[0];
if (d == 1) r[3] = r[0];
else if (d == 2) r[3] = 1;
else r[3] = r[1];
// stage 5
x = b[4], d = x[0];
for (int i = 1; i < 5; ++i) a[x[i]] = i;
if (d <= 2) r[4] = a[b[d - 1][r[d - 1]]];
else r[4] = a[b[6 - d][r[6 - d]]];
for (int i = 0; i < 5; ++i) {
cout << r[i] << " " << b[i][r[i]] << endl;
}
}
return 0;
}

37
ZOJ/3939_csdn.cpp Normal file
View File

@ -0,0 +1,37 @@
#include <bits/stdc++.h>
using namespace std;
vector<tuple<int, int, int>> p;
int day(int y, int m, int d) {
int tm = m >= 3 ? (m - 2) : (m + 10);
int ty = m >= 3 ? y : (y - 1);
return (ty + ty / 4 - ty / 100 + ty / 400 + (int)(2.6 * tm - 0.2) + d) % 7;
}
void run() {
int y, m, d, n; cin >> y >> m >> d >> n;
y -= 1753; n += y / 2800 * p.size();
y %= 2800;
n += lower_bound(p.begin(), p.end(), make_tuple(y, m, d)) - p.begin() - 1;
auto res = p[n % p.size()];
y = get<0>(res);
m = get<1>(res);
d = get<2>(res);
y += n / p.size() * 2800 + 1753;
cout << y << " " << m << " " << d << endl;
}
int main() {
cerr << day(1753, 1, 1) << endl;
for (int y = 0; y < 2800; ++y) {
for (int m = 1; m <= 12; ++m) {
if (day(y + 1753, m, 1) == 1) p.push_back(make_tuple(y, m, 1));
if (day(y + 1753, m, 11) == 1) p.push_back(make_tuple(y, m, 11));
if (day(y + 1753, m, 21) == 1) p.push_back(make_tuple(y, m, 21));
}
}
int T; scanf("%d", &T);
for (int cas = 1; cas <= T; ++cas) run();
return 0;
}

23
ZOJ/3947.cpp Normal file
View File

@ -0,0 +1,23 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,tmp,sum;
scanf("%d",&n);
sum=n;
for(int i=0;i<n;i++)
{
scanf("%d",&tmp);
sum+=tmp;
}
printf("%d\n",sum);
}
return 0;
}