Baccano

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

  • friends

  • 搜索

NOI2014 起床困难综合症

发表于 2019-08-12 | 更新于 2019-08-13 | 评论数:

从高位开始模拟这一位数也就是说先试这一位是0如果能通过测试,那么直接答案加上这个否则验证1,如果1通过测试还得验证当前加上1是否会超出m的范围其他的就是1<<30最多,还因为1<<31成了符号位而90分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
string s;
ll nm;
}a[200005];
int main()
{
ll n,m,now=0,ans=0;
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
cin>>a[i].s>>a[i].nm;
for(int i=30;i>=0;i--)
{
ll re=0;
for(int j=1;j<=n;j++)
{
if(a[j].s=="AND")
re&=((a[j].nm>>i)&1);
else if(a[j].s=="OR")
re|=((a[j].nm>>i)&1);
else
re^=((a[j].nm>>i)&1);
}
if(re==1)
{
ans+=(1<<i);
continue;
}
re=1;
for(int j=1;j<=n;j++)
{
if(a[j].s=="AND")
re&=((a[j].nm>>i)&1);
else if(a[j].s=="OR")
re|=((a[j].nm>>i)&1);
else
re^=((a[j].nm>>i)&1);
}
if(re==1)
{
if(now+(1<<i)<=m)
ans+=(1<<i),now+=(1<<i);
}
}
printf("%lld",(long long)ans);
}

Leading and Trailing LightOJ - 1282

发表于 2019-08-12 | 评论数:

求前导3位数与后导3位数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b)
{
ll ans=1;
ll base=a;
while(b)
{
if(b&1)
ans=ans%1000*base%1000,ans%=1000;
base=base%1000*base%1000,base%=1000;
b>>=1;
}
return ans%1000;
}
int main()
{
ll t;
scanf("%lld",&t);
for(int k=1;k<=t;k++)
{
ll a,b;
scanf("%lld%lld",&a,&b);
ll s2=qpow(a,b);
ll s1=pow(10,2+fmod(b*log10(a),1));
printf("Case %d: %lld %03lld\n",k,s1,s2);
}
}

Sigma Function LightOJ -1336

发表于 2019-08-12 | 评论数:

题意求1-n内约束和为偶数的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll t;
scanf("%lld",&t);
for(int k=1;k<=t;k++)
{
ll n;
scanf("%lld",&n);
printf("Case %lld: %lld\n",k,n-(ll)sqrt(n)-(ll)sqrt(n/2));
}
}

BGGS模板

发表于 2019-08-11 | 更新于 2019-08-12 | 评论数:

对于y^x=z(mod p)
判断y%p如果y%p是0的话那么没有答案,之后y%=p,z%=p如果z是1的话那么输出0剩下的就是正常的操作了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll p)
{
ll ans=1;
ll base=a;
while(b)
{
if(b&1)
ans=ans%p*base%p,ans%=p;
base=base%p*base%p,base%=p;
b>>=1;
}
return ans%p;
}
void gcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
x=1,y=0;
else
gcd(b,a%b,y,x),y-=a/b*x;
}
unordered_map<ll,ll> bk;
int main()
{
ll t,k;
scanf("%lld%lld",&t,&k);
while(t--)
{
ll y,z,p;
scanf("%lld%lld%lld",&y,&z,&p);
if(k==1)
printf("%lld\n",qpow(y,z,p)%p);
else if(k==2)
{
ll d=__gcd(y,p),x0,y0;
if(z%d)
{
printf("Orz, I cannot find x!\n");
continue;
}
ll yy=y/d,pp=p/d,zz=z/d;
gcd(y,p,x0,y0);
printf("%lld\n",(x0*zz%pp+pp)%pp);
}
else
{
if(y%p==0)
{
printf("Orz, I cannot find x!\n");
continue;
}
y%=p,z%=p;
if(z==1)
{
printf("0\n");
continue;
}
bk.clear();
ll f=0,m=ll(sqrt(p)+1);
for(ll i=0;i<m;i++)
bk[(qpow(y,i,p)%p*z%p)%p]=i;
for(ll i=1;i<=m;i++)
if(bk[qpow(y,ll(i*m),p)])
{
printf("%lld\n",ll(i*m)-bk[qpow(y,ll(i*m),p)]);
f=1;
break;
}
if(!f)
printf("Orz, I cannot find x!\n");
}
}
}

EXBSGS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
typedef long long ll;
ll mul(ll a,ll b,ll p)
{
return (a%p*b%p)%p;
}
ll bsgs(ll a,ll b,ll p)
{
a%=p,b%=p;
if(b==1) return 0;
if(!b&&!a) return 1;
if(!a) return -1;
if(!b)
{
ll ret=0,d;
while((d=__gcd(a,p))!=1)
{
++ret,p/=d;
if(p==1) return ret;
}
return -1;
}
ll ret=0,A=a,B=b,P=p,C=1,d;
while((d=__gcd(A,P))!=1)
{
if(B%d) return -1;
P/=d,B/=d;
C=mul(C,A/d,P);
++ret;
if(C==B) return ret;
}
bk.clear();
ll f=1,t=sqrt((long long)P)+1;
for(ll i=0;i<t;i++)
{
bk[mul(f,B,P)]=i;
f=mul(f,A,P);
}
ll tf=f;
f=mul(f,C,P);
for(ll i=1;i<=t;i++)
{
if(bk[f]) return ret+i*t-bk[f];
f=mul(f,tf,P);
}
return -1;
}

P3952 时间复杂度

发表于 2019-08-10 | 评论数:

#语法错误判断
F 与 E之间只需要加一个变量看一看是不是最终等于0即可,F ++ E –,然后就是判断变量是否被重复使用.在传统的NOIP2017的数据中没有这样的

1
2
3
4
5
F i 1 n  
F j 1 n
E
F j 1 n
E

如果判断不当那么这里会输出ERR的,所以我的做法是开一个栈记录一下进去的字母,然后遇到E弹出抹去标记

#复杂度计算
模拟判断变量后面第一个数是不是数字如果是分两步走
一:如果是数字那么判断一下第二个是不是变量如果是cs++否则判断两个数大小,如果颠倒那么下面的F不记录次数
二:如果是变量直接后面不记录次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string a[1005];
int bk[1005],p[1005],q,st[1005];
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n,f=0,er=0,cs=0,mf=0,ff=0,css=0,jkk=0;
string x;
cin>>n>>x;
cin.get();
memset(bk,0,sizeof(bk));
for(int i=1;i<=n;i++)
getline(cin,a[i]);
for(int i=1;i<=n;i++)
{
q=0;
for(int j=0;j<a[i].size();j++)
if(a[i][j]==' ')
p[++q]=j;
if(a[i][0]=='F')
{
f++;
bk[a[i][2]]++;
st[++jkk]=a[i][2];
if(bk[a[i][2]]>1)
{
er=1;
break;
}
if(isdigit(a[i][4]))
{
if(isdigit(a[i][p[3]+1]))
{
string x1="",x2="";
for(int k=4;k<a[i].size();k++)
if(a[i][k]!=' ')
x1+=a[i][k];
else
break;
for(int k=p[3]+1;k<a[i].size();k++)
x2+=a[i][k];
stringstream xx1,xx2;
xx1<<x1,xx2<<x2;
int s1,s2;
xx1>>s1,xx2>>s2;
if(s1>s2)
{
ff=1;
continue;
}
}
else
{
if(ff&&f)
continue;
cs++,mf=max(mf,cs);
}
}
else
{
if(isdigit(a[i][p[3]+1]))
{
ff=1;
css=cs;
}
else
continue;
}
}
else
{
f--;
bk[st[jkk]]=0;
jkk--;
cs--;
cs=max(0LL,cs);
if(f==0)
ff=0;
}
}
string ans="O(";
if(cs==0&&mf==0)
ans+="1)";
else
ans+="n^"+to_string(mf)+")";
if(er==1||f!=0)
cout<<"ERR\n";
else if(ans==x)
cout<<"Yes\n";
else
cout<<"No\n";
}
}
1…131415…20
baccano

baccano

一个蒟蒻的小家

98 日志
7 分类
37 标签
RSS
大佬们的博客
  • 老博客
  • 墨墨墨小白
  • Shawnzhou
  • 康宇
  • 惡魔菌の记事簿

来一首舒缓的音乐怎么样?

© 2020 baccano
0%