CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int t , n , k , x;
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n >> k >> x;
if(n < k || k > x + 1) {
cout << "-1\n";
} else {
int res = 0;
int now = k - 1;
res += (now + 1) * now / 2;
if(k == x) res += (x - 1) * (n - k);
else res += x * (n - k);
cout << res << "\n";
}
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int n , m , t;
int a[N] , b[N];
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n >> m;
int mx = 0 , mn = 0 , k = 0;
for(int i = 1 ; i <= n ; i ++) cin >> a[i];
for(int i = 1 ; i <= m ; i ++) cin >> b[i] , k |= b[i];
for(int i = 1 ; i <= n ; i ++) {
mn ^= (a[i] | k);
mx ^= a[i];
}
if(mn > mx) swap(mn , mx);
cout << mn << " " << mx << "\n";
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int t , n , k , ans[N];
struct node {
int x , id;
}a[N];
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n >> k;
for(int i = 1 ; i <= n ; i ++) {
cin >> a[i].x ;
a[i].id = i;
}
sort(a + 1 , a + 1 + n ,
[&](node a, node b){
return a.x < b.x;
}
);
int mx = -9e18 , mn = 9e18;
for(int i = n ; i >= 1 ; i --){
int now = a[i].x;
int id = a[i].id;
mx = max(mx , id);
mn = min(mn , id);
ans[now] = (mx - mn + 1) * 2;
}
for(int i = 1 ; i <= k ; i ++) {
cout << ans[i] << " ";
ans[i] = 0;
}
cout << "\n";
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int t , n , k;
int a[N] , pre[N] , b[N];
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n;
pre[0] = 0;
for(int i = 1 ; i <= n ; i ++) cin >> a[i] , pre[i] = 0;
cin >> k;
int id = 0;
while(k && id != -1) {
int maxx = 0 , id1 = -1;
for(int i = n ; i >= id + 1 ; i --) {
if((k / a[i]) > maxx) {
maxx = k / a[i];
id1 = i;
}
}
k -= maxx * a[id1];
for(int i = n ; i >= id1 + 1 ; i --) {
a[i] -= a[id1];
}
pre[id] += maxx;
pre[id1] -= maxx;
id = id1;
}
int sum = 0;
for(int i = 1 ; i <= n ; i ++) {
sum += pre[i - 1];
cout << sum << " ";
}
cout << "\n";
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
d p [ i ] [ j ] 表示前 i 个数是否能表示出 j dp[i][j] 表示前 i 个数是否能表示出 j dp[i][j]表示前i个数是否能表示出j
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 5e3 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int t , n ;
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n;
vector<int>a(n + 1);
for(int i = 1 ; i <= n ; i ++) {
cin >> a[i];
}
vector<vector<int>>mex(n + 1 , vector<int>(n + 1));
vector<vector<bool>>dp(n + 1 , vector<bool>(1 << 13));
for(int i = 1 ; i <= n ; i ++) {
int now = 0;
vector<bool>vis(n + 1);
for(int j = i ; j <= n ; j ++) {
vis[a[j]] = 1;
while(vis[now]) now += 1;
mex[i][j] = now;
}
}
dp[0][0] = 1;
for(int i = 1 ; i <= n ; i ++) {
//从上一位自然转移
dp[i] = dp[i - 1];
for(int l = 1 ; l <= i ; l ++) {
for(int k = 0 ; k < (1 << 13) ; k ++) {
if(dp[l - 1][k]) dp[i][k ^ mex[l][i]] = 1;
}
}
}
int res = 0;
for(int i = 0 ; i < (1 << 13) ; i ++) {
if(dp[n][i]) res = max(res , i);
}
cout << res << "\n";
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
O ( n 2 ) O(n^2) O(n2)
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 5e3 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int t , n ;
signed main(){
IOS
cin >> t;
while(t --) {
cin >> n;
vector<int>a(n + 1);
for(int i = 1 ; i <= n ; i ++) {
cin >> a[i];
}
vector<vector<int>>mex(n + 1 , vector<int>(n + 1));
vector<vector<bool>>dp(n + 1 , vector<bool>(1 << 13));
for(int i = 1 ; i <= n ; i ++) {
int now = 0;
vector<bool>vis(n + 1);
for(int j = i ; j <= n ; j ++) {
vis[a[j]] = 1;
while(vis[now]) now += 1;
mex[i][j] = now;
}
}
dp[0][0] = 1;
vector<vector<bool>>visl(n + 1 , vector<bool>(1 << 13));
vector<vector<bool>>visr(n + 1 , vector<bool>(1 << 13));
for(int i = 1 ; i <= n ; i ++) {
//从上一位自然转移
dp[i] = dp[i - 1];
for(int l = i ; l >= 1 ; l --) {
if(visr[i][mex[l][i]]) continue;
if(visl[l][mex[l][i]]) continue;
visl[l][mex[l][i]] = 1;
visr[i][mex[l][i]] = 1;
for(int k = 0 ; k < (1 << 13) ; k ++) {
if(dp[l - 1][k]) dp[i][k ^ mex[l][i]] = 1;
}
}
}
int res = 0;
for(int i = 0 ; i < (1 << 13) ; i ++) {
if(dp[n][i]) res = max(res , i);
}
cout << res << "\n";
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);