A: 水题
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define fi first
#define se second
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
#define Fast_IO ios_base::sync_with_stdio(0);cin.tie(0)
int n;
int main()
{
cin>>n;
int tmp = 30;
int res = 0;
while(n){
int t = 1<<tmp;
if(t > n) tmp--;
else n -= t,res++;
}
cout<<res<<endl;
return 0;
}
B: 至今也感觉贪心不对。。。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define N 1000005
using namespace std;
struct node{
int x,y,v;
const bool operator < (const node old) const
{
return v > old.v;
}
}t[N];
bool visit[N];
int n,ans[N];
int main()
{
while(scanf("%d",&n) == 1)
{
int i,j,k = 0;
for(i = 2;i <= n * 2;i++)
{
for(j = 1;j < i;j++)
{
scanf("%d",&t[k].v);
t[k].x = i;t[k].y = j;
k++;
}
}
int cont = n;
sort(t,t + k);
memset(visit,0,sizeof(visit));
for(i = 0;i <= n*2*(n*2-1);i++)
{
//cout << t[i].v << endl;
if(cont == 0)break;
if(visit[t[i].x] == 0 && visit[t[i].y] == 0)
{
visit[t[i].x] = visit[t[i].y] = 1;
ans[t[i].x] = t[i].y;
ans[t[i].y] = t[i].x;
cont--;
}
}
for(i = 1;i <= 2 * n;i++)
{
if(i == 1)cout << ans[i];
else cout << " " << ans[i];
}
putchar('\n');
}
return 0;
}
C:推公式。或者二分
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define fi first
#define se second
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
#define Fast_IO ios_base::sync_with_stdio(0);cin.tie(0)
int n;
int a,b;
int main()
{
cin>>a>>b;
if(a < b) {
cout<<-1<<endl; return 0;}
int t = ((a/b+1)&1)?a/b:a/b+1;
double ans = (a+b)*(1.0)/t;
printf("%.9f\n", ans);
return 0;
}
D: 预处理前缀后缀乱搞
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define fi first
#define se second
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
ll powmod(ll a,ll b) {ll res=1;for(;b;b>>=1){if(b&1)res=res*a;a=a*a;}return res;}
#define Fast_IO ios_base::sync_with_stdio(0);cin.tie(0)
#define EPS 1e-8
#define LL long long
#define MAXN 200010
LL l[MAXN] = {0}, r[MAXN] = {0};
LL a[MAXN];
int main () {
int n, k, x;
scanf("%d%d%d", &n, &k, &x);
for(int i = 1; i <= n; i++)
scanf("%I64d", &a[i]);
for(int i = 1; i <= n; i++) {
l[i] = l[i - 1] | a[i];
}
for(int i = n; i >= 1; i--) {
r[i] = r[i + 1] | a[i];
}
LL maxv = 0;
for(int i = 1; i <= n; i++) {
LL xx = l[i - 1] | r[i + 1];
LL now = a[i];
for(int j = 0; j < k; j++){
now *= x;
}
maxv = max(maxv, now | xx);
}
cout << maxv << endl;
return 0;
}
E: 三分+最大字段和
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define fi first
#define se second
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
ll powmod(ll a,ll b) {ll res=1;for(;b;b>>=1){if(b&1)res=res*a;a=a*a;}return res;}
#define Fast_IO ios_base::sync_with_stdio(0);cin.tie(0)
int n;
double a[200010];
#define EPS 1e-8
const long long INF = 0x3f3f3f3f;
double f[200010];
double solve(double x)
{
double ans1=0;
f[1]=a[1]-x;
for(int i=2;i<=n;i++)
{
if(f[i-1]<0)
f[i]=a[i]-x;
else
f[i]=f[i-1]+a[i]-x;
ans1=max(ans1,f[i]);
}
f[1]=(a[1]-x);
ans1=max(ans1,-f[1]);
for(int i=2;i<=n;i++)
{
if(f[i-1]>0)
f[i]=(a[i]-x);
else
f[i]=f[i-1]+(a[i]-x);
ans1=max(ans1,-f[i]);
}
return ans1;
}
int main()
{
cin>>n;
rep(i, 1, n){
scanf("%lf", &a[i]);
}
double l = -10000*(1.0);
double r = 10000*1.0;
int cnt = 300;
double ans;
while(cnt--){
double mid = (2*l+r)/3;
double mmid = (l+2*r)/3;
double res1 = solve(mid);
double res2 = solve(mmid);
if(res1 >= res2){
l = mid;
ans = mid;
}
else{
ans = mmid;
r = mmid;
}
}
double res = 0;
double ret = 0;
for(int i=1; i<=n; i++){
res += a[i] - ans;
if(res - EPS < 0)
res = 0;
ret = max(ret, res);
}
printf("%.7f\n", ret);
return 0;
}