A. 暴力签到
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1e4;
int a[maxn], b[maxn];
int n,m;
int main()
{
cin >> n;
for(int i = 0; i < n ; i++)
cin >> a[i];
cin >> m;
for(int i = 0; i < m; i++)
cin >> b[i];
int ans = inf;
for(int i = 0; i <= m-n ; i++)
{
int th = 0;
for(int j = 0; j < n ;j++)
th += (a[j]-b[i+j])*(a[j] - b[i+j]);
ans = min(th,ans);
}
cout << ans << endl;
return 0;
}
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
int n,m;
int main()
{
int xm,d;
scanf("%d",&n);
scanf("%d",&xm);
int num = 1;
for(int i = 1; i < n ; i++)
{
scanf("%d",&d);
if(d <= xm) num++;
}
int ans = 0;
while(num)
{
num/=2;
if(num == 0) break;
ans++;
}
printf("%d\n",ans);
return 0;
}
C.这道题想了好久。。。。
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
const int maxm = 5e5 + 10;
const int maxn = 5e5 + 10;
int sum[maxm << 2], flag[maxn] , last[maxn][2];
int M;
void add(int ti, int v, int id, int l, int r)
{
if(l == r && l == ti) {sum[id] = v; return;}
if(ti < l || ti > r) return;
int m = l+r>>1;
if(ti <= m) add(ti, v, id << 1, l, m);
else add(ti, v, id << 1 | 1, m + 1, r);
sum[id] = sum[id << 1] + sum[id << 1 | 1];
}
int q(int ql, int qr, int id, int l, int r)
{
if(qr < l || r < ql) return 0;
if(l >= ql && r <= qr) return sum[id];
int m = l+r>>1;
int ans = 0;
if(ql <= m) ans += q(ql, qr, id << 1, l, m);
if(qr > m) ans += q(ql, qr, id << 1 | 1, m+1,r);
return ans;
}
int ex = 0;
int ch(int id, int l, int r,int ql,int qr)
{
if(ql > r || qr < l) return 0;
if(l == r){ sum[id] = 0;ex = l; return 1;}
int m = l+r >> 1;
if(qr <= m) ch(id << 1, l, m, ql, qr);
else if(ql > m) ch(id <<1|1 , m+1 ,r , ql, qr);
else
{
if(sum[id << 1])
{
if(ch(id<<1, l, m, ql, m) == 0)
ch(id<<1|1, m+1 ,r , m+1, qr);
}
else if(sum[id<<1|1])
ch(id<<1|1, m+1 ,r , m+1, qr);
}
sum[id] = sum[id<<1] + sum[id<<1|1];
return 1;
}
int main()
{
//freopen("D://in.txt","r", stdin);
while(~scanf("%d",&M))
{
if(M == 0){printf("-1\n"); continue; }
met(sum, 0); met(flag , 0); met(last, 0);
int ans = -1;
for(int i = 1; i <= M; i++)
{
char s[2]; int d;
ex = 0;
scanf("%s",s);
if(s[0] == '?')
add(i,1,1,1,M);
else
{
scanf("%d",&d);
if(ans != -1) continue;
if(s[0] == 'O')
{
if(flag[d]) flag[d] = 0, last[d][1] = i;
else
{
int tnum = q(last[d][1], i, 1, 1, M);
if(tnum == 0) {ans = i; continue;}
else{ch(1,1,M,last[d][1],i); last[d][0] = ex; last[d][1] = i;}
}
}
else
{
if(flag[d] == 0) flag[d] = 1 , last[d][0] = i;
else
{
int tnum = q(last[d][0], i , 1 , 1 , M);
if(tnum == 0) {ans = i; continue;}
else
{
ch(1,1,M,last[d][0],i);
last[d][1] = ex;
last[d][0] = i;
}
}
}
}
}
printf("%d\n",ans);
}
return 0;
}