杭州邀请赛再现~~~
总结:1、实力弱成渣,2、配合还不够~~3、水题正确率不够高~~
A:概率水题~~~暴力搞搞~~(队友看完没有想法,当时正在想B,就木有去看~~后来队友说了下题意,感觉纯暴力就能裸过~~)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cctype>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <stack>
#define SQR(x) ((x)*(x))
#define rep(i, n) for (int i=0; i<(n); ++i)
#define repd(i,n) for(int i=1;i<=(n);++i)
#define repf(i, a, b) for (int i=(a); i<=(b); ++i)
#define reps(i, a, b) for (int i=(a); i>=(b); --i)
#define PB push_back
#define MP(A, B) make_pair(A, B)
#define pow2(n) (1<<(n))
#define pi acos(-1)
#define eps 0.00000001
#define lg(n) log10((n)*1.0)
#define MaxN 1000000
#define mod 10e+7
#define ll long long
#define typed int
using namespace std;
void data(){
freopen("data3.out","r",stdin);
freopen("data.out","w",stdout);
}
#define len ((1<<21)+100)
double ans[len];
double p[210],q[210];
int main(){
//data();
int n,m,l,r;
while(~scanf("%d%d%d%d",&n,&m,&l,&r)&&n){
repf(i,0,n){q[i]=0;p[i]=0;}
int k;
p[0]=1;
rep(i,m){
scanf("%d",&k);
rep(j,n)
{
if(p[j]-0<eps)continue;
q[(j+k)%n]+=p[j]*0.5;
q[(j-k+n)%n]+=p[j]*0.5;
}
rep(j,n){p[j]=q[j];q[j]=0.0;}
}
double sum=0;
repf(i,l-1,r-1) sum+=p[i];
printf("%.4lf\n",sum);
}
return 0;
}
B:java大数+数学(比赛的时候没能想起出正解~~~噢活~~弱者为何要战斗~~~渣)
C:裸的线段树
3种操作,1种查询~~~区间赋值,区间加上一个值,区间每个元素乘以一个值~~查询区间的p次方的和(p=1,2,3);
p只有1,2,3~~维护区间的3个和就好了~~延迟标记(加法与惩罚冲突),强制向下标记(如果操作的区间存在延迟标记的话);
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cctype>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <stack>
#define SQR(x) ((x)*(x))
#define rep(i, n) for (int i=0; i<(n); ++i)
#define repd(i,n) for(int i=1;i<=(n);++i)
#define repf(i, a, b) for (int i=(a); i<=(b); ++i)
#define reps(i, a, b) for (int i=(a); i>=(b); --i)
#define PB push_back
#define MP(A, B) make_pair(A, B)
#define pow2(n) (1<<(n))
#define pi acos(-1)
#define eps 0.00000001
#define lg(n) log10((n)*1.0)
#define MaxN 1000000
#define mod 10007
#define mod2 1000000009
#define mod3 1000007
#define inf 2147483647
#define inf2 0x7fffffffffffffff
#define ll long long
#define lson(i) ((i)<<1)
#define rson(i) ((i)<<1|1)
#define typed int
using namespace std;
void data(){
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
}
struct Tree{
int l,r;
int mark;
int val;
int s1,s2,s3;
};
Tree T[(MaxN<<2)+10];
//初始化
void init(int i,int l,int r){
T[i].l=l;T[i].r=r;T[i].mark=1;
T[i].s1=0;T[i].s2=0;T[i].s3=0;
T[i].val=0;
if(l!=r){
int mid=(l+r)/2;
init(lson(i),l,mid);
init(rson(i),mid+1,r);
}
}
//计算1,2,3次方和
void cnt(int id,int k){
int len =(T[id].r-T[id].l + 1);
T[id].s1 = k * len % mod;
T[id].s2 = ((k * k)%mod) * len %mod;
T[id].s3 = ((k * k )%mod *k)%mod*len%mod;
}
//向下延迟标记
void pushdown(int id){
if(T[id].mark){
T[lson(id)].val=T[rson(id)].val=T[id].val%mod;
cnt(lson(id),T[id].val%mod);
cnt(rson(id),T[id].val%mod);
T[lson(id)].mark = T[rson(id)].mark = T[id].mark;
T[id].mark=0;
}
}
//更新到父亲节点
void pushup(int id){
T[id].s1=T[lson(id)].s1 + T[rson(id)].s1;
T[id].s2=T[lson(id)].s2 + T[rson(id)].s2;
T[id].s3=T[lson(id)].s3 + T[rson(id)].s3;
}
/*
* root:根节点,l:更新左区间,r:右区间,
*c:更新值,p:操作(0:赋值,1:加,2:乘)
*/
void update(int root,int l,int r,int c,int p){
if(T[root].mark||!p)
if(l<=T[root].l&&r>=T[root].r){
if(!p)T[root].mark=1;
if(p==0) T[root].val=c;
else if(p==1) T[root].val+=c;
else T[root].val*=c;
T[root].val%=mod;
cnt(root,T[root].val);
return ;
}
pushdown(root);
int mid=(T[root].l+T[root].r)/2;
if(l <= mid) update(lson(root),l,r,c,p);
if(r > mid) update(rson(root),l,r,c,p);
pushup(root);
}
//查询区间p次方和
int qurry(int root,int l,int r,int p){
if(T[root].mark){
if(l<=T[root].l&&r>=T[root].r){
if(p==1) return T[root].s1;
if(p==2) return T[root].s2;
if(p==3) return T[root].s3;
}
}
if(T[root].mark)pushdown(root);
int mid=(T[root].l+T[root].r)/2;
if(r <= mid) return qurry(lson(root),l,r,p);
if(l > mid) return qurry(rson(root),l,r,p);
return (qurry(lson(root),l,r,p)+qurry(rson(root),l,r,p))%mod;
pushup(root);
}
void show(int n){
repf(i,1,(n<<2)){
cout<<i<<" "<<T[i].l<<" "<<T[i].r<<" "<<T[i].mark<<" "<<T[i].val;
cout<<" "<<T[i].s1<<" "<<T[i].s2<<" "<<T[i].s3<<endl;
}
}
int main(){
//data();
int n,m;
int k,x,y,c;
while(~scanf("%d%d",&n,&m)&n){
init(1,1,n);
rep(i,m){
scanf("%d%d%d%d",&k,&x,&y,&c);
if(k==4)printf("%d\n",(qurry(1,x,y,c)+mod)%mod);
else update(1,x,y,c,k%3);
//show(n);
}
}
return 0;
}
I:水题,队友水过~~~
J:树状数组或者STL乱搞~~队友写STL挂掉了。。。结果是第一次固定的输出没对~~居然样例没过都能交了。。ORz,而且没人发现~~~而且导致我重写树状数组想复杂了写的很糟糕~~中间浪费大堆时间~~~比赛结束查队友代码,发现bug时候各种Orz~~~
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cctype>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <stack>
#define SQR(x) ((x)*(x))
#define rep(i, n) for (int i=0; i<(n); ++i)
#define repd(i,n) for(int i=1;i<=(n);++i)
#define repf(i, a, b) for (int i=(a); i<=(b); ++i)
#define reps(i, a, b) for (int i=(a); i>=(b); --i)
#define PB push_back
#define MP(A, B) make_pair(A, B)
#define pow2(n) (1<<(n))
#define pi acos(-1)
#define eps 0.00000001
#define lg(n) log10((n)*1.0)
#define MaxN 100000
#define mod 1000000007
#define mod2 1000000009
#define mod3 1000007
#define inf 2147483647
#define inf2 0x7fffffffffffffff
#define ll long long
#define typed int
using namespace std;
void data(){
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
}
struct point{
int id;
int k;
int g;
};
int hashg[MaxN+10];
int hashk[MaxN+10];
point p[MaxN+100];
int c[MaxN+10],n;
bool cmp(point a,point b){
return a.g<b.g;
}
bool cmp2(point a,point b){
return a.id<b.id;
}
void hsp(){
rep(i,n){
hashg[i+1]=p[i].g;
p[i].g=i+1;
hashk[i+1]=p[i].id;
}
hashg[n+1] = 1000000000;
hashk[n+1] = n+1;
}
int Lowbit(int t)
{
return (t & ( -t ));
}
int Sum(int end)
{
int sum = 0;
while(end > 0)
{
sum += c[end];
end -= Lowbit(end);
}
return sum;
}
int bitsearch(int n,int key)
{
int min=0,max=n+1,mid;
while(min<max){
mid=(min+max)/2;
int cnt=Sum(mid);
if(key>cnt)min=mid+1;
else max=mid;
}
return min;
}
void plus2(int pos,int num)
{
while(pos <= n)
{
c[pos] += num;
pos += Lowbit(pos);
}
}
int bit1(int l,int r,int key){
while(l<r){
int mid=(l+r)/2;
int t=Sum(mid);
if(t>key) r=mid-1;
else if(t<key) l=mid+1;
else r=mid;
}
return l;
}
int bit2(int l,int r,int key){
while(l<r){
int mid=(l+r)/2;
int t=Sum(mid);
if(t>key) r=mid;
else l=mid+1;
}
return l;
}
int main(){
//data();
while(~scanf("%d",&n)&&n){
memset(c,0,sizeof(c));
rep(i,n){scanf("%d%d",&p[i].k,&p[i].g);p[i].id=i;}
sort(p,p+n,cmp);
hsp();
sort(p,p+n,cmp2);
plus2(p[0].g,1);
int q=n,ans;
n=n+1;
plus2(n,1);
printf("%d %d\n",p[hashk[p[0].g]].k,1);
p[n].k=1;p[n].g=n;
repf(i,1,q-1){
int k1=bit1(0,n,Sum(p[i].g));
plus2(p[i].g,1);
int k2=bit2(1,n,Sum(p[i].g));
if(k1==0) ans=p[hashk[k2]].k;
else{
if(abs(hashg[p[hashk[k1]].g]-hashg[p[i].g])<abs(hashg[p[hashk[k2]].g]-hashg[p[i].g]))
{
ans=p[hashk[k1]].k;
}else if(abs(hashg[p[hashk[k1]].g]-hashg[p[i].g])>abs(hashg[p[hashk[k2]].g]-hashg[p[i].g])){
ans=p[hashk[k2]].k;
}else{
if((hashg[p[hashk[k1]].g])<(hashg[p[hashk[k2]].g]))
ans=p[hashk[k1]].k;
else
ans=p[hashk[k2]].k;
}
}
// cout<<k1<<" "<<k2<<" "<<hashg[k1]<<" "<<hashg[k2]<<endl;
// cout<<"ans: "<<p[hashk[k1]].k<<" "<<p[hashk[k2]].k<<endl;
printf("%d %d\n",p[i].k,ans);
}
}
return 0;
}

浙公网安备 33010602011771号