mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
commit
a4130565bb
82
QUSTOJ/1650.cpp
Normal file
82
QUSTOJ/1650.cpp
Normal 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
66
QUSTOJ/1651.cpp
Normal 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",×);
|
||||
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
18
ZOJ/3936.cpp
Normal 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
98
ZOJ/3937_csdn.cpp
Normal 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
49
ZOJ/3938_csdn.cpp
Normal 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
37
ZOJ/3939_csdn.cpp
Normal 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
23
ZOJ/3947.cpp
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user