A - New Year and the Christmas Ornament
暴力 solved
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <sstream>
#include <set>
// #pragma GCC optimize(2)
//#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define rush() int T;scanf("%d",&T);for(int Ti=1;Ti<=T;++Ti)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define pi acos(-1)
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int > PII;
priority_queue< PII, vector<PII>, greater<PII> > que;
stringstream ssin; // ssin << string while ( ssin >> int)
const ll LINF = 0x7fffffffffffffffll;
const int N = 4e5 + 5, M = 4e5 + 5, mod = 1e9 + 7, INF = 0x3f3f3f3f;
int y, b, r;
inline ll read() {
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
return x*f;
}
int main()
{
y = read(); b = read(); r = read();
int ans = 6;
for (int i = 1; i <= y; ++i) {
for (int j = 1; j <= b; ++j) {
for (int k = 1; k <= r; ++k) {
if (i + 1 == j && j + 1 == k) {
ans = max(ans, i + j + k);
}
}
}
}
cout << ans << '\n';
}
B - New Year and the Treasure Geolocation
暴力 solved
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <sstream>
#include <set>
// #pragma GCC optimize(2)
//#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define rush() int T;scanf("%d",&T);for(int Ti=1;Ti<=T;++Ti)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define pi acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int > PII;
priority_queue< PII, vector<PII>, greater<PII> > que;
stringstream ssin; // ssin << string while ( ssin >> int)
const ll LINF = 0x7fffffffffffffffll;
const int N = 4e5 + 5, M = 4e5 + 5, mod = 1e9 + 7, INF = 0x3f3f3f3f;
int n;
PII a[N], b[N];
map<PII, int>ma;
inline ll read() {
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
return x*f;
}
int main()
{
n = read();
for (int i = 1; i <= n; ++i) {
a[i].first = read();
a[i].second = read();
}
for (int i = 1; i <= n; ++i) {
b[i].first = read();
b[i].second = read();
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
// printf("%d %d %d %d\n", a[i].first, a[i].second, b[i].first, b[i].second);
// printf("%d---->%d\n", a[i].first + b[i].first, a[i].second + b[i].second);
ma[{a[i].first + b[j].first, a[i].second + b[j].second}]++;
}
}
for (auto x:ma) {
// cout << x.first.first << "---" << x.first.second << " " << x.second <<'\n';
if (x.second == n) {
cout << x.first.first << " " << x.first.second << '\n';
return 0;
}
}
// map<PII, int> ::iterator it;
// for (it = ma.begin(); it != ma.end(); ++it) {
// int m = *it.second;
// if (m == n) {
// cout << it.first << " " << it.second << '\n';
// return 0;
// }
// }
}
C - New Year and the Sphere Transmission
找规律 solved
可以发现每个点可以走的方案就是其因数,只需把每个数的因数提取出来跑就行了
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <sstream>
#include <set>
// #pragma GCC optimize(2)
//#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define rush() int T;scanf("%d",&T);for(int Ti=1;Ti<=T;++Ti)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define pi acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int > PII;
priority_queue< PII, vector<PII>, greater<PII> > que;
stringstream ssin; // ssin << string while ( ssin >> int)
const ll LINF = 0x7fffffffffffffffll;
const int N = 4e5 + 5, M = 4e5 + 5, mod = 1e9 + 7, INF = 0x3f3f3f3f;
ll n;
vector<ll>ans, vec;
inline ll read() {
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
return x*f;
}
int main()
{
n = read();
if (!n) {
cout << "1 " << (1 + n) * n / 2 << '\n';
} else {
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
vec.push_back(i);
vec.push_back(n / i);
}
}
for (auto x:vec) {
ans.push_back((n - x + 2) * n / x / 2);
}
sort(ans.begin(), ans.end());
ans.erase(unique(ans.begin(), ans.end()), ans.end());
cout << "1 ";
for (auto x:ans) {
cout << x << " ";
}
cout << (1 + n) * n / 2 << '\n';
}
}
D - New Year and the Permutation Concatenation
用next_permutation 暴力打了个表,nb队友直接凑出了个表达式就过了
f(n) = f(n - 1) * n + n! - n
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <sstream>
#include <set>
// #pragma GCC optimize(2)
//#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define rush() int T;scanf("%d",&T);for(int Ti=1;Ti<=T;++Ti)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define mm(i,v) memset(i,v,sizeof i);
#define mp(a, b) make_pair(a, b)
#define pi acos(-1)
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int > PII;
priority_queue< PII, vector<PII>, greater<PII> > que;
stringstream ssin; // ssin << string while ( ssin >> int)
const ll LINF = 0x7fffffffffffffffll;
const int N = 1e6 + 5, M = 4e5 + 5, mod = 998244353, INF = 0x3f3f3f3f;
ll f[N], jc[N];
inline ll read() {
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
return x*f;
}
int main()
{
jc[0] = 1; jc[1] = 1;
for (int i = 2; i < N; ++i) {
jc[i] = jc[i - 1] * i % mod;
}
f[1] = 1;
int n;
n = read();
for (int i = 2; i < N; ++i) {
f[i] = f[i - 1] * i % mod + jc[i];
f[i] %= mod;
f[i] = f[i] - i + mod;
f[i] %= mod;
}
cout << f[n] << '\n';
}