居然也有万把行了….
大家元旦快乐!!
因为有学弟要一些题目的题解,于是乎我想到一年多前写了个学校Online Judge(敏感时期需要校网访问)的爬虫,稍微改了改格式直接输出markdown语法,顺手就整理了这篇博客。
由于不少题都是非常年轻的时候写的,甚至我记得有个别题目测试数据有误。所以我不保证以下所有代码的可读性和性能,仅作备份留存之用。
学校OJ有一些题还是比较有养分的,如果有对算法设计感兴趣的后生,可以了解一下我校ACM集训队的相关情况。
1 A+B Problem
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int a,b; |
6 | cin>>a>>b; |
7 | cout<<a+b; |
8 | return 0; |
9 | } |
2 Easy Problem
Language: C++
Time: 8ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int gcd(int x,int y){ |
6 | if (y==0) return x; |
7 | x%=y; |
8 | return gcd(y,x); |
9 | } |
10 | |
11 | int main(){ |
12 | int a,b; |
13 | while (cin>>a>>b){ |
14 | int t=1; |
15 | for (int i=1;i<=b;i++){ |
16 | t=((t%a)*(b%a))%a; |
17 | } |
18 | cout<<gcd(a,t)<<endl; |
19 | } |
20 | return 0; |
21 | } |
3 切糕
Language: C++
Time: 1ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int main(){ |
6 | int T; |
7 | cin>>T; |
8 | while (T--){ |
9 | int x; |
10 | cin>>x; |
11 | if (x<=1){ |
12 | cout<<"Mission Complete!"<<endl; |
13 | } |
14 | else{ |
15 | int a=x*(x-1)/2; |
16 | if (a==1){ |
17 | cout<<"Needs at least 1 ATP!"<<endl; |
18 | } |
19 | else{ |
20 | cout<<"Needs at least "<<a<<" ATPs!"<<endl; |
21 | } |
22 | } |
23 | } |
24 | return 0; |
25 | } |
4 So much oil!!!
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int n,m; |
6 | char a[200][200]; |
7 | |
8 | void dfs(int x,int y){ |
9 | a[x][y]='Q'; |
10 | for (int i=-1;i<=1;++i){ |
11 | for (int j=-1;j<=1;++j){ |
12 | if (x+i<0||x+i>=n||y+j<0||y+j>=m) continue; |
13 | if (a[x+i][y+j]=='@'){ |
14 | dfs(x+i,y+j); |
15 | } |
16 | } |
17 | } |
18 | } |
19 | |
20 | int main(){ |
21 | while (true){ |
22 | scanf("%d%d",&n,&m); |
23 | if (n==0 && m==0) break; |
24 | for (int i=0;i<n;++i){ |
25 | scanf("%s",a[i]); |
26 | } |
27 | int ans=0; |
28 | for (int i=0;i<n;++i){ |
29 | for (int j=0;j<m;++j){ |
30 | if (a[i][j]=='@'){ //找到一片油田 |
31 | dfs(i,j);// 把这一片 油田清空 |
32 | ++ans; |
33 | } |
34 | } |
35 | } |
36 | printf("%d\n",ans); |
37 | } |
38 | return 0; |
39 | } |
5 几队周尼玛?
Language: C++
Time: 132ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int a[30005]; |
6 | |
7 | int Find(int x){ |
8 | if (a[x]==x)return x; |
9 | return a[x]=Find(a[x]); |
10 | } |
11 | |
12 | int main(){ |
13 | int T,x,t,x1,x2,fx1,fx2; |
14 | scanf("%d",&T); |
15 | while (T--){ |
16 | scanf("%d",&x); |
17 | for (int i=1;i<=x;i++) a[i]=i; |
18 | scanf("%d",&t); |
19 | while (t--){ |
20 | scanf("%d%d",&x1,&x2); |
21 | fx1=Find(x1); |
22 | fx2=Find(x2); |
23 | if (fx1!=fx2){ |
24 | a[fx2]=fx1; |
25 | } |
26 | } |
27 | int c=0; |
28 | for (int i=1;i<=x;i++){ |
29 | if (a[i]==i) c++; |
30 | } |
31 | printf("%d\n",c); |
32 | } |
33 | return 0; |
34 | } |
7 明7暗7
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int ansa,d; |
5 | int base[10]; |
6 | int dp[15][10][2]; |
7 | int num[10]; |
8 | |
9 | int dfs(int p,int x,bool tag,bool limit){ |
10 | if (p==-1){ |
11 | if (x==0||tag) return 1; |
12 | return 0; |
13 | } |
14 | if (!limit && dp[p][x][tag]!=-1) return dp[p][x][tag]; |
15 | int ret=0; |
16 | for (int i=limit?num[p]:9;i>=0;--i){ |
17 | if (i==7) ret+=dfs(p-1,x,true,limit&&i==num[p]); |
18 | else ret+=dfs(p-1,(x+i*base[p])%7,tag,limit&&i==num[p]); |
19 | } |
20 | if (!limit) dp[p][x][tag]=ret; |
21 | return ret; |
22 | } |
23 | |
24 | int solve(int x){ |
25 | int len=0; |
26 | while (x){ |
27 | num[len++]=x%10; |
28 | x/=10; |
29 | } |
30 | return dfs(len-1,0,false,true); |
31 | } |
32 | |
33 | bool check(int x){ |
34 | int ansb=solve(x); |
35 | if (ansb-ansa>=d) return true; |
36 | return false; |
37 | } |
38 | |
39 | void init(){ |
40 | base[0]=1; |
41 | for (int i=1;i<10;++i){ |
42 | base[i]=base[i-1]*10%7; |
43 | } |
44 | memset(dp,-1,sizeof(dp)); |
45 | } |
46 | |
47 | int main(){ |
48 | int a;init(); |
49 | while (~scanf("%d%d",&a,&d)){ |
50 | ansa=solve(a); |
51 | int L=a,R=1000000000,mid,ans=-1; |
52 | while (L<=R){ |
53 | mid=(L+R)>>1; |
54 | if (check(mid)){ |
55 | ans=mid; |
56 | R=mid-1; |
57 | } |
58 | else{ |
59 | L=mid+1; |
60 | } |
61 | } |
62 | printf("%d\n",ans); |
63 | } |
64 | return 0; |
65 | } |
8 下一个回文数
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[100010]; |
5 | char L[50010]; |
6 | char R[50010]; |
7 | |
8 | int main(){ |
9 | int T,len; |
10 | bool flag; |
11 | scanf("%d",&T); |
12 | while (T--){ |
13 | scanf("%s",a); |
14 | // memset(L,'\0',sizeof(L)); |
15 | // memset(R,'\0',sizeof(R)); |
16 | len=strlen(a); |
17 | // strncpy(L,a,len/2); |
18 | // strncpy(R,a+(len+1)/2,len/2); |
19 | //// puts(L); |
20 | //// puts(R); |
21 | flag=true; |
22 | for (int i=0;i<len/2;++i){ |
23 | // cout<<a[(len+1)/2+i]<<' '<<a[len/2-1-i]<<endl; |
24 | if (a[(len+1)/2+i]>a[len/2-1-i]) break; |
25 | if (a[(len+1)/2+i]<a[len/2-1-i]){ |
26 | flag=false; |
27 | break; |
28 | } |
29 | } |
30 | if (flag){ |
31 | for (int i=(len-1)/2;i>=0;--i){ |
32 | if (a[i]!='9'){ |
33 | flag=false; |
34 | a[i]=a[i]+1; |
35 | break; |
36 | } |
37 | } |
38 | if (!flag){ |
39 | for (int i=0;i<=(len-1)/2;++i) putchar(a[i]); |
40 | for (int i=len/2-1;i>=0;--i) putchar(a[i]); |
41 | putchar('\n'); |
42 | } |
43 | else{ |
44 | putchar('1'); |
45 | for (int i=0;i<len-1;++i) putchar('0'); |
46 | printf("1\n"); |
47 | } |
48 | } |
49 | else{ |
50 | for (int i=0;i<=(len-1)/2;++i) putchar(a[i]); |
51 | for (int i=len/2-1;i>=0;--i) putchar(a[i]); |
52 | putchar('\n'); |
53 | } |
54 | } |
55 | return 0; |
56 | } |
9 农场的边长
Language: C++
Time: 156ms
1 |
|
2 | using namespace std; |
3 | |
4 | int m,n; |
5 | int mp[1010][1010]; |
6 | |
7 | bool solve(int x){ |
8 | --x; |
9 | for (int i=0;i+x<m;++i){ |
10 | for (int j=0;j+x<n;++j){ |
11 | //i,j->(i+x),(j+x) |
12 | bool flag=true; |
13 | for (int ii=0;ii<=x && flag;++ii){ |
14 | for (int jj=0;jj<=x;++jj){ |
15 | if (!mp[i+ii][j+jj]){ |
16 | flag=false; |
17 | break; |
18 | } |
19 | } |
20 | } |
21 | if (flag) return true; |
22 | } |
23 | } |
24 | return false; |
25 | } |
26 | |
27 | int main(){ |
28 | int T;scanf("%d",&T); |
29 | while (T--){ |
30 | scanf("%d%d",&m,&n); |
31 | for (int i=0;i<m;++i){ |
32 | for (int j=0;j<n;++j){ |
33 | scanf("%d",&mp[i][j]); |
34 | } |
35 | } |
36 | int l=0,r=min(m,n)+1,mid; |
37 | while(r-l>1){ |
38 | mid=(l+r)>>1; |
39 | if (solve(mid)){ |
40 | l=mid; |
41 | } |
42 | else{ |
43 | r=mid; |
44 | } |
45 | // printf("%d %d\n",l,r); |
46 | // system("pause"); |
47 | } |
48 | printf("%d\n",l); |
49 | } |
50 | return 0; |
51 | } |
10 滑雪(小数据)
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int maze[105][105]; |
5 | int ans[105][105]; |
6 | bool vis[105][105]; |
7 | int m,n; |
8 | int d[4][2]={1,0,-1,0,0,1,0,-1}; |
9 | |
10 | bool can_move(int x,int y){ |
11 | if (x<0 || x>=m) return false; |
12 | if (y<0 || y>=n) return false; |
13 | return true; |
14 | } |
15 | |
16 | int dfs(int x,int y){ |
17 | if (vis[x][y]) return ans[x][y]; |
18 | int cur=0; |
19 | for (int i=0;i<4;++i){ |
20 | if (can_move(x+d[i][0],y+d[i][1]) && maze[x+d[i][0]][y+d[i][1]]<maze[x][y]){ |
21 | cur=max(cur,1+dfs(x+d[i][0],y+d[i][1])); |
22 | } |
23 | } |
24 | ans[x][y]=cur; |
25 | return cur; |
26 | } |
27 | |
28 | |
29 | int main(){ |
30 | scanf("%d%d",&m,&n); |
31 | int minn,minm,minx=10000; |
32 | for (int i=0;i<m;++i){ |
33 | for (int j=0;j<n;++j){ |
34 | scanf("%d",&maze[i][j]); |
35 | if (maze[i][j]<minx){ |
36 | minx=maze[i][j]; |
37 | minm=i;minn=j; |
38 | } |
39 | } |
40 | } |
41 | memset(vis,false,sizeof(vis)); |
42 | vis[minm][minn]=true; |
43 | ans[minm][minn]=0; |
44 | int realans=-1; |
45 | for (int i=0;i<m;++i){ |
46 | for (int j=0;j<n;++j){ |
47 | realans=max(realans,dfs(i,j)); |
48 | } |
49 | } |
50 | // for (int i=0;i<m;++i){ |
51 | // for (int j=0;j<n;++j){ |
52 | // printf("%d ",ans[i][j]); |
53 | // } |
54 | // putchar('\n'); |
55 | // } |
56 | printf("%d",realans+1); |
57 | return 0; |
58 | } |
11 滑雪(大数据)
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int maze[105][105]; |
5 | int ans[105][105]; |
6 | bool vis[105][105]; |
7 | int m,n; |
8 | int d[4][2]={1,0,-1,0,0,1,0,-1}; |
9 | |
10 | bool can_move(int x,int y){ |
11 | if (x<0 || x>=m) return false; |
12 | if (y<0 || y>=n) return false; |
13 | return true; |
14 | } |
15 | |
16 | int dfs(int x,int y){ |
17 | if (vis[x][y]) return ans[x][y]; |
18 | int cur=0; |
19 | for (int i=0;i<4;++i){ |
20 | if (can_move(x+d[i][0],y+d[i][1]) && maze[x+d[i][0]][y+d[i][1]]<maze[x][y]){ |
21 | cur=max(cur,1+dfs(x+d[i][0],y+d[i][1])); |
22 | } |
23 | } |
24 | ans[x][y]=cur; |
25 | vis[x][y]=true; |
26 | return cur; |
27 | } |
28 | |
29 | |
30 | int main(){ |
31 | scanf("%d%d",&m,&n); |
32 | int minn,minm,minx=10000; |
33 | for (int i=0;i<m;++i){ |
34 | for (int j=0;j<n;++j){ |
35 | scanf("%d",&maze[i][j]); |
36 | if (maze[i][j]<minx){ |
37 | minx=maze[i][j]; |
38 | minm=i;minn=j; |
39 | } |
40 | } |
41 | } |
42 | memset(vis,false,sizeof(vis)); |
43 | vis[minm][minn]=true; |
44 | ans[minm][minn]=0; |
45 | int realans=-1; |
46 | for (int i=0;i<m;++i){ |
47 | for (int j=0;j<n;++j){ |
48 | realans=max(realans,dfs(i,j)); |
49 | } |
50 | } |
51 | // for (int i=0;i<m;++i){ |
52 | // for (int j=0;j<n;++j){ |
53 | // printf("%d ",ans[i][j]); |
54 | // } |
55 | // putchar('\n'); |
56 | // } |
57 | printf("%d",realans+1); |
58 | return 0; |
59 | } |
13 多项式构造问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int a[9]; |
6 | |
7 | int main(){ |
8 | while (~scanf("%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8])){ |
9 | bool flag=true; |
10 | for (int i=0;i<8 && flag;++i){ |
11 | if (a[i]!=0) flag=false; |
12 | } |
13 | if (flag){printf("%d\n",a[8]);continue;} |
14 | int p=0; while (a[p]==0) ++p; |
15 | if (a[p]<0) {printf("-"); a[p]=-a[p];} |
16 | if (a[p]!=1) printf("%d",a[p]); |
17 | putchar('x'); |
18 | if (p!=7){ |
19 | printf("^%d",8-p); |
20 | for (int i=p+1;i<8;++i){ |
21 | if (a[i]==0) continue; |
22 | if (a[i]<0){a[i]=-a[i];printf(" - ");} |
23 | else printf(" + "); |
24 | if (a[i]!=1) printf("%d",a[i]); |
25 | putchar('x'); |
26 | if (i!=7) printf("^%d",8-i); |
27 | } |
28 | } |
29 | if (a[8]==0){putchar('\n');continue;} |
30 | if (a[8]<0){a[8]=-a[8];printf(" - ");} |
31 | else printf(" + "); |
32 | printf("%d\n",a[8]); |
33 | } |
34 | return 0; |
35 | } |
14 三角迷宫
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 | |
7 | static int a[9][9]; |
8 | static int vis[10]; |
9 | bool flag; |
10 | |
11 | void dfs(int px,int py){ |
12 | if (px==8){ |
13 | flag=true; |
14 | return; |
15 | } |
16 | if (vis[a[px+1][py]]==0){ |
17 | vis[a[px+1][py]]=1; |
18 | dfs(px+1,py); |
19 | vis[a[px+1][py]]=0; |
20 | } |
21 | if (flag){ |
22 | return; |
23 | } |
24 | if (vis[a[px+1][py+1]]==0){ |
25 | vis[a[px+1][py+1]]=1; |
26 | dfs(px+1,py+1); |
27 | vis[a[px+1][py+1]]=0; |
28 | } |
29 | return; |
30 | } |
31 | |
32 | int main(){ |
33 | int T,kase=0; |
34 | scanf("%d",&T); |
35 | while (T--){ |
36 | for (int i=0;i<9;i++){ |
37 | for (int j=0;j<=i;j++){ |
38 | scanf("%d",&a[i][j]); |
39 | } |
40 | } |
41 | flag=false; |
42 | memset(vis,0,sizeof(vis)); |
43 | vis[a[0][0]]=1; |
44 | dfs(0,0); |
45 | printf("Case %d:\n",++kase); |
46 | if (flag) printf("Possible\n"); |
47 | else printf("Impossible\n"); |
48 | } |
49 | return 0; |
50 | } |
15 zy 的计算机
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int m1,m2,r1,r2,r3; |
5 | |
6 | void A(){r1=m1;} |
7 | void B(){r2=m2;} |
8 | void C(){m1=r3;} |
9 | void D(){m2=r3;} |
10 | void E(){r3=r1+r2;} |
11 | void F(){r3=r1-r2;} |
12 | |
13 | int main(){ |
14 | char x; |
15 | while (~scanf("%d%d%~c",&m1,&m2)){ |
16 | r1=r2=r3=0; |
17 | while ((x=getchar())!='\n'){ |
18 | if (x=='A') A(); |
19 | else if (x=='B') B(); |
20 | else if (x=='C') C(); |
21 | else if (x=='D') D(); |
22 | else if (x=='E') E(); |
23 | else if (x=='F') F(); |
24 | } |
25 | printf("%d,%d\n",m1,m2); |
26 | } |
27 | return 0; |
28 | } |
16 打吊针问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[150]={1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,276,300,325,351,378,406,435,465,496,528,561,595,630,666,703,741,780,820,861,903,946,990,1035,1081,1128,1176,1225,1275,1326,1378,1431,1485,1540,1596,1653,1711,1770,1830,1891,1953,2016,2080,2145,2211,2278,2346,2415,2485,2556,2628,2701,2775,2850,2926,3003,3081,3160,3240,3321,3403,3486,3570,3655,3741,3828,3916,4005,4095,4186,4278,4371,4465,4560,4656,4753,4851,4950,5050}; |
5 | |
6 | int main(){ |
7 | int v,d,ans; |
8 | while (~scanf("%d%d",&v,&d)){ |
9 | ans=ceil(1.0*v/d); |
10 | for (int i=0;i<150;++i){ |
11 | if (ans<=a[i]){ |
12 | printf("%d\n",ans+i); |
13 | break; |
14 | } |
15 | } |
16 | } |
17 | return 0; |
18 | } |
18 迷宫
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int maze[10][10]; |
5 | bool vis[10][10]; |
6 | pair <int,int> fa[10][10]; |
7 | queue<pair<int,int> >que; |
8 | int d[4][2]={1,0,-1,0,0,1,0,-1}; |
9 | |
10 | bool can_vis(int x,int y){ |
11 | if (x<0||x>4) return false; |
12 | if (y<0||y>4) return false; |
13 | return true; |
14 | } |
15 | |
16 | void dfs(int x,int y){ |
17 | if (x==0 && y==0){ |
18 | printf("(0, 0)\n"); |
19 | return; |
20 | } |
21 | dfs(fa[x][y].first,fa[x][y].second); |
22 | printf("(%d, %d)\n",x,y); |
23 | } |
24 | |
25 | void bfs(){ |
26 | int curx,cury; |
27 | int nxtx,nxty; |
28 | while (!que.empty()){ |
29 | curx=que.front().first; |
30 | cury=que.front().second; |
31 | que.pop(); |
32 | if (curx==4&&cury==4){ |
33 | dfs(4,4); |
34 | return; |
35 | } |
36 | for (int i=0;i<4;++i){ |
37 | nxtx=curx+d[i][0]; |
38 | nxty=cury+d[i][1]; |
39 | if (!can_vis(nxtx,nxty)) continue; |
40 | if (vis[nxtx][nxty]) continue; |
41 | if (maze[nxtx][nxty]==1) continue; |
42 | vis[nxtx][nxty]=true; |
43 | fa[nxtx][nxty]=make_pair(curx,cury); |
44 | que.push(make_pair(nxtx,nxty)); |
45 | } |
46 | } |
47 | printf("-1\n"); |
48 | } |
49 | |
50 | int main(){ |
51 | int T; |
52 | scanf("%d",&T); |
53 | for (int kase=1;kase<=T;++kase){ |
54 | memset(vis,false,sizeof(vis)); |
55 | while (!que.empty()) que.pop(); |
56 | for (int i=0;i<5;++i){ |
57 | for (int j=0;j<5;++j){ |
58 | scanf("%d",&maze[i][j]); |
59 | } |
60 | } |
61 | que.push(make_pair(0,0)); |
62 | vis[0][0]=true; |
63 | fa[0][0]=make_pair(0,0); |
64 | printf("Case %d:\n",kase); |
65 | bfs(); |
66 | } |
67 | } |
23 素数组合
Language: C++
Time: 60ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | bool is_prime(ll x){ |
6 | if (x<=1) return false; |
7 | if (x==2) return true; |
8 | if (x%2==0) return false; |
9 | for (ll i=3;i*i<=x;++i){ |
10 | if (x%i==0) return false; |
11 | } |
12 | return true; |
13 | } |
14 | |
15 | ll a[25]; |
16 | int n,k; |
17 | int cnt; |
18 | |
19 | void dfs(int p,int d,ll sum){ |
20 | if (d==k){ |
21 | // cout<<sum<<endl; |
22 | if (is_prime(sum)) ++cnt; |
23 | return; |
24 | } |
25 | if (p>=n) return; |
26 | for (int i=p;i<n;++i){ |
27 | dfs(i+1,d+1,sum+a[i]); |
28 | } |
29 | return; |
30 | } |
31 | |
32 | int main(){ |
33 | while (~scanf("%d%d",&n,&k)){ |
34 | cnt=0; |
35 | for (int i=0;i<n;++i){ |
36 | scanf("%lld",&a[i]); |
37 | } |
38 | dfs(0,0,0); |
39 | printf("%d\n",cnt); |
40 | } |
41 | return 0; |
42 | } |
24 算法题1 矩阵连乘问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 | |
7 | pair<int,int> a[30]; |
8 | pair<int,int> lfa[30][30]; |
9 | pair<int,int> rfa[30][30]; |
10 | int L[30],R[30]; |
11 | int dp[30][30]; |
12 | int n; |
13 | |
14 | void init(){ |
15 | for (int i=0;i<30;++i) |
16 | for (int j=0;j<30;++j) |
17 | dp[i][j]=INF; |
18 | for (int i=0;i<30;++i) |
19 | dp[i][i]=0; |
20 | for (int i=0;i<n-1;++i) |
21 | dp[i][i+1]=a[i].x*a[i].y*a[i+1].y; |
22 | for (int i=0;i<30;++i) |
23 | for (int j=0;j<30;++j) |
24 | lfa[i][j]=rfa[i][j]=make_pair(i,j); |
25 | memset(L,0,sizeof(L)); |
26 | memset(R,0,sizeof(R)); |
27 | --L[0]; |
28 | --R[n-1]; |
29 | } |
30 | |
31 | void dfs(pair<int,int> a){ |
32 | int l=a.x,r=a.y; |
33 | if (l!=r){ |
34 | ++L[l];++R[r]; |
35 | } |
36 | if (lfa[l][r]!=a) dfs(lfa[l][r]); |
37 | if (rfa[l][r]!=a) dfs(rfa[l][r]); |
38 | // printf("(%d,%d)\n",l,r); |
39 | } |
40 | |
41 | int main(){ |
42 | int T,tmp,kase=0; |
43 | while (~scanf("%d",&n)){ |
44 | memset(a,0,sizeof(a)); |
45 | scanf("%d",&a[0].x); |
46 | for (int i=0;i<n;++i){ |
47 | scanf("%d",&a[i].y); |
48 | a[i+1].x=a[i].y; |
49 | } |
50 | a[n].x=0; |
51 | init(); |
52 | for (int i=2;i<=n;++i){ |
53 | for (int j=0;j+i<n;++j){ |
54 | for (int k=0;k<=i-1;++k){ |
55 | // [j,j+i] =====> [j,j+k] + [j+k+1,j+i] |
56 | tmp=dp[j][j+i]; |
57 | dp[j][j+i]=min(dp[j][j+i],dp[j][j+k]+dp[j+k+1][j+i]+(a[j].x)*(a[j+k].y)*(a[j+i].y)); |
58 | if (dp[j][j+i]!=tmp){ |
59 | lfa[j][j+i]=make_pair(j,j+k); |
60 | rfa[j][j+i]=make_pair(j+k+1,j+i); |
61 | } |
62 | } |
63 | } |
64 | } |
65 | dfs(make_pair(0,n-1)); |
66 | printf("Case %d\n%d ",++kase,dp[0][n-1]); |
67 | for (int i=0;i<n;++i){ |
68 | for (int j=0;j<L[i];++j) putchar('('); |
69 | printf("A%d",i+1); |
70 | for (int j=0;j<R[i];++j) putchar(')'); |
71 | } |
72 | putchar('\n'); |
73 | // for (int j=0;j<n;++j){ |
74 | // for (int k=0;k<n;++k){ |
75 | // if (dp[j][k]==INF) printf(" ."); |
76 | // else printf("%6d",dp[j][k]); |
77 | // } |
78 | // putchar('\n'); |
79 | // } |
80 | } |
81 | return 0; |
82 | } |
25 算法题2 最长公共子序列
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[70],b[70]; |
5 | int dp[70][70]; |
6 | |
7 | int main(){ |
8 | int T,n1,n2; |
9 | char tmp[3]; |
10 | scanf("%d",&T); |
11 | for (int kase=1;kase<=T;++kase){ |
12 | scanf("%d%d",&n1,&n2); |
13 | for (int i=1;i<=n1;++i){//a lie |
14 | scanf("%s",tmp); |
15 | a[i]=tmp[0]; |
16 | dp[i][0]=0; |
17 | } |
18 | for (int i=1;i<=n2;++i){//b hang |
19 | scanf("%s",tmp); |
20 | b[i]=tmp[0]; |
21 | dp[0][i]=0; |
22 | } |
23 | dp[0][0]=0; |
24 | for (int i=1;i<=n1;++i){ |
25 | for (int j=1;j<=n2;++j){ |
26 | if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; |
27 | else dp[i][j]=max(dp[i][j-1],dp[i-1][j]); |
28 | } |
29 | } |
30 | printf("Case %d\n%d\n",kase,dp[n1][n2]); |
31 | } |
32 | return 0; |
33 | } |
26 算法题3 银币问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,ans; |
6 | while (scanf("%d",&n),n){ |
7 | printf("%d\nTimes:",n); |
8 | ans=1; |
9 | while(n>3){ |
10 | n=(int)(ceil(1.0*n/3.0)); |
11 | ++ans; |
12 | } |
13 | printf("%d\n",ans); |
14 | } |
15 | return 0; |
16 | } |
27 算法题4 哈夫曼编码
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | class Binary_Tree_Node{ |
5 | public: |
6 | int value,pos[2],id; |
7 | Binary_Tree_Node *left_child,*right_child; |
8 | Binary_Tree_Node(int v=0,Binary_Tree_Node *l=NULL,Binary_Tree_Node *r=NULL):value(v),left_child(l),right_child(r){} |
9 | inline void set_position(int x,int y){ |
10 | pos[0]=x;pos[1]=y; |
11 | } |
12 | inline void set_id(int x){ |
13 | id=x; |
14 | } |
15 | }; |
16 | |
17 | class Binary_Tree{ |
18 | protected: |
19 | int depth,id; |
20 | Binary_Tree_Node *root; |
21 | |
22 | void clear(Binary_Tree_Node *p){ |
23 | if (p==NULL) return; |
24 | clear(p->left_child); |
25 | clear(p->right_child); |
26 | delete p;p=NULL; |
27 | } |
28 | |
29 | void set_position(Binary_Tree_Node *p,int x,int y,int dx){ |
30 | if (p==NULL) return; |
31 | p->set_position(x,y); |
32 | set_position(p->left_child,x-dx/2,y+1,dx/2); |
33 | set_position(p->right_child,x+dx/2,y+1,dx/2); |
34 | } |
35 | |
36 | public: |
37 | ~Binary_Tree(){clear();} |
38 | |
39 | Binary_Tree(int value,int c){ |
40 | root=new Binary_Tree_Node(value); |
41 | root->set_id(c); |
42 | depth=1;id=c; |
43 | } |
44 | |
45 | Binary_Tree(Binary_Tree *l,Binary_Tree *r,int c){ |
46 | assert(l!=NULL);assert(r!=NULL); |
47 | root=new Binary_Tree_Node(l->get_value()+r->get_value(),l->root,r->root); |
48 | depth=max(l->depth,r->depth)+1;id=c; |
49 | } |
50 | |
51 | inline int get_depth()const{ |
52 | return depth; |
53 | } |
54 | |
55 | inline int get_value() const{ |
56 | assert(root!=NULL); |
57 | return root->value; |
58 | } |
59 | |
60 | inline Binary_Tree_Node* get_root() const{ |
61 | assert(root!=NULL); |
62 | return root; |
63 | } |
64 | |
65 | void clear(){ |
66 | clear(root); |
67 | root=NULL; |
68 | depth=-1; |
69 | } |
70 | |
71 | void set_position(int base){ |
72 | assert(root!=NULL); |
73 | set_position(root,base+(1<<(depth-1)),1,1<<(depth-1)); |
74 | } |
75 | |
76 | bool operator<(const Binary_Tree& qmh) const{ |
77 | if (get_value()==qmh.get_value()) return id<qmh.id; |
78 | return get_value()>qmh.get_value(); |
79 | } |
80 | }; |
81 | |
82 | struct cmp{ |
83 | bool operator()(const Binary_Tree* a,const Binary_Tree* b) const{ |
84 | return (*a)<(*b); |
85 | } |
86 | }; |
87 | |
88 | priority_queue<Binary_Tree*,vector<Binary_Tree*>,cmp> que; |
89 | |
90 | const bool logging=false; |
91 | |
92 | void display(){ |
93 | if (!logging) return; |
94 | priority_queue<Binary_Tree*,vector<Binary_Tree*>,cmp> q=que; |
95 | while (!q.empty()){ |
96 | printf("%d ",q.top()->get_value()); |
97 | q.pop(); |
98 | } |
99 | putchar('\n'); |
100 | } |
101 | |
102 | Binary_Tree* merge(int &cnt){ |
103 | Binary_Tree *l,*r,*p; |
104 | while (true){ |
105 | display(); |
106 | l=que.top();que.pop(); |
107 | if (que.empty()) return l; |
108 | r=que.top();que.pop(); |
109 | p=new Binary_Tree(l,r,cnt++); |
110 | que.push(p); |
111 | } |
112 | } |
113 | |
114 | int num[100]; |
115 | string ans[100]; |
116 | |
117 | void dfs(Binary_Tree_Node* p,string& cur){ |
118 | if (p->left_child==NULL){ |
119 | assert(p->right_child==NULL); |
120 | ans[p->id]=cur; |
121 | } |
122 | else{ |
123 | assert(p->right_child!=NULL); |
124 | cur.push_back('1'); |
125 | dfs(p->left_child,cur); |
126 | cur.erase(--cur.end()); |
127 | cur.push_back('0'); |
128 | dfs(p->right_child,cur); |
129 | cur.erase(--cur.end()); |
130 | } |
131 | } |
132 | |
133 | void get_ans(Binary_Tree* t,int kase,int n){ |
134 | cout<<"Case "<<kase<<endl; |
135 | string cur=""; |
136 | dfs(t->get_root(),cur); |
137 | for (int i=0;i<n;++i){ |
138 | cout<<num[i]<<' '<<ans[i]<<endl; |
139 | } |
140 | cout<<endl; |
141 | } |
142 | |
143 | int main(){ |
144 | int T,n,x,kase=0; |
145 | cin>>T; |
146 | while (T--){ |
147 | int cnt=0; |
148 | cin>>n; |
149 | for (int i=0;i<n;++i){ |
150 | cin>>num[i]; |
151 | Binary_Tree* p=new Binary_Tree(num[i],cnt++); |
152 | que.push(p); |
153 | } |
154 | Binary_Tree* result=merge(cnt); |
155 | get_ans(result,++kase,n); |
156 | result->clear(); |
157 | } |
158 | return 0; |
159 | } |
28 算法题5 Dijkstra算法(最短距离)
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef pair<int,int> P; |
4 | |
5 | const int maxn = 150; |
6 | |
7 | int d[maxn]; |
8 | int vis[maxn]; |
9 | int n; |
10 | |
11 | struct node { |
12 | int to; |
13 | int cost; |
14 | }; |
15 | |
16 | vector<node>g[maxn]; |
17 | |
18 | void dij(int s) { |
19 | memset(d,0x3f,sizeof(d)); |
20 | memset(vis,0,sizeof(vis)); |
21 | d[s]=0; |
22 | priority_queue< P,vector<P>,greater<P> >que; |
23 | que.push(P(0,1)); |
24 | while(!que.empty()) { |
25 | P a=que.top(); |
26 | que.pop(); |
27 | int u=a.second; |
28 | if(vis[u]) continue; |
29 | vis[u]=1; //or if(d[u]<a.first) continue; optimize in cf 938d |
30 | for(int j=0; j<g[u].size(); j++) { |
31 | node e=g[u][j]; |
32 | if(!vis[e.to]&&d[e.to]>e.cost+d[u]) { |
33 | d[e.to]=e.cost+d[u]; |
34 | que.push(P(d[e.to],e.to)); |
35 | } |
36 | } |
37 | } |
38 | } |
39 | |
40 | int main() { |
41 | int tmp,kase=0; |
42 | while (~scanf("%d",&n)){ |
43 | for (int i=0;i<maxn;++i){ |
44 | g[i].clear(); |
45 | } |
46 | for (int i=1;i<=n;++i){ |
47 | for (int j=1;j<=n;++j){ |
48 | scanf("%d",&tmp); |
49 | if (tmp!=-1){ |
50 | g[i].push_back((node){j,tmp}); |
51 | } |
52 | } |
53 | } |
54 | scanf("%d",&tmp); |
55 | dij(tmp); |
56 | scanf("%d",&tmp); |
57 | printf("Case %d\n%d\n",++kase,d[tmp]); |
58 | } |
59 | return 0; |
60 | } |
29 3色问题
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | // len,pre,1st |
7 | ll dp[34][3][3]; |
8 | |
9 | int main(){ |
10 | int n; |
11 | ll ans; |
12 | while (cin>>n){ |
13 | if (n==1){ |
14 | cout<<3<<endl; |
15 | continue; |
16 | } |
17 | dp[1][0][0]=dp[1][1][1]=dp[1][2][2]=1; |
18 | for (int i=2;i<=n;++i){ |
19 | for (int j=0;j<3;++j){ |
20 | dp[i][0][j]=dp[i-1][1][j]+dp[i-1][2][j]; |
21 | dp[i][1][j]=dp[i-1][0][j]+dp[i-1][2][j]; |
22 | dp[i][2][j]=dp[i-1][0][j]+dp[i-1][1][j]; |
23 | } |
24 | } |
25 | ans=0; |
26 | for (int i=0;i<3;++i){ |
27 | for (int j=0;j<3;++j){ |
28 | if (i==j) continue; |
29 | ans+=dp[n][i][j]; |
30 | } |
31 | } |
32 | cout<<ans<<endl; |
33 | } |
34 | return 0; |
35 | } |
30 3进制计算机
Language: C++
Time: 312ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int main(){ |
6 | unsigned int x; |
7 | while (scanf("%d",&x)==1){ |
8 | if (x==0){ |
9 | printf("0\n"); |
10 | continue; |
11 | } |
12 | int n=1+(int)(log(x)/log(3)); |
13 | int temp=(int)(pow(3,n-1)); |
14 | while (n--){ |
15 | putchar(x/temp+'0'); |
16 | x%=temp; |
17 | temp/=3; |
18 | } |
19 | putchar('\n'); |
20 | } |
21 | return 0; |
22 | } |
32 樱花庄的最短路
Language: C++
Time: 376ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 | int a[5005]; |
7 | |
8 | int main(){ |
9 | int T,n; |
10 | cin>>T; |
11 | while(T--){ |
12 | cin>>n; |
13 | for (int i=0;i<n;i++){ |
14 | scanf("%d",&a[i]); |
15 | } |
16 | sort(a,a+n); |
17 | int s=a[n/2],sum=0; |
18 | for (int i=0;i<n;i++){ |
19 | sum+=fabs(s-a[i]); |
20 | } |
21 | printf("%d\n",sum); |
22 | } |
23 | return 0; |
24 | } |
33 Sorting
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 | int a[105]; |
6 | int main(){ |
7 | int T,kase=0,x; |
8 | cin>>T; |
9 | while (T--){ |
10 | int x; |
11 | cin>>x; |
12 | for (int i=0;i<x;i++){ |
13 | cin>>a[i]; |
14 | } |
15 | sort(a,a+x); |
16 | cout<<"Case #"<<++kase<<":"; |
17 | for (int i=0;i<x;i++){ |
18 | cout<<' '<<a[i]; |
19 | } |
20 | cout<<endl<<endl; |
21 | } |
22 | return 0; |
23 | } |
35 Sum up
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | //double ans[105]; |
5 | // |
6 | //void init(){ |
7 | // memset(ans,0,sizeof(ans)); |
8 | // for (int i=1;i<=100;++i){ |
9 | // ans[i]=ans[i-1]+i*(i+1)/2; |
10 | // } |
11 | //} |
12 | // |
13 | //void prt(int x){ |
14 | // int cnt=0; |
15 | // double tmp=ans[x]; |
16 | // printf("%f ",tmp); |
17 | // while (tmp>=10){ |
18 | // tmp/=10;++cnt; |
19 | // } |
20 | // printf("%.2fE%d\n",tmp,cnt); |
21 | //} |
22 | // |
23 | //int main(){ |
24 | // init(); |
25 | // int x; |
26 | // for (int i=1;i<=100;++i) prt(i); |
27 | //// while (scanf("%d",&x),x) prt(x); |
28 | // return 0; |
29 | //} |
30 | |
31 | |
32 | int main(){ |
33 | int x; |
34 | while (scanf("%d",&x),x); |
35 | printf("1.00E0\n\ |
36 | 4.00E0\n\ |
37 | 1.00E1\n\ |
38 | 2.00E1\n\ |
39 | 3.50E1\n\ |
40 | 5.60E1\n\ |
41 | 8.40E1\n\ |
42 | 1.20E2\n\ |
43 | 1.65E2\n\ |
44 | 2.20E2\n\ |
45 | 2.86E2\n\ |
46 | 3.64E2\n\ |
47 | 4.55E2\n\ |
48 | 5.60E2\n\ |
49 | 6.80E2\n\ |
50 | 8.16E2\n\ |
51 | 9.69E2\n\ |
52 | 1.14E3\n\ |
53 | 1.33E3\n\ |
54 | 1.54E3\n\ |
55 | 1.77E3\n\ |
56 | 2.02E3\n\ |
57 | 2.30E3\n\ |
58 | 2.60E3\n\ |
59 | 2.92E3\n\ |
60 | 3.28E3\n\ |
61 | 3.65E3\n\ |
62 | 4.06E3\n\ |
63 | 4.49E3\n\ |
64 | 4.96E3\n\ |
65 | 5.46E3\n\ |
66 | 5.98E3\n\ |
67 | 6.55E3\n\ |
68 | 7.14E3\n\ |
69 | 7.77E3\n\ |
70 | 8.44E3\n\ |
71 | 9.14E3\n\ |
72 | 9.88E3\n\ |
73 | 1.07E4\n\ |
74 | 1.15E4\n\ |
75 | 1.23E4\n\ |
76 | 1.32E4\n\ |
77 | 1.42E4\n\ |
78 | 1.52E4\n\ |
79 | 1.62E4\n\ |
80 | 1.73E4\n\ |
81 | 1.84E4\n\ |
82 | 1.96E4\n\ |
83 | 2.08E4\n\ |
84 | 2.21E4\n\ |
85 | 2.34E4\n\ |
86 | 2.48E4\n\ |
87 | 2.62E4\n\ |
88 | 2.77E4\n\ |
89 | 2.93E4\n\ |
90 | 3.09E4\n\ |
91 | 3.25E4\n\ |
92 | 3.42E4\n\ |
93 | 3.60E4\n\ |
94 | 3.78E4\n\ |
95 | 3.97E4\n\ |
96 | 4.17E4\n\ |
97 | 4.37E4\n\ |
98 | 4.58E4\n\ |
99 | 4.79E4\n\ |
100 | 5.01E4\n\ |
101 | 5.24E4\n\ |
102 | 5.47E4\n\ |
103 | 5.72E4\n\ |
104 | 5.96E4\n\ |
105 | 6.22E4\n\ |
106 | 6.48E4\n\ |
107 | 6.75E4\n\ |
108 | 7.03E4\n\ |
109 | 7.32E4\n\ |
110 | 7.61E4\n\ |
111 | 7.91E4\n\ |
112 | 8.22E4\n\ |
113 | 8.53E4\n\ |
114 | 8.86E4\n\ |
115 | 9.19E4\n\ |
116 | 9.53E4\n\ |
117 | 9.88E4\n\ |
118 | 1.02E5\n\ |
119 | 1.06E5\n\ |
120 | 1.10E5\n\ |
121 | 1.14E5\n\ |
122 | 1.17E5\n\ |
123 | 1.21E5\n\ |
124 | 1.26E5\n\ |
125 | 1.30E5\n\ |
126 | 1.34E5\n\ |
127 | 1.38E5\n\ |
128 | 1.43E5\n\ |
129 | 1.47E5\n\ |
130 | 1.52E5\n\ |
131 | 1.57E5\n\ |
132 | 1.62E5\n\ |
133 | 1.67E5\n\ |
134 | 1.72E5\n\ |
135 | "); |
136 | return 0; |
137 | } |
38 虫虫排序
Language: C++
Time: 116ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | inline void tabtab(int x){ |
6 | for (int i=2*x;i;--i){ |
7 | putchar(' '); |
8 | } |
9 | } |
10 | |
11 | vector<char> vec; |
12 | int n; |
13 | |
14 | void dfs(int p){ |
15 | if (p==n){ |
16 | tabtab(p);printf("printf(\""); |
17 | for (int i=0;i<n;++i) printf("%%d%s",i==n-1?"\\n\"":","); |
18 | for (int i=0;i<n;++i) printf(",%c",vec[i]); |
19 | printf(");\n"); |
20 | return; |
21 | } |
22 | for (int i=p;i>=0;--i){ |
23 | if (i==0) {tabtab(p);printf("else\n");} |
24 | else{tabtab(p);printf("%sif(%c<%c)\n",i==p?"":"else ",vec[i-1],'a'+p);} |
25 | vec.insert(vec.begin()+i,'a'+p); |
26 | dfs(p+1); |
27 | vec.erase(vec.begin()+i); |
28 | } |
29 | } |
30 | |
31 | void gao(){ |
32 | printf("#include<stdio.h>\nint main()\n{\n"); |
33 | tabtab(1);printf("int "); |
34 | for (int i=0;i<n;++i) printf("%c%s",'a'+i,i==n-1?";\n":","); |
35 | tabtab(1);printf("scanf(\""); |
36 | for (int i=0;i<n;++i) printf("%%d"); |
37 | printf("\","); |
38 | for (int i=0;i<n;++i) printf("&%c%s",'a'+i,i==n-1?");\n":","); |
39 | vec.clear(),vec.push_back('a');dfs(1); |
40 | tabtab(1);printf("return 0;\n}\n"); |
41 | putchar('\n'); |
42 | } |
43 | |
44 | int main(){ |
45 | int T; |
46 | scanf("%d",&T); |
47 | while (T--){ |
48 | scanf("%d",&n); |
49 | gao(); |
50 | } |
51 | return 0; |
52 | } |
40 ChongBit
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | void dbg(unsigned int x){ |
7 | printf("%u\n",x); |
8 | for (int i=31;i>=0;--i){ |
9 | if ((1LL<<i)&x) printf("1"); |
10 | else printf("0"); |
11 | } |
12 | putchar('\n'); |
13 | } |
14 | |
15 | int main(){ |
16 | unsigned int n,L,R,ans; |
17 | bool isL,isR; |
18 | while (~scanf("%u%u%u",&n,&L,&R)){ |
19 | n=~n; |
20 | isL=isR=true; |
21 | ans=0; |
22 | for (int i=31;i>=0;--i){ |
23 | unsigned int cur=(1LL<<i); |
24 | if (isL && isR){ |
25 | if ((cur&L)==(cur&R)) ans|=(cur&L); |
26 | else ans|=(cur&n); |
27 | } |
28 | else if (isL){ |
29 | if (cur&L) ans|=(cur&L); |
30 | else ans|=(cur&n); |
31 | } |
32 | else if (isR){ |
33 | if ((cur&R)==0) ans|=0; |
34 | else ans|=(cur&n); |
35 | } |
36 | else{ |
37 | ans|=cur&n; |
38 | } |
39 | if (isL && (ans&cur)!=(L&cur)) isL=false; |
40 | if (isR && (ans&cur)!=(R&cur)) isR=false; |
41 | } |
42 | // dbg(L); |
43 | // dbg(R); |
44 | // dbg(n); |
45 | // dbg(ans); |
46 | printf("%u\n",ans); |
47 | } |
48 | return 0; |
49 | } |
41 ChongQueue
Language: C++
Time: 584ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool status[1010]; |
5 | queue<string> que[1010]; |
6 | queue<int> cque; |
7 | map<string,int> mmp; |
8 | |
9 | int main(){ |
10 | int m,n,cnt,kase=0; |
11 | string str,op; |
12 | while (1){ |
13 | cin>>n; |
14 | if (n==0) break; |
15 | mmp.clear(); |
16 | for (int i=1;i<=n;++i){ |
17 | while (!que[i].empty()) que[i].pop(); |
18 | } |
19 | while (!cque.empty()) cque.pop(); |
20 | for (int i=1;i<=n;++i){ |
21 | cin>>m; |
22 | while (m--){ |
23 | cin>>str; |
24 | mmp[str]=i; |
25 | } |
26 | } |
27 | memset(status,false,sizeof(status)); |
28 | cout<<"Scenario #"<<++kase<<endl; |
29 | while (1){ |
30 | cin>>op; |
31 | if (op[0]=='S') break; |
32 | else if (op[0]=='E'){ |
33 | cin>>str; |
34 | int cur=mmp[str]; |
35 | if (status[cur]==0){ |
36 | cque.push(cur); |
37 | que[cur].push(str); |
38 | status[cur]=true; |
39 | } |
40 | else{ |
41 | que[cur].push(str); |
42 | } |
43 | } |
44 | else{ |
45 | cout<<que[cque.front()].front()<<endl; |
46 | que[cque.front()].pop(); |
47 | if(que[cque.front()].empty()){ |
48 | status[cque.front()]=false; |
49 | cque.pop(); |
50 | } |
51 | } |
52 | } |
53 | cout<<endl; |
54 | } |
55 | return 0; |
56 | } |
44 ZL’s Prob.1
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | ll C(ll n,ll m){ |
6 | ll ans=1; |
7 | for (ll i=1;i<=m;++i){ |
8 | ans=ans*(n-i+1)/i; |
9 | } |
10 | return ans; |
11 | } |
12 | |
13 | |
14 | int main(){ |
15 | ll n,k; |
16 | while (~scanf("%llu%llu",&n,&k)){ |
17 | k=n+k-1;--n; |
18 | printf("%llu\n",C(k,min(n,k-n))); |
19 | } |
20 | return 0; |
21 | } |
45 ZL’s Prob.2
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | ll dp[1000][1000]; |
5 | |
6 | int main(){ |
7 | int n,m; |
8 | memset(dp,0,sizeof(dp)); |
9 | while (~scanf("%d%d",&n,&m)){ |
10 | dp[0][0]=1LL; |
11 | for (int len=1;len<=m+n;++len){ |
12 | for (int x=len,y=0;x>=y;--x,++y){ |
13 | dp[x][y]=dp[x-1][y]+dp[x][y-1]; |
14 | } |
15 | } |
16 | printf("%lld\n",dp[n][m]); |
17 | } |
18 | return 0; |
19 | } |
51 报数游戏
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool a[1010]; |
5 | |
6 | int main(){ |
7 | int n,m,k; |
8 | while (~scanf("%d%d%d",&n,&m,&k)){ |
9 | memset(a,true,sizeof(a)); |
10 | int p=k,cnt=0; |
11 | int t=n-1; |
12 | while (t){ |
13 | while (1){ |
14 | if (p>n) p=1; |
15 | if (a[p]){ |
16 | ++cnt; |
17 | if (cnt==m){ |
18 | cnt=0; |
19 | a[p++]=false; |
20 | --t; |
21 | break; |
22 | } |
23 | } |
24 | ++p; |
25 | } |
26 | // for (int i=1;i<=n;++i){ |
27 | // printf("%d ",a[i]); |
28 | // } |
29 | // putchar('\n'); |
30 | } |
31 | for (int i=1;i<=n;++i){ |
32 | if (a[i]){ |
33 | printf("%d\n",i);break; |
34 | } |
35 | } |
36 | } |
37 | return 0; |
38 | } |
52 火车调度
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[35]; |
5 | |
6 | int main(){ |
7 | stack <int> s; |
8 | int n; |
9 | while (~scanf("%d",&n)){ |
10 | int x; |
11 | while (!s.empty()) s.pop(); |
12 | int order=n; |
13 | bool flag=true; |
14 | for (int i=0;i<n;++i){ |
15 | scanf("%d",&a[i]); |
16 | } |
17 | for (int i=n-1;i>=0;--i){ |
18 | x=a[i]; |
19 | if (!flag) continue; |
20 | if (s.empty()){s.push(x);continue;} |
21 | while (x<s.top()){ |
22 | if (s.top()!=order){flag=false;break;} |
23 | else{--order;s.pop();} |
24 | if (s.empty()) break; |
25 | } |
26 | s.push(x); |
27 | } |
28 | if (!flag) printf("No\n"); |
29 | else printf("Yes\n"); |
30 | } |
31 | return 0; |
32 | } |
53 最长序列
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[5],dp1[5],dp2[5]; |
5 | |
6 | int main(){ |
7 | int T,ans; |
8 | scanf("%d",&T); |
9 | while (T--){ |
10 | ans=0;dp1[0]=1;dp2[0]=1; |
11 | for (int i=0;i<5;++i){ |
12 | scanf("%d",&a[i]); |
13 | } |
14 | for (int i=1;i<5;++i){ |
15 | dp1[i]=1;dp2[i]=1; |
16 | for (int j=0;j<i;++j){ |
17 | if (a[i]>a[j]) dp1[i]=max(1+dp1[j],dp1[i]); |
18 | if (a[i]<a[j]) dp2[i]=max(1+dp2[j],dp2[i]); |
19 | } |
20 | ans=max(ans,max(dp1[i],dp2[i])); |
21 | } |
22 | printf("%d\n",ans); |
23 | } |
24 | return 0; |
25 | } |
54 小偷偷东西
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[505]; |
5 | int v[50]; |
6 | int w[50]; |
7 | |
8 | int main(){ |
9 | int n,c; |
10 | int kase=0; |
11 | while (~scanf("%d%d",&n,&c)){ |
12 | for (int i=1;i<=n;++i){ |
13 | scanf("%d",&v[i]); |
14 | } |
15 | for (int i=1;i<=n;++i){ |
16 | scanf("%d",&w[i]); |
17 | } |
18 | memset(dp,0,sizeof(dp)); |
19 | for (int i=1;i<=n;++i){ |
20 | for (int j=c;j>=w[i];--j){ |
21 | dp[j]=max(dp[j],dp[j-w[i]]+v[i]); |
22 | } |
23 | // for (int j=0;j<=c;++j) printf("%d ",dp[j]); |
24 | // putchar('\n'); |
25 | } |
26 | printf("Case %d:%d\n",++kase,dp[c]); |
27 | } |
28 | return 0; |
29 | } |
55 点在四边形内吗?
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | const double eps=1e-6; |
4 |
|
5 |
|
6 | |
7 | struct point{ |
8 | double x,y; |
9 | point(double a=0,double b=0){x=a,y=b;} |
10 | point operator-(const point& b)const{return point(x-b.x,y-b.y);} |
11 | point operator+(const point& b)const{return point(x+b.x,y+b.y);} |
12 | bool operator==(point& b){return zero(x-b.x)&&zero(y-b.y);} |
13 | double operator*(const point& b)const{return x*b.x+y*b.y;} |
14 | double operator^(const point& b)const{return x*b.y-y*b.x;} |
15 | }; |
16 | struct line{ |
17 | point s,e; |
18 | line(){} |
19 | line(point ss,point ee){s=ss,e=ee;} |
20 | }; |
21 | |
22 | double dist(point a,point b){return sqrt((a-b)*(a-b));} |
23 | |
24 | bool gao(point p,line l){ |
25 | return |
26 | sgn((l.s-p)^(l.e-p))==0 && |
27 | sgn((p.x-l.s.x)*(p.x-l.e.x))<=0 && |
28 | sgn((p.y-l.s.y)*(p.y-l.e.y))<=0; |
29 | } |
30 | |
31 | bool segxseg(line l1, line l2){ |
32 | return |
33 | max(l1.s.x,l1.e.x)>=min(l2.s.x,l2.e.x) && |
34 | max(l2.s.x,l2.e.x)>=min(l1.s.x,l1.e.x) && |
35 | max(l1.s.y,l1.e.y)>=min(l2.s.y,l2.e.y) && |
36 | max(l2.s.y,l2.e.y)>=min(l1.s.y,l1.e.y) && |
37 | sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e))<=0 && |
38 | sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e))<=0; |
39 | } |
40 | |
41 | int n; |
42 | point poly[1000]; |
43 | int rua(point p){ |
44 | int cnt=0; |
45 | line ray,side; |
46 | ray.s=p; |
47 | ray.e.y=p.y; |
48 | ray.e.x=-100000000000.0; |
49 | for (int i=0;i<n;++i){ |
50 | side.s=poly[i]; |
51 | side.e=poly[(i+1)%n]; |
52 | if (gao(p,side)) return 0; |
53 | if (sgn(side.s.y-side.e.y)==0){ |
54 | continue; |
55 | } |
56 | if (gao(side.s,ray)){ |
57 | cnt+=(sgn(side.s.y-side.e.y)>0); |
58 | } |
59 | else if (gao(side.e,ray)){ |
60 | cnt+=(sgn(side.e.y-side.s.y)>0); |
61 | } |
62 | else if (segxseg(ray,side)) ++cnt; |
63 | } |
64 | return cnt%2==1?1:-1; |
65 | } |
66 | |
67 | int main(){ |
68 | int T,kase=0; |
69 | n=4; |
70 | point tmp; |
71 | scanf("%d",&T); |
72 | while (T--){ |
73 | for (int i=0;i<4;++i){ |
74 | scanf("%lf%lf",&poly[i].x,&poly[i].y); |
75 | } |
76 | scanf("%lf%lf",&tmp.x,&tmp.y); |
77 | printf("Case %d:\n%s\n",++kase,rua(tmp)==1?"In":"No"); |
78 | // cout<<rua(tmp)<<endl; |
79 | } |
80 | return 0; |
81 | } |
57 点树
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 | |
6 | pair<int,int> a[105]; |
7 | bool can[205][205]; |
8 | |
9 | inline int sgn(int x){ |
10 | if (x==0) return 0; |
11 | return x/abs(x); |
12 | } |
13 | |
14 | int gcd(int a,int b){ |
15 | return a==0?b:gcd(b%a,a); |
16 | } |
17 | |
18 | int main(){ |
19 | int n,cur; |
20 | int dx,dy; |
21 | int curx,cury; |
22 | while (~scanf("%d",&n)){ |
23 | memset(can,true,sizeof(can)); |
24 | for (int i=0;i<n;++i){ |
25 | scanf("%d%d",&a[i].x,&a[i].y); |
26 | cur=gcd(a[i].x,a[i].y); |
27 | dx=abs(a[i].x/cur)*sgn(a[i].x); |
28 | dy=abs(a[i].y/cur)*sgn(a[i].y); |
29 | // cout<<dx<<' '<<dy<<endl; |
30 | curx=a[i].x+dx;cury=a[i].y+dy; |
31 | while (abs(curx)<=100 && abs(cury)<=100){ |
32 | can[100+curx][100+cury]=false; |
33 | curx+=dx;cury+=dy; |
34 | } |
35 | } |
36 | cur=0; |
37 | for (int i=0;i<n;++i){ |
38 | if (can[100+a[i].x][100+a[i].y]) ++cur; |
39 | } |
40 | printf("%d\n",cur); |
41 | } |
42 | return 0; |
43 | } |
58 变量名转换
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[50]; |
5 | |
6 | int main(){ |
7 | int T,kase=0;scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%s",a); |
10 | int len=strlen(a); |
11 | bool flag=false; |
12 | for (int i=0;i<len;++i){ |
13 | if (flag){ |
14 | if (a[i]>='a' && a[i]<='z'){ |
15 | a[i]=a[i]-'a'+'A'; |
16 | flag=false; |
17 | } |
18 | else if (a[i]>='A' && a[i]<='Z') flag=false; |
19 | } |
20 | else if (a[i]=='_') flag=true; |
21 | } |
22 | printf("Case %d:\n",++kase); |
23 | for (int i=0;i<len;++i){ |
24 | if (a[i]!='_') putchar(a[i]); |
25 | } |
26 | putchar('\n'); |
27 | } |
28 | return 0; |
29 | } |
59 喊号子
Language: C++
Time: 4ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int main(){ |
6 | string a="1-2-1 1-2-1 1 1 1-2-1"; |
7 | string b="1 2 3 4 1-2-3 4"; |
8 | int T,s,n;cin>>T; |
9 | for (int i=1;i<=T;i++){ |
10 | cin>>n>>s; |
11 | cout<<"Case "<<i<<":"<<endl; |
12 | while (n--){ |
13 | if (s==1){ |
14 | s++;cout<<a<<endl; |
15 | } |
16 | else{ |
17 | s--;cout<<b<<endl; |
18 | } |
19 | } |
20 | } |
21 | return 0; |
22 | } |
63 仓库管理员
Language: C++
Time: 136ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | struct node{ |
6 | mutable ll L,R; |
7 | node(ll x,ll y):L(x),R(y){} |
8 | bool operator < (const node &qmh) const{ |
9 | return L<qmh.L; |
10 | } |
11 | }; |
12 | |
13 | set<node> kdl; |
14 | |
15 | int main(){ |
16 | int T,n; |
17 | ll x,t1,t2,t3,t4; |
18 | char op[15]; |
19 | scanf("%d",&T); |
20 | for (int kase=1;kase<=T;++kase){ |
21 | kdl.clear(); |
22 | kdl.insert((node){-1100000000,1100000000}); |
23 | scanf("%d",&n); |
24 | printf("Case %d:\n",kase); |
25 | while (n--){ |
26 | scanf("%s%lld",op,&x); |
27 | if (op[0]=='F'){//down |
28 | auto cur=kdl.upper_bound({x,0}); |
29 | --cur; |
30 | if (x==(*cur).L){ |
31 | printf("%lld\n",x); |
32 | if ((*cur).L!=(*cur).R){ |
33 | ++(*cur).L; |
34 | } |
35 | else kdl.erase(cur); |
36 | } |
37 | else if (x<(*cur).R){ |
38 | printf("%lld\n",x); |
39 | t1=(*cur).L,t2=x-1,t3=x+1,t4=(*cur).R; |
40 | kdl.erase(cur); |
41 | if (t1<=t2) kdl.insert({t1,t2}); |
42 | if (t3<=t4) kdl.insert({t3,t4}); |
43 | } |
44 | else{ |
45 | printf("%lld\n",(*cur).R); |
46 | if ((*cur).L!=(*cur).R){ |
47 | --(*cur).R; |
48 | } |
49 | else kdl.erase(cur); |
50 | } |
51 | } |
52 | else{//up |
53 | auto cur=kdl.upper_bound({x,0}); |
54 | --cur; |
55 | if (x==(*cur).L){ |
56 | printf("%lld\n",x); |
57 | if ((*cur).L!=(*cur).R){ |
58 | ++(*cur).L; |
59 | } |
60 | else kdl.erase(cur); |
61 | } |
62 | else if (x<(*cur).R){ |
63 | printf("%lld\n",x); |
64 | t1=(*cur).L,t2=x-1,t3=x+1,t4=(*cur).R; |
65 | kdl.erase(cur); |
66 | if (t1<=t2) kdl.insert({t1,t2}); |
67 | if (t3<=t4) kdl.insert({t3,t4}); |
68 | } |
69 | else if (x==(*cur).R){ |
70 | printf("%lld\n",x); |
71 | if ((*cur).L!=(*cur).R){ |
72 | --(*cur).R; |
73 | } |
74 | else kdl.erase(cur); |
75 | } |
76 | else{ |
77 | ++cur; |
78 | printf("%lld\n",(*cur).L); |
79 | if ((*cur).L!=(*cur).R){ |
80 | ++(*cur).L; |
81 | } |
82 | else kdl.erase(cur); |
83 | } |
84 | } |
85 | // for (auto &i:kdl){ |
86 | // printf("[%lld,%lld]",i.L,i.R); |
87 | // } |
88 | // putchar('\n'); |
89 | } |
90 | } |
91 | return 0; |
92 | } |
67 LCM
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long a[1005]; |
5 | |
6 | long long gcd(long long a, long long b){ |
7 | return a == 0 ? b : gcd(b % a, a); |
8 | } |
9 | |
10 | int main(){ |
11 | int T,n;cin>>T; |
12 | long long ans; |
13 | while (T--){ |
14 | cin>>n; |
15 | for (int i=0;i<n;++i){ |
16 | cin>>a[i]; |
17 | } |
18 | if (n==1){ |
19 | cout<<a[0]<<endl; |
20 | continue; |
21 | } |
22 | ans=a[0]*a[1]/gcd(a[0],a[1]); |
23 | for (int i=2;i<n;++i){ |
24 | ans=ans*a[i]/gcd(ans,a[i]); |
25 | } |
26 | cout<<ans<<endl; |
27 | } |
28 | return 0; |
29 | } |
69 Euchre Results
Language: C++
Time: 4ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int main(){ |
6 | int x1,x2,y1,y2,z1,z2; |
7 | while (1){ |
8 | scanf("%d%d%d%d%d%d",&x1,&x2,&y1,&y2,&z1,&z2); |
9 | if (x1+x2+y1+y2+z1+z2==0) break; |
10 | int ans1=x1+x2; |
11 | int ans2=x1+y1+z1-x2-y2-z2; |
12 | printf("Anna's won-loss record is %d-%d.\n",(ans1-ans2)/2,(ans1+ans2)/2); |
13 | } |
14 | return 0; |
15 | } |
71 合并果子
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | |
10 | int main(){ |
11 | int n,temp,temp2,ans; |
12 | while (~scanf("%d",&n)){ |
13 | priority_queue <int,vector<int>,greater<int> > que; |
14 | while (!que.empty()) que.pop(); |
15 | for (int i=0;i<n;++i){ |
16 | scanf("%d",&temp);que.push(temp); |
17 | } |
18 | ans=0; |
19 | while (que.size()>1){ |
20 | temp=que.top();que.pop(); |
21 | temp2=que.top();que.pop(); |
22 | ans+=temp+temp2; |
23 | // cout<<temp+temp2<<' '; |
24 | que.push(temp+temp2); |
25 | } |
26 | printf("%d\n",ans); |
27 | } |
28 | return 0; |
29 | } |
72 yao哥鸡排系列之一——xyiyy的难题
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | ll gcd(ll a, ll b){ |
7 | return a==0?b:gcd(b%a,a); |
8 | } |
9 | |
10 | ll lcm(ll a, ll b){ |
11 | return a/gcd(a,b)*b; |
12 | } |
13 | |
14 | int a[20]; |
15 | |
16 | int main(){ |
17 | ll n,ans,lcmm; |
18 | int m,cnt,cur; |
19 | while (~scanf("%lld%d",&n,&m)){ |
20 | for (int i=0;i<m;++i){ |
21 | scanf("%d",&a[i]); |
22 | } |
23 | ans=0; |
24 | for (int i=1;i<(1<<m);++i){ |
25 | cnt=(__builtin_popcount(i))%2==0?-1:1; |
26 | lcmm=1; |
27 | for (int j=0;j<m;++j){ |
28 | if (i&(1<<j)) lcmm=lcm(lcmm,a[j]); |
29 | } |
30 | // cout<<(bitset<10>)i<<": "<<cnt<<"*"<<n<<"/"<<lcmm<<endl; |
31 | ans+=1ll*cnt*(n/lcmm); |
32 | } |
33 | printf("%lld\n",ans); |
34 | } |
35 | return 0; |
36 | } |
76 yao哥鸡排系列之五——xyiyy的失策
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[20]; |
5 | bool flag; |
6 | int len; |
7 | |
8 | void dfs(int p){ |
9 | if (p>=len){ |
10 | flag=true; |
11 | return; |
12 | } |
13 | if (a[p]!='1') return; |
14 | dfs(p+1); |
15 | for (int i=1;i<=2 && flag==false && p+i<len;++i){ |
16 | if (a[p+i]!='8') break; |
17 | dfs(p+i+1); |
18 | } |
19 | } |
20 | |
21 | int main(){ |
22 | int T;scanf("%d",&T); |
23 | while (T--){ |
24 | flag=false; |
25 | scanf("%s",a); |
26 | len=strlen(a); |
27 | for (int i=0;i<len;++i){ |
28 | if (a[i]!='1'&&a[i]!='8'){ |
29 | flag=true; |
30 | break; |
31 | } |
32 | } |
33 | if (flag){ |
34 | printf("NO\n"); |
35 | continue; |
36 | } |
37 | dfs(0); |
38 | printf("%s\n",flag?"YES":"NO"); |
39 | } |
40 | return 0; |
41 | } |
78 yao哥鸡排系列之七——A+B problem
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int goal[25]; |
6 | int main(){ |
7 | //FILE* fp; |
8 | //fp=fopen("test.txt","w"); |
9 | int n; |
10 | while (cin>>n){ |
11 | int x,y,z,sx=0,sy=0,sz=0; |
12 | bool flag=true; |
13 | for(int i=0;i<n;i++){ |
14 | cin>>x>>y>>z; |
15 | goal[i]=5*x+10*y+20*z-15; //第i个人期望得到的找零 |
16 | sx+=x;sy+=y;sz+=z; //统计张数 |
17 | if (goal[i]<0){ |
18 | flag=false; |
19 | } |
20 | } |
21 | if (!flag){ |
22 | cout<<"Angry Yaoge!"<<endl; |
23 | //fprintf(fp,"Angry Yaoge!\n"); |
24 | continue; |
25 | } |
26 | // sx-=n;sy-=n; |
27 | // if (sx<0||sy<0){ |
28 | // cout<<"Sad Yaoge!"<<endl; |
29 | // continue; |
30 | // } |
31 | //20 |
32 | while(sz!=0){ |
33 | flag=true; |
34 | for (int i=0;i<n;i++){ |
35 | if (goal[i]>=20){ |
36 | goal[i]-=20; |
37 | sz--; |
38 | flag=false; |
39 | break; |
40 | } |
41 | } |
42 | if (flag) break; |
43 | } |
44 | //10 |
45 | while(sy!=0){ |
46 | flag=true; |
47 | for (int i=0;i<n;i++){ |
48 | if (goal[i]>=10){ |
49 | goal[i]-=10; |
50 | sy--; |
51 | flag=false; |
52 | break; |
53 | } |
54 | } |
55 | if (flag) break; |
56 | } |
57 | //5 |
58 | while(sx!=0){ |
59 | flag=true; |
60 | for (int i=0;i<n;i++){ |
61 | if (goal[i]>=5){ |
62 | goal[i]-=5; |
63 | sx--; |
64 | flag=false; |
65 | break; |
66 | } |
67 | } |
68 | if (flag) break; |
69 | } |
70 | |
71 | |
72 | flag=true; |
73 | for (int i=0;i<n;i++){ |
74 | if (goal[i]!=0){ |
75 | cout<<"Sad Yaoge!"<<endl; |
76 | //fprintf(fp,"Sad Yaoge!\n"); |
77 | flag=false; |
78 | break; |
79 | } |
80 | } |
81 | if (flag) { |
82 | cout<<"Happy Yaoge!"<<endl; |
83 | //fprintf(fp,"Happy Yaoge!\n"); |
84 | } |
85 | } |
86 | return 0; |
87 | } |
79 A1-行列式值
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int a[3][3]; |
5 | for (int i=0;i<3;i++){ |
6 | for (int j=0;j<3;j++){ |
7 | cin>>a[i][j]; |
8 | } |
9 | } |
10 | cout<<a[0][0]*a[1][1]*a[2][2]\ |
11 | +a[0][1]*a[1][2]*a[2][0]\ |
12 | +a[0][2]*a[1][0]*a[2][1]\ |
13 | -a[0][0]*a[2][1]*a[1][2]\ |
14 | -a[0][1]*a[1][0]*a[2][2]\ |
15 | -a[0][2]*a[2][0]*a[1][1]<<endl; |
16 | return 0; |
17 | } |
80 A2-矩阵加法
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int a[105][105]; |
4 | int main(){ |
5 | int N; |
6 | cin>>N; |
7 | for (int i=0;i<N;i++){ |
8 | for (int j=0;j<N;j++){ |
9 | cin>>a[i][j]; |
10 | } |
11 | } |
12 | int x; |
13 | for (int i=0;i<N;i++){ |
14 | for (int j=0;j<N;j++){ |
15 | cin>>x; |
16 | a[i][j]+=x; |
17 | } |
18 | } |
19 | for (int i=0;i<N;i++){ |
20 | for (int j=0;j<N;j++){ |
21 | cout<<a[i][j]; |
22 | if (j!=N-1) cout<<' '; |
23 | } |
24 | cout<<endl; |
25 | } |
26 | return 0; |
27 | } |
81 A3-算术平均值和几何平均值
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | double a,b,c,d,e; |
5 | cin>>a>>b>>c>>d>>e; |
6 | double x = a * b * c * d * e; |
7 | int f = ( x < 0)? -1 : 1; |
8 | printf("%.2f, %.2f\n",(a+b+c+d+e)/5,f * pow(abs(x),0.2)); |
9 | return 0; |
10 | } |
82 A4-十个整数排序
Language: C++
Time: 1ms
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | using namespace std; |
7 | int main(){ |
8 | int a[10]; |
9 | for (int i=0;i<10;i++){ |
10 | cin>>a[i]; |
11 | } |
12 | sort(a,a+10); |
13 | for (int i=0;i<9;i++){ |
14 | cout<<a[i]<<' '; |
15 | } |
16 | cout<<a[9]<<endl; |
17 | return 0; |
18 | } |
83 A5-兑换钱币
Language: C++
Time: 4ms
1 |
|
2 |
|
3 | using namespace std; |
4 | int main(){ |
5 | int x,sum,I=1; |
6 | while (cin>>x){ |
7 | sum=0; |
8 | for (int i=0;i<=x/5;i++){ |
9 | for (int j=0;j<=(x-i*5)/2;j++){ |
10 | sum++; |
11 | } |
12 | } |
13 | cout<<"Case "<<I++<<":"<<x<<","<<sum<<endl; |
14 | } |
15 | return 0; |
16 | } |
84 A6-多项式计算
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 | |
6 | int main(){ |
7 | int n; |
8 | double x,t; |
9 | while (cin>>n>>x){ |
10 | double sum=0; |
11 | for (int i=n;i>=0;i--){ |
12 | cin>>t; |
13 | sum+=t*pow(x,i); |
14 | } |
15 | printf("%.2f\n",sum); |
16 | } |
17 | return 0; |
18 | } |
85 A7-多个a问题
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int main(){ |
6 | int n,a,bei; |
7 | unsigned long long ans; |
8 | while (cin>>n>>a){ |
9 | ans=0;bei=1; |
10 | for (int i=0;i<=n;i++){ |
11 | ans+=bei*(n-i); |
12 | bei*=10; |
13 | } |
14 | cout<<ans*a<<endl; |
15 | } |
16 | return 0; |
17 | } |
86 A8-杨辉三角
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | char aa[27][300]=\ |
5 | {"1",\ |
6 | "1 1",\ |
7 | "1 2 1",\ |
8 | "1 3 3 1",\ |
9 | "1 4 6 4 1",\ |
10 | "1 5 10 10 5 1",\ |
11 | "1 6 15 20 15 6 1",\ |
12 | "1 7 21 35 35 21 7 1",\ |
13 | "1 8 28 56 70 56 28 8 1",\ |
14 | "1 9 36 84 126 126 84 36 9 1",\ |
15 | "1 10 45 120 210 252 210 120 45 10 1",\ |
16 | "1 11 55 165 330 462 462 330 165 55 11 1",\ |
17 | "1 12 66 220 495 792 924 792 495 220 66 12 1",\ |
18 | "1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1",\ |
19 | "1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1",\ |
20 | "1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1",\ |
21 | "1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1",\ |
22 | "1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1",\ |
23 | "1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1",\ |
24 | "1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1",\ |
25 | "1 20 190 1140 4845 15504 38760 77520 125970 167960 184756 167960 125970 77520 38760 15504 4845 1140 190 20 1",\ |
26 | "1 21 210 1330 5985 20349 54264 116280 203490 293930 352716 352716 293930 203490 116280 54264 20349 5985 1330 210 21 1",\ |
27 | "1 22 231 1540 7315 26334 74613 170544 319770 497420 646646 705432 646646 497420 319770 170544 74613 26334 7315 1540 231 22 1",\ |
28 | "1 23 253 1771 8855 33649 100947 245157 490314 817190 1144066 1352078 1352078 1144066 817190 490314 245157 100947 33649 8855 1771 253 23 1",\ |
29 | "1 24 276 2024 10626 42504 134596 346104 735471 1307504 1961256 2496144 2704156 2496144 1961256 1307504 735471 346104 134596 42504 10626 2024 276 24 1",\ |
30 | "1 25 300 2300 12650 53130 177100 480700 1081575 2042975 3268760 4457400 5200300 5200300 4457400 3268760 2042975 1081575 480700 177100 53130 12650 2300 300 25 1"}; |
31 | //static int a[26]; |
32 | int main(){ |
33 | // cout<<"\"1\",\\"<<endl; |
34 | // a[0]=1; |
35 | // for (int j=1;j<=25;j++){ |
36 | // for (int i=25;i>0;i--){ |
37 | // a[i]+=a[i-1]; |
38 | // } |
39 | // cout<<"\""; |
40 | // for (int i=0;i<j;i++){ |
41 | // //if (!a[i]) break; |
42 | // cout<<a[i]<<' '; |
43 | // } |
44 | // cout<<a[j]<<"\",\\"<<endl; |
45 | // } |
46 | int n,T=1; |
47 | while (cin>>n){ |
48 | printf("Case %d: n=%d\n%s\n",T++,n,aa[n]); |
49 | } |
50 | return 0; |
51 | } |
87 A9-百分制转换成五级分制
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | /*100~90 89~80 79~70 69~60 59~0*/ |
5 | int main(){ |
6 | int T,x; |
7 | cin>>T; |
8 | while (T--){ |
9 | cin>>x; |
10 | if (x>=90){ |
11 | cout<<"A"<<endl; |
12 | } |
13 | else if (x>=80){ |
14 | cout<<"B"<<endl; |
15 | } |
16 | else if (x>=70){ |
17 | cout<<"C"<<endl; |
18 | } |
19 | else if (x>=60){ |
20 | cout<<"D"<<endl; |
21 | } |
22 | else { |
23 | cout<<"E"<<endl; |
24 | } |
25 | } |
26 | return 0; |
27 | } |
88 A10-Fibonacci数列
Language: C++
Time: 1ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int a[]={1,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903}; |
6 | int main(){ |
7 | // int a[]={1,1}; |
8 | // cout<<"{1,1,"; |
9 | // for (int i=3;i<=47;i++){ |
10 | // a[1]+=a[0]; |
11 | // swap(a[0],a[1]); |
12 | // cout<<a[1]<<','; |
13 | // } |
14 | int T=1,x; |
15 | while (cin>>x){ |
16 | cout<<"Case "<<T++<<":"<<x<<","<<a[x]<<endl; |
17 | } |
18 | return 0; |
19 | } |
89 A11-矩阵转置
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 | |
7 | int a[100][100]; |
8 | |
9 | int main(){ |
10 | int m,n; |
11 | while (cin>>m>>n){ |
12 | for (int i=0;i<m;i++){ |
13 | for (int j=0;j<n;j++){ |
14 | scanf("%d",&a[i][j]); |
15 | } |
16 | } |
17 | for (int i=0;i<n;i++){ |
18 | for (int j=0;j<m-1;j++){ |
19 | printf("%d ",a[j][i]); |
20 | } |
21 | printf("%d\n",a[m-1][i]); |
22 | } |
23 | putchar('\n'); |
24 | } |
25 | return 0; |
26 | } |
90 A12-判断闰年
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int isrun(int x){ |
6 | if(x%4==0){ |
7 | if(x%100==0){ |
8 | if(x%400==0){ |
9 | return 1; |
10 | } |
11 | return 0; |
12 | } |
13 | return 1; |
14 | } |
15 | return 0; |
16 | } |
17 | |
18 | int main(){ |
19 | int y; |
20 | while (cin>>y){ |
21 | if (isrun(y)){ |
22 | printf("The year %d is a leap year.\n",y); |
23 | } |
24 | else{ |
25 | printf("The year %d is not a leap year.\n",y); |
26 | } |
27 | } |
28 | return 0; |
29 | } |
91 A13-求解一元二次方程
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | // freopen("1.in","r", stdin); |
6 | // freopen("11.out","w", stdout); |
7 | double a,b,c; |
8 | double ans1,ans2; |
9 | while (cin>>a>>b>>c){ |
10 | ans1=(-b+sqrt(b*b-4*a*c))/2/a; |
11 | ans2=(-b-sqrt(b*b-4*a*c))/2/a; |
12 | if (ans1<ans2) swap(ans1,ans2); |
13 | // cout<<ans1<<' '<<ans2<<endl; |
14 | printf("%.2f %.2f\n",ans1,ans2); |
15 | } |
16 | return 0; |
17 | } |
92 A14-去掉最高分去掉最低分
Language: C++
Time: 1ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | |
6 | double a[10005]; |
7 | |
8 | int main(){ |
9 | int T,n; |
10 | double ave; |
11 | cin>>T; |
12 | while (T--){ |
13 | scanf("%d",&n); |
14 | for (int i=0;i<n;i++){ |
15 | scanf("%lf",&a[i]); |
16 | } |
17 | sort(a,a+n); |
18 | ave=0; |
19 | for (int i=1;i<n-1;i++){ |
20 | ave+=a[i]; |
21 | } |
22 | printf("%.2f,%.2f,%.2f\n",a[0],a[n-1],ave/(n-2)); |
23 | } |
24 | return 0; |
25 | } |
93 A15-计算天数
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | int isrun(int x){ |
6 | if(x%4==0){ |
7 | if(x%100==0){ |
8 | if(x%400==0){ |
9 | return 1; |
10 | } |
11 | return 0; |
12 | } |
13 | return 1; |
14 | } |
15 | return 0; |
16 | } |
17 | |
18 | int a[13]={0,0,31,59,90,120,151,181,212,243,273,304,334}; |
19 | int b[13]={0,0,31,60,91,121,152,182,213,244,274,305,335}; |
20 | |
21 | int main(){ |
22 | int T=1,yy,mm,dd; |
23 | while (cin>>yy>>mm>>dd){ |
24 | printf("Case %d: %02d/%02d/%04d, ",T++,mm,dd,yy); |
25 | if (isrun(yy)){ |
26 | printf("%d\n",b[mm]+dd); |
27 | } |
28 | else{ |
29 | printf("%d\n",a[mm]+dd); |
30 | } |
31 | } |
32 | return 0; |
33 | } |
95 A17-删除重复数据
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | int a[30005]; |
5 | int main(){ |
6 | int i; |
7 | while (cin>>a[0]){ |
8 | i=1;cout<<a[0]; |
9 | while (getchar()==' '){ |
10 | cin>>a[i]; |
11 | bool flag=true; |
12 | for (int j=0;j<i;j++){ |
13 | if (a[i]==a[j]){ |
14 | flag=false; |
15 | break; |
16 | } |
17 | } |
18 | if(flag) cout<<' '<<a[i]; |
19 | i++; |
20 | } |
21 | printf("\n"); |
22 | } |
23 | return 0; |
24 | } |
96 A18-矩阵幂
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | const int maxn=10; |
6 | struct mat |
7 | { |
8 | ll a[maxn][maxn]; |
9 | void init() { //初始化为单位矩阵 |
10 | memset(a, 0, sizeof(a)); |
11 | for (int i = 0; i<maxn; ++i) { |
12 | a[i][i] = 1; |
13 | } |
14 | } |
15 | void clear(){ //清空矩阵 |
16 | memset(a, 0, sizeof(a)); |
17 | } |
18 | mat operator *(const mat &b)const { //重载乘法 |
19 | mat c; c.clear(); |
20 | for (int i = 0; i < maxn; i++) |
21 | for (int j = 0; j < maxn; j++) |
22 | for (int k = 0; k < maxn; k++) |
23 | c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j]); |
24 | return c; |
25 | } |
26 | }; |
27 | |
28 | mat quick_pow(mat a, ll n) |
29 | { |
30 | mat ans; |
31 | ans.init(); |
32 | while (n) |
33 | { |
34 | if (n & 1)ans = ans*a; |
35 | a = a*a; |
36 | n >>= 1; |
37 | } |
38 | return ans; |
39 | } |
40 | |
41 | int main(){ |
42 | // freopen("1.in","r", stdin); |
43 | // freopen("1.out","w", stdout); |
44 | mat a; |
45 | ll n,k; |
46 | bool flag=false; |
47 | while (~scanf("%lld%lld",&n,&k)){ |
48 | if (flag) printf("\n\n"); |
49 | flag=true; |
50 | a.clear(); |
51 | for (int i=0;i<n;++i){ |
52 | for (int j=0;j<n;++j){ |
53 | scanf("%lld",&a.a[i][j]); |
54 | } |
55 | } |
56 | mat b=quick_pow(a,k); |
57 | for (int i=0;i<n;++i){ |
58 | for (int j=0;j<n;++j){ |
59 | printf("%lld",b.a[i][j]); |
60 | if (j!=n-1) putchar(' '); |
61 | } |
62 | if (i!=n-1) putchar('\n'); |
63 | } |
64 | } |
65 | return 0; |
66 | } |
97 A19-逆时针螺旋方阵
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[110][110]; |
5 | int d[4][2]={1,0,0,1,-1,0,0,-1}; |
6 | |
7 | int main(){ |
8 | int n; |
9 | while(~scanf("%d",&n)){ |
10 | memset(a,-1,sizeof(a)); |
11 | int k=n*2,cnt=0,num=1,curx=0,cury=1; |
12 | while (k/2!=0){ |
13 | for (int i=0;i<k/2;++i){ |
14 | curx+=d[cnt][0]; |
15 | cury+=d[cnt][1]; |
16 | a[curx][cury]=num++; |
17 | } |
18 | cnt=(cnt+1)%4;--k; |
19 | // cout<<curx<<' '<<cury<<endl; |
20 | } |
21 | for (int i=1;i<=n;++i){ |
22 | for (int j=1;j<=n;++j){ |
23 | printf("%d",a[i][j]); |
24 | if (j!=n) putchar(' '); |
25 | } |
26 | putchar('\n'); |
27 | } |
28 | putchar('\n'); |
29 | } |
30 | return 0; |
31 | } |
99 B1-字符串中转换小写字母
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | int T; |
7 | char c; |
8 | cin>>T; |
9 | getchar(); |
10 | while (T--){ |
11 | while ((c=getchar())!='\n'){ |
12 | if (c>='a'&&c<='z') putchar(c-'a'+'A'); |
13 | else putchar(c); |
14 | } |
15 | putchar('\n'); |
16 | } |
17 | return 0; |
18 | } |
100 B2-空格字符与非空格字符统计
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | int T; |
7 | char c; |
8 | cin>>T; |
9 | getchar(); |
10 | while (T--){ |
11 | int i=0,x=0,y=0; |
12 | while ((c=getchar())!='\n'){ |
13 | if (c==' ') x++; |
14 | else y++; |
15 | i++; |
16 | } |
17 | printf("%d %d\n",y,x); |
18 | } |
19 | return 0; |
20 | } |
101 B3-字符串倒置
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | char a[65546]; |
5 | int main(){ |
6 | int T,kase=0; |
7 | cin>>T; |
8 | getchar(); |
9 | while (T--){ |
10 | int i=0; |
11 | while ((a[i]=getchar())!='\n'){ |
12 | i++; |
13 | } |
14 | a[i]='\0'; |
15 | printf("Case %d: ",++kase); |
16 | for (int j=i-1;j>=0;j--){ |
17 | putchar(a[j]); |
18 | } |
19 | putchar('\n'); |
20 | } |
21 | return 0; |
22 | } |
102 B4-统计单词
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int T;cin>>T;getchar(); |
5 | string a; |
6 | for (int i=1;i<=T;i++){ |
7 | int n=0; |
8 | getline(cin,a); |
9 | stringstream b(a); |
10 | string c; |
11 | while (b>>c){ |
12 | n++; |
13 | } |
14 | cout<<"Case "<<i<<": "<<n<<endl; |
15 | } |
16 | return 0; |
17 | } |
103 B5-分离整数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | string s; |
5 | char x; |
6 | bool flag; |
7 | int cnt,kase=0; |
8 | while (getline(cin,s)){ |
9 | stringstream ss(s); |
10 | flag=false; |
11 | cnt=0; |
12 | while (ss>>x){ |
13 | if (x>='0' && x<='9' && flag==false){ |
14 | cnt++; |
15 | flag=true; |
16 | } |
17 | if ((x<'0'||x>'9') && flag==true){ |
18 | flag=false; |
19 | } |
20 | } |
21 | cout<<"Case "<<++kase<<": "<<cnt<<endl; |
22 | } |
23 | return 0; |
24 | } |
104 B6-统计子串
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | //KMP |
5 | int f[400009]; |
6 | string a; |
7 | |
8 | void getf(){ |
9 | int i=0,j=-1; |
10 | f[0]=-1; |
11 | while(i!=a.size()){ |
12 | if(j==-1||a[i]==a[j]) f[++i]=++j; |
13 | else j=f[j]; |
14 | } |
15 | } |
16 | |
17 | string b; |
18 | int main(){ |
19 | int kase=0; |
20 | while (getline(cin,a)){ |
21 | getf(); |
22 | // cout<<a<<endl; |
23 | // for (int i=1;i<=a.size();++i) cout<<f[i]; |
24 | // cout<<endl; |
25 | getline(cin,b); |
26 | int p=0,ans=0,lena=a.size(),lenb=b.size(); |
27 | while (p+lena<=lenb){ |
28 | // for (int i=0;i<p;++i) cout<<' '; |
29 | // cout<<a<<endl; |
30 | bool flag=true; |
31 | int cnt; |
32 | for (cnt=0;cnt<lena;++cnt){ |
33 | if (a[cnt]!=b[p+cnt]){ |
34 | flag=false; |
35 | break; |
36 | } |
37 | } |
38 | if (flag) ++ans; |
39 | p=p+cnt-f[cnt]; |
40 | } |
41 | printf("Case %d: %d\n",++kase,ans); |
42 | } |
43 | return 0; |
44 | } |
105 B7-英文缩写词
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | string cur,s; |
5 | |
6 | int main(){ |
7 | int kase=0,len; |
8 | while (getline(cin,cur)){ |
9 | len=cur.length(); |
10 | for (int i=0;i<len;++i){ |
11 | if (cur[i]>='A' && cur[i]<='Z'){ |
12 | cur[i]=cur[i]-'A'+'a'; |
13 | } |
14 | else if (cur[i]=='-') cur[i]=' '; |
15 | } |
16 | stringstream ss(cur); |
17 | cout<<"Case "<<++kase<<": "; |
18 | while (ss>>s){ |
19 | if (s!="a" && s!="an" && s!="the" && s!="of" && s!="for" && s!="and"){ |
20 | putchar(s[0]-'a'+'A'); |
21 | } |
22 | } |
23 | cout<<endl; |
24 | } |
25 | return 0; |
26 | } |
106 B8-任意数制转换
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | |
5 | void out(int x){ |
6 | if (x>=0&&x<=9){ |
7 | cout<<x; |
8 | return; |
9 | } |
10 | putchar('A'+(x-10)); |
11 | } |
12 | |
13 | int main(){ |
14 | int x,n,kase=0; |
15 | while (cin>>x>>n){ |
16 | cout<<"Case "<<++kase<<": "; |
17 | int yinzi=1; |
18 | while (yinzi*n<=x){ |
19 | yinzi*=n; |
20 | } |
21 | // cout<<yinzi<<endl; |
22 | // system("pause"); |
23 | while (yinzi!=1){ |
24 | // cout<<x/yinzi<<' '<<yinzi<<endl; |
25 | // system("pause"); |
26 | out(x/yinzi); |
27 | x%=yinzi; |
28 | yinzi/=n; |
29 | } |
30 | out(x); |
31 | putchar('\n'); |
32 | } |
33 | } |
107 B9-构造回文
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T;cin>>T;getchar(); |
6 | string a,b; |
7 | for (int kase=1;kase<=T;++kase){ |
8 | getline(cin,a); |
9 | if (a.length()%2==0){ |
10 | b=a; |
11 | } |
12 | else{ |
13 | b=a.substr(0,a.size()-1); |
14 | } |
15 | reverse(b.begin(),b.end()); |
16 | cout<<"Case "<<kase<<": \""<<a+b<<"\""; |
17 | if (kase!=T) cout<<endl; |
18 | } |
19 | } |
108 B10-加密
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | void encrypt(char x,int n){ |
5 | if (x>='a'&&x<='z'){ |
6 | x+=n; |
7 | if (x>'z') x-=26; |
8 | } |
9 | else if (x>='A'&&x<='Z'){ |
10 | x+=n; |
11 | if (x>'Z') x-=26; |
12 | } |
13 | putchar(x); |
14 | } |
15 | |
16 | |
17 | int main(){ |
18 | int n,m; |
19 | char x; |
20 | while (~scanf("%d%d",&n,&m)){ |
21 | getchar(); |
22 | for (int i=0;i<n;++i){ |
23 | x=getchar(); |
24 | encrypt(x,m); |
25 | } |
26 | putchar('\n'); |
27 | } |
28 | return 0; |
29 | } |
109 C1-阶乘尾部0的个数
Language: C++
Time: 1ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int main(){ |
6 | int x,i=1; |
7 | while (scanf("%d",&x)==1){ |
8 | printf("Case %d:%d,",i,x); |
9 | int t=5,sum=0; |
10 | while (t<=x){ |
11 | sum+=x/t; |
12 | t*=5; |
13 | } |
14 | printf("%d\n",sum); |
15 | i++; |
16 | } |
17 | return 0; |
18 | } |
110 C2-n以内能被m整除的最大整数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int a,b,c,kase=0; |
5 | while (~scanf("%d%d",&a,&b)){ |
6 | c=a-a%b; |
7 | if (c>0 && c<=a) printf("Case %d: %d\n",++kase,c); |
8 | else printf("Case %d: 不存在\n",++kase); |
9 | } |
10 | return 0; |
11 | } |
112 C4-n以内与m互质的数的个数
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int gcd(int a,int b){ |
5 | return a == 0 ? b : gcd(b % a, a); |
6 | } |
7 | |
8 | int main(){ |
9 | int n,m,kase=0,cnt; |
10 | while (~scanf("%d%d",&n,&m)){ |
11 | cnt=0; |
12 | for (int i=1;i<=n;++i){ |
13 | if (gcd(i,m)==1) ++cnt; |
14 | } |
15 | printf("Case %d: %d\n",++kase,cnt); |
16 | } |
17 | return 0; |
18 | } |
113 C5-判断素数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | //素数线性筛 |
5 | const int N = 70000; |
6 | bool is[N]; |
7 | int prime[N]; |
8 | int cnt = 0; |
9 | |
10 | void getprime(){ |
11 | memset(is, 1,sizeof(is)); |
12 | is[0] = is[1] = 0; |
13 | for (int i = 2; i < N; ++i){ |
14 | if (is[i]) prime[++cnt] = i; |
15 | for (int j = 1; j <= cnt && i*prime[j] < N; j++){ |
16 | is[i*prime[j]] = 0; |
17 | if (!(i%prime[j])) break; |
18 | } |
19 | } |
20 | } |
21 | |
22 | int main(){ |
23 | getprime(); |
24 | int n,kase=0; |
25 | while (cin>>n){ |
26 | if (is[n]) cout<<"Case "<<++kase<<": "<<n<<" is a prime."<<endl; |
27 | else cout<<"Case "<<++kase<<": "<<n<<" is not a prime."<<endl; |
28 | } |
29 | return 0; |
30 | } |
114 C6-是否被11除尽
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T; |
6 | char x; |
7 | scanf("%d%~c",&T); |
8 | while (T--){ |
9 | int ans=0; |
10 | while ((x=getchar())!='\n'){ |
11 | ans=(ans*10+x-'0')%11; |
12 | } |
13 | if (ans==0) printf("Yes\n"); |
14 | else printf("No\n"); |
15 | } |
16 | return 0; |
17 | } |
115 C7-是否被13除尽
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T; |
6 | char x; |
7 | scanf("%d%~c",&T); |
8 | while (T--){ |
9 | int ans=0; |
10 | while ((x=getchar())!='\n'){ |
11 | ans=(ans*10+x-'0')%13; |
12 | } |
13 | if (ans==0) printf("Yes\n"); |
14 | else printf("No\n"); |
15 | } |
16 | return 0; |
17 | } |
116 C8-是否有整数解
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | //gcd 最大公约数 |
5 | //欧几里得算法 辗转相除 |
6 | long long gcd(long long a, long long b){ |
7 | return a == 0 ? b : gcd(b % a, a); |
8 | } |
9 | |
10 | |
11 | int main(){ |
12 | int T; |
13 | long long a,b,c,d; |
14 | scanf("%d",&T); |
15 | while (T--){ |
16 | scanf("%lld%lld%lld",&a,&b,&c); |
17 | a=a>0?a:-a; |
18 | b=b>0?b:-b; |
19 | c=c>0?c:-c; |
20 | if (a==0 && b==0){ |
21 | printf("%s\n",c==0?"Yes":"No"); |
22 | continue; |
23 | } |
24 | if (a==0){ |
25 | printf("%s\n",c%b==0?"Yes":"No"); |
26 | continue; |
27 | } |
28 | if (b==0){ |
29 | printf("%s\n",c%a==0?"Yes":"No"); |
30 | continue; |
31 | } |
32 | d=gcd(a,b); |
33 | if (c%d==0) printf("Yes\n"); |
34 | else printf("No\n"); |
35 | } |
36 | return 0; |
37 | } |
117 C9-百钱买百鸡
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int a,b,c,kase=0,sum; |
6 | bool flag; |
7 | while (~scanf("%d%d%d",&a,&b,&c)){ |
8 | printf("Case %d:\n",++kase); |
9 | flag=true; |
10 | for (int i=100;i>0 && flag;--i){ |
11 | for (int j=100;j>0;--j){ |
12 | int k=100-i-j; |
13 | if (k<=1 || k%3!=0) continue; |
14 | if (a*i+b*j+c*(k/3)!=100) continue; |
15 | flag=false; |
16 | printf("%d %d %d\n",i,j,k); |
17 | break; |
18 | } |
19 | } |
20 | if (flag) printf("Impossible\n"); |
21 | } |
22 | return 0; |
23 | } |
118 C10-Josephus问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool vis[110]; |
5 | int nxt[110]; |
6 | |
7 | int main(){ |
8 | int n,m,p,pcnt,cnt; |
9 | while (~scanf("%d%d",&n,&m)){ |
10 | memset(vis,false,sizeof(vis)); |
11 | for (int i=0;i<n;++i) scanf("%d",&nxt[i]); |
12 | p=0;pcnt=m-1;cnt=n; |
13 | while (cnt){ |
14 | while(pcnt){ |
15 | ++p; |
16 | if (p==n) p=0; |
17 | if (vis[p]) continue; |
18 | --pcnt; |
19 | } |
20 | vis[p]=true; |
21 | --cnt; |
22 | pcnt=nxt[p]; |
23 | // for (int i=0;i<n;++i){ |
24 | // printf("%d ",vis[i]); |
25 | // } |
26 | // putchar('\n'); |
27 | } |
28 | printf("%d\n",p+1); |
29 | } |
30 | return 0; |
31 | } |
122 D3-整数分拆
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | ll cnt; |
6 | ll ans[]={0,1,2,3,5,7,11,15,22,30,42,56,77,101,135,176,231,297,385,490,627,792,1002,1255,1575,1958,2436,3010,3718,4565,5604,6842,8349,10143,12310,14883,17977,21637,26015,31185,37338,44583,53174,63261,75175,89134,105558,124754,147273,173525,204226,239943,281589,329931,386155,451276,526823,614154,715220,831820,966467,1121505,1300156,1505499,1741630,2012558,2323520,2679689,3087735,3554345,4087968,4697205,5392783,6185689,7089500,8118264,9289091,10619863,12132164,13848650,15796476,18004327,20506255,23338469,26543660,30167357,34262962,38887673,44108109,49995925,56634173,64112359,72533807,82010177,92669720,104651419,118114304,133230930,150198136,169229875,190569292,214481126,241265379,271248950,304801365,342325709,384276336,431149389,483502844,541946240,607163746,679903203,761002156,851376628,952050665,1064144451,1188908248,1327710076,1482074143,1653668665,1844349560}; |
7 | |
8 | |
9 | void dfs(int x,int minn){ |
10 | if (x==0){++cnt; return;} |
11 | for (int i=minn;i<=x;++i){ |
12 | dfs(x-i,i); |
13 | } |
14 | } |
15 | |
16 | int main(){ |
17 | int n; |
18 | while (cin>>n){ |
19 | cout<<ans[n]<<endl; |
20 | } |
21 | return 0; |
22 | } |
124 D5-“红色病毒”的变异
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | //快速幂 |
6 | ll quick_pow(ll a, ll n){ |
7 | ll ans = 1; |
8 | while (n){ |
9 | if (n & 1) ans = ans*a%100; //若当前二进制位为1,则乘以a |
10 | a = a*a%100; //此处的a实际为a^(2^t) |
11 | n >>= 1; |
12 | } |
13 | return ans; |
14 | } |
15 | |
16 | int main(){ |
17 | int T; |
18 | while (scanf("%d",&T),T){ |
19 | int kase=0; |
20 | long long x; |
21 | while (T--){ |
22 | scanf("%lld",&x); |
23 | printf("Case %d: %lld\n",++kase,quick_pow(4,x-1)); |
24 | } |
25 | putchar('\n'); |
26 | } |
27 | } |
125 D6-排坐
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | ll fac[30]; |
7 | |
8 | int main(){ |
9 | int n; |
10 | ll ans; |
11 | fac[0]=1; |
12 | for (int i=1;i<=20;++i){ |
13 | fac[i]=fac[i-1]*i; |
14 | } |
15 | while (cin>>n){ |
16 | ans=fac[n-1]-4*fac[n-2]+2*fac[n-3]; |
17 | cout<<ans<<endl; |
18 | } |
19 | return 0; |
20 | } |
126 D7-A+B问题
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | //简单大数模板 |
5 | struct BigInt { //新建一个结构体,用来模仿大数类 |
6 | const static int mod = 10000; |
7 | const static int DLEN = 4; |
8 | int a[100005],len; //长度 |
9 | BigInt(){ |
10 | memset(a,0,sizeof(a)); //初始化 |
11 | len = 1; |
12 | } |
13 | BigInt(const char s[]){ |
14 | memset(a,0,sizeof(a)); |
15 | int L = strlen(s); |
16 | len = L/DLEN; |
17 | if(L%DLEN) |
18 | len++; //将char数组转化为BigInt类型储存 |
19 | int index = 0; |
20 | for(int i = L-1;i >= 0;i -= DLEN){ |
21 | int t = 0; |
22 | int k = i - DLEN + 1; |
23 | if(k < 0)k = 0; |
24 | for(int j = k;j <= i;j++) |
25 | t = t*10 + s[j] - '0'; |
26 | a[index++] = t; |
27 | } |
28 | } |
29 | BigInt operator +(const BigInt &b)const{ //重构加法运算符 |
30 | BigInt res; |
31 | res.len = max(len,b.len); |
32 | for(int i = 0;i <= res.len;i++) |
33 | res.a[i] = 0; |
34 | for(int i = 0;i < res.len;i++){ |
35 | res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0); |
36 | res.a[i+1] += res.a[i]/mod; |
37 | res.a[i] %= mod; |
38 | } |
39 | if(res.a[res.len] > 0) |
40 | res.len++; |
41 | return res; |
42 | } |
43 | BigInt operator *(const BigInt &b)const{ //重构乘法运算符 |
44 | BigInt res; |
45 | for(int i = 0; i < len;i++){ |
46 | int up = 0; |
47 | for(int j = 0;j < b.len;j++){ |
48 | int temp = a[i]*b.a[j] + res.a[i+j] + up; |
49 | res.a[i+j] = temp%mod; |
50 | up = temp/mod; |
51 | } |
52 | if(up != 0) |
53 | res.a[i + b.len] = up; |
54 | } |
55 | res.len = len + b.len; |
56 | while(res.a[res.len - 1] == 0 &&res.len > 1) |
57 | res.len--; |
58 | return res; |
59 | } |
60 | void output(){ //由于没有输出的方式,添加输出的类 |
61 | printf("%d",a[len-1]); |
62 | for(int i = len-2;i >=0 ;i--) |
63 | printf("%04d",a[i]); |
64 | //printf("\n"); |
65 | } |
66 | }; |
67 | |
68 | char a[10000],b[10000]; |
69 | |
70 | int main(){ |
71 | while(~scanf("%s%s",a,b)){ |
72 | BigInt aa=a; |
73 | BigInt bb=b; |
74 | BigInt cc=aa+bb; |
75 | aa.output(); |
76 | putchar('+'); |
77 | bb.output(); |
78 | putchar('='); |
79 | cc.output(); |
80 | putchar('\n'); |
81 | } |
82 | return 0; |
83 | } |
127 D8-A-B问题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | // base and base_digits must be consistent |
5 | constexpr int base = 1000000000; |
6 | constexpr int base_digits = 9; |
7 | |
8 | struct bigint |
9 | { |
10 | // value == 0 is represented by empty z |
11 | vector<int> z; // digits |
12 | |
13 | // sign == 1 <==> value >= 0 |
14 | // sign == -1 <==> value < 0 |
15 | int sign; |
16 | |
17 | bigint() : sign(1) {} |
18 | |
19 | bigint(long long v) { *this = v; } |
20 | |
21 | bigint& operator=(long long v) |
22 | { |
23 | sign = v < 0 ? -1 : 1; |
24 | v *= sign; |
25 | z.clear(); |
26 | for (; v > 0; v = v / base) |
27 | z.push_back((int)(v % base)); |
28 | return *this; |
29 | } |
30 | |
31 | bigint(const string& s) { read(s); } |
32 | |
33 | bigint& operator+=(const bigint& other) |
34 | { |
35 | if (sign == other.sign) |
36 | { |
37 | for (int i = 0, carry = 0; i < other.z.size() || carry; ++i) |
38 | { |
39 | if (i == z.size()) |
40 | z.push_back(0); |
41 | z[i] += carry + (i < other.z.size() ? other.z[i] : 0); |
42 | carry = z[i] >= base; |
43 | if (carry) |
44 | z[i] -= base; |
45 | } |
46 | } |
47 | else if (other != 0 /* prevent infinite loop */) |
48 | { |
49 | *this -= -other; |
50 | } |
51 | return *this; |
52 | } |
53 | |
54 | friend bigint operator+(bigint a, const bigint& b) |
55 | { |
56 | return a += b; |
57 | } |
58 | |
59 | bigint& operator-=(const bigint& other) |
60 | { |
61 | if (sign == other.sign) |
62 | { |
63 | if (sign == 1 && *this >= other || sign == -1 && *this <= other) |
64 | { |
65 | for (int i = 0, carry = 0; i < other.z.size() || carry; ++i) |
66 | { |
67 | z[i] -= carry + (i < other.z.size() ? other.z[i] : 0); |
68 | carry = z[i] < 0; |
69 | if (carry) |
70 | z[i] += base; |
71 | } |
72 | trim(); |
73 | } |
74 | else |
75 | { |
76 | *this = other - *this; |
77 | this->sign = -this->sign; |
78 | } |
79 | } |
80 | else |
81 | { |
82 | *this += -other; |
83 | } |
84 | return *this; |
85 | } |
86 | |
87 | friend bigint operator-(bigint a, const bigint& b) |
88 | { |
89 | return a -= b; |
90 | } |
91 | |
92 | bigint& operator*=(int v) |
93 | { |
94 | if (v < 0) |
95 | sign = -sign, v = -v; |
96 | for (int i = 0, carry = 0; i < z.size() || carry; ++i) |
97 | { |
98 | if (i == z.size()) |
99 | z.push_back(0); |
100 | long long cur = (long long)z[i] * v + carry; |
101 | carry = (int)(cur / base); |
102 | z[i] = (int)(cur % base); |
103 | } |
104 | trim(); |
105 | return *this; |
106 | } |
107 | |
108 | bigint operator*(int v) const |
109 | { |
110 | return bigint(*this) *= v; |
111 | } |
112 | |
113 | friend pair<bigint, bigint> divmod(const bigint& a1, const bigint& b1) |
114 | { |
115 | int norm = base / (b1.z.back() + 1); |
116 | bigint a = a1.abs() * norm; |
117 | bigint b = b1.abs() * norm; |
118 | bigint q, r; |
119 | q.z.resize(a.z.size()); |
120 | |
121 | for (int i = (int)a.z.size() - 1; i >= 0; i--) |
122 | { |
123 | r *= base; |
124 | r += a.z[i]; |
125 | int s1 = b.z.size() < r.z.size() ? r.z[b.z.size()] : 0; |
126 | int s2 = b.z.size() - 1 < r.z.size() ? r.z[b.z.size() - 1] : 0; |
127 | int d = (int)(((long long)s1 * base + s2) / b.z.back()); |
128 | r -= b * d; |
129 | while (r < 0) |
130 | r += b, --d; |
131 | q.z[i] = d; |
132 | } |
133 | |
134 | q.sign = a1.sign * b1.sign; |
135 | r.sign = a1.sign; |
136 | q.trim(); |
137 | r.trim(); |
138 | return {q, r / norm}; |
139 | } |
140 | |
141 | friend bigint sqrt(const bigint& a1) |
142 | { |
143 | bigint a = a1; |
144 | while (a.z.empty() || a.z.size() % 2 == 1) |
145 | a.z.push_back(0); |
146 | |
147 | int n = a.z.size(); |
148 | |
149 | int firstDigit = (int)::sqrt((double)a.z[n - 1] * base + a.z[n - 2]); |
150 | int norm = base / (firstDigit + 1); |
151 | a *= norm; |
152 | a *= norm; |
153 | while (a.z.empty() || a.z.size() % 2 == 1) |
154 | a.z.push_back(0); |
155 | |
156 | bigint r = (long long)a.z[n - 1] * base + a.z[n - 2]; |
157 | firstDigit = (int)::sqrt((double)a.z[n - 1] * base + a.z[n - 2]); |
158 | int q = firstDigit; |
159 | bigint res; |
160 | |
161 | for (int j = n / 2 - 1; j >= 0; j--) |
162 | { |
163 | for (;; --q) |
164 | { |
165 | bigint r1 = (r - (res * 2 * base + q) * q) * base * base + (j > 0 ? (long long)a.z[2 * j - 1] * base + a.z[2 * j - 2] : 0); |
166 | if (r1 >= 0) |
167 | { |
168 | r = r1; |
169 | break; |
170 | } |
171 | } |
172 | res *= base; |
173 | res += q; |
174 | |
175 | if (j > 0) |
176 | { |
177 | int d1 = res.z.size() + 2 < r.z.size() ? r.z[res.z.size() + 2] : 0; |
178 | int d2 = res.z.size() + 1 < r.z.size() ? r.z[res.z.size() + 1] : 0; |
179 | int d3 = res.z.size() < r.z.size() ? r.z[res.z.size()] : 0; |
180 | q = (int)(((long long)d1 * base * base + (long long)d2 * base + d3) / (firstDigit * 2)); |
181 | } |
182 | } |
183 | |
184 | res.trim(); |
185 | return res / norm; |
186 | } |
187 | |
188 | bigint operator/(const bigint& v) const |
189 | { |
190 | return divmod(*this, v).first; |
191 | } |
192 | |
193 | bigint operator%(const bigint& v) const |
194 | { |
195 | return divmod(*this, v).second; |
196 | } |
197 | |
198 | bigint& operator/=(int v) |
199 | { |
200 | if (v < 0) |
201 | sign = -sign, v = -v; |
202 | for (int i = (int)z.size() - 1, rem = 0; i >= 0; --i) |
203 | { |
204 | long long cur = z[i] + rem * (long long)base; |
205 | z[i] = (int)(cur / v); |
206 | rem = (int)(cur % v); |
207 | } |
208 | trim(); |
209 | return *this; |
210 | } |
211 | |
212 | bigint operator/(int v) const |
213 | { |
214 | return bigint(*this) /= v; |
215 | } |
216 | |
217 | int operator%(int v) const |
218 | { |
219 | if (v < 0) |
220 | v = -v; |
221 | int m = 0; |
222 | for (int i = (int)z.size() - 1; i >= 0; --i) |
223 | m = (int)((z[i] + m * (long long)base) % v); |
224 | return m * sign; |
225 | } |
226 | |
227 | bigint& operator*=(const bigint& v) |
228 | { |
229 | *this = *this * v; |
230 | return *this; |
231 | } |
232 | |
233 | bigint& operator/=(const bigint& v) |
234 | { |
235 | *this = *this / v; |
236 | return *this; |
237 | } |
238 | |
239 | bool operator<(const bigint& v) const |
240 | { |
241 | if (sign != v.sign) |
242 | return sign < v.sign; |
243 | if (z.size() != v.z.size()) |
244 | return z.size() * sign < v.z.size() * v.sign; |
245 | for (int i = (int)z.size() - 1; i >= 0; i--) |
246 | if (z[i] != v.z[i]) |
247 | return z[i] * sign < v.z[i] * sign; |
248 | return false; |
249 | } |
250 | |
251 | bool operator>(const bigint& v) const |
252 | { |
253 | return v < *this; |
254 | } |
255 | |
256 | bool operator<=(const bigint& v) const |
257 | { |
258 | return !(v < *this); |
259 | } |
260 | |
261 | bool operator>=(const bigint& v) const |
262 | { |
263 | return !(*this < v); |
264 | } |
265 | |
266 | bool operator==(const bigint& v) const |
267 | { |
268 | return !(*this < v) && !(v < *this); |
269 | } |
270 | |
271 | bool operator!=(const bigint& v) const |
272 | { |
273 | return *this < v || v < *this; |
274 | } |
275 | |
276 | void trim() |
277 | { |
278 | while (!z.empty() && z.back() == 0) |
279 | z.pop_back(); |
280 | if (z.empty()) |
281 | sign = 1; |
282 | } |
283 | |
284 | bool isZero() const |
285 | { |
286 | return z.empty(); |
287 | } |
288 | |
289 | friend bigint operator-(bigint v) |
290 | { |
291 | if (!v.z.empty()) |
292 | v.sign = -v.sign; |
293 | return v; |
294 | } |
295 | |
296 | bigint abs() const |
297 | { |
298 | return sign == 1 ? *this : -*this; |
299 | } |
300 | |
301 | long long longValue() const |
302 | { |
303 | long long res = 0; |
304 | for (int i = (int)z.size() - 1; i >= 0; i--) |
305 | res = res * base + z[i]; |
306 | return res * sign; |
307 | } |
308 | |
309 | friend bigint gcd(const bigint& a, const bigint& b) |
310 | { |
311 | return b.isZero() ? a : gcd(b, a % b); |
312 | } |
313 | |
314 | friend bigint lcm(const bigint& a, const bigint& b) |
315 | { |
316 | return a / gcd(a, b) * b; |
317 | } |
318 | |
319 | void read(const string& s) |
320 | { |
321 | sign = 1; |
322 | z.clear(); |
323 | int pos = 0; |
324 | while (pos < s.size() && (s[pos] == '-' || s[pos] == '+')) |
325 | { |
326 | if (s[pos] == '-') |
327 | sign = -sign; |
328 | ++pos; |
329 | } |
330 | for (int i = (int)s.size() - 1; i >= pos; i -= base_digits) |
331 | { |
332 | int x = 0; |
333 | for (int j = max(pos, i - base_digits + 1); j <= i; j++) |
334 | x = x * 10 + s[j] - '0'; |
335 | z.push_back(x); |
336 | } |
337 | trim(); |
338 | } |
339 | |
340 | friend istream& operator>>(istream& stream, bigint& v) |
341 | { |
342 | string s; |
343 | stream >> s; |
344 | v.read(s); |
345 | return stream; |
346 | } |
347 | |
348 | friend ostream& operator<<(ostream& stream, const bigint& v) |
349 | { |
350 | if (v.sign == -1) |
351 | stream << '-'; |
352 | stream << (v.z.empty() ? 0 : v.z.back()); |
353 | for (int i = (int)v.z.size() - 2; i >= 0; --i) |
354 | stream << setw(base_digits) << setfill('0') << v.z[i]; |
355 | return stream; |
356 | } |
357 | |
358 | static vector<int> convert_base(const vector<int>& a, int old_digits, int new_digits) |
359 | { |
360 | vector<long long> p(max(old_digits, new_digits) + 1); |
361 | p[0] = 1; |
362 | for (int i = 1; i < p.size(); i++) |
363 | p[i] = p[i - 1] * 10; |
364 | vector<int> res; |
365 | long long cur = 0; |
366 | int cur_digits = 0; |
367 | for (int v : a) |
368 | { |
369 | cur += v * p[cur_digits]; |
370 | cur_digits += old_digits; |
371 | while (cur_digits >= new_digits) |
372 | { |
373 | res.push_back(int(cur % p[new_digits])); |
374 | cur /= p[new_digits]; |
375 | cur_digits -= new_digits; |
376 | } |
377 | } |
378 | res.push_back((int)cur); |
379 | while (!res.empty() && res.back() == 0) |
380 | res.pop_back(); |
381 | return res; |
382 | } |
383 | |
384 | typedef vector<long long> vll; |
385 | |
386 | static vll karatsubaMultiply(const vll& a, const vll& b) |
387 | { |
388 | int n = a.size(); |
389 | vll res(n + n); |
390 | if (n <= 32) |
391 | { |
392 | for (int i = 0; i < n; i++) |
393 | for (int j = 0; j < n; j++) |
394 | res[i + j] += a[i] * b[j]; |
395 | return res; |
396 | } |
397 | |
398 | int k = n >> 1; |
399 | vll a1(a.begin(), a.begin() + k); |
400 | vll a2(a.begin() + k, a.end()); |
401 | vll b1(b.begin(), b.begin() + k); |
402 | vll b2(b.begin() + k, b.end()); |
403 | |
404 | vll a1b1 = karatsubaMultiply(a1, b1); |
405 | vll a2b2 = karatsubaMultiply(a2, b2); |
406 | |
407 | for (int i = 0; i < k; i++) |
408 | a2[i] += a1[i]; |
409 | for (int i = 0; i < k; i++) |
410 | b2[i] += b1[i]; |
411 | |
412 | vll r = karatsubaMultiply(a2, b2); |
413 | for (int i = 0; i < a1b1.size(); i++) |
414 | r[i] -= a1b1[i]; |
415 | for (int i = 0; i < a2b2.size(); i++) |
416 | r[i] -= a2b2[i]; |
417 | |
418 | for (int i = 0; i < r.size(); i++) |
419 | res[i + k] += r[i]; |
420 | for (int i = 0; i < a1b1.size(); i++) |
421 | res[i] += a1b1[i]; |
422 | for (int i = 0; i < a2b2.size(); i++) |
423 | res[i + n] += a2b2[i]; |
424 | return res; |
425 | } |
426 | |
427 | bigint operator*(const bigint& v) const |
428 | { |
429 | vector<int> a6 = convert_base(this->z, base_digits, 6); |
430 | vector<int> b6 = convert_base(v.z, base_digits, 6); |
431 | vll a(a6.begin(), a6.end()); |
432 | vll b(b6.begin(), b6.end()); |
433 | while (a.size() < b.size()) |
434 | a.push_back(0); |
435 | while (b.size() < a.size()) |
436 | b.push_back(0); |
437 | while (a.size() & (a.size() - 1)) |
438 | a.push_back(0), b.push_back(0); |
439 | vll c = karatsubaMultiply(a, b); |
440 | bigint res; |
441 | res.sign = sign * v.sign; |
442 | for (int i = 0, carry = 0; i < c.size(); i++) |
443 | { |
444 | long long cur = c[i] + carry; |
445 | res.z.push_back((int)(cur % 1000000)); |
446 | carry = (int)(cur / 1000000); |
447 | } |
448 | res.z = convert_base(res.z, 6, base_digits); |
449 | res.trim(); |
450 | return res; |
451 | } |
452 | }; |
453 | |
454 | int main() |
455 | { |
456 | bigint a, b; |
457 | int T; |
458 | cin>>T; |
459 | while (T--) |
460 | { |
461 | cin>>a>>b; |
462 | cout<<a<<'-'<<b<<'='<<a-b<<endl; |
463 | } |
464 | } |
128 D9-n!
Language: C++
Time: 192ms
1 |
|
2 | using namespace std; |
3 | struct BigInt { //新建一个结构体,用来模仿大数类 |
4 | const static int mod = 10000; |
5 | const static int DLEN = 4; |
6 | int a[100005],len; //长度 |
7 | BigInt(){ |
8 | memset(a,0,sizeof(a)); //初始化 |
9 | len = 1; |
10 | } |
11 | BigInt(const char s[]){ |
12 | memset(a,0,sizeof(a)); |
13 | int L = strlen(s); |
14 | len = L/DLEN; |
15 | if(L%DLEN) |
16 | len++; //将char数组转化为BigInt类型储存 |
17 | int index = 0; |
18 | for(int i = L-1;i >= 0;i -= DLEN){ |
19 | int t = 0; |
20 | int k = i - DLEN + 1; |
21 | if(k < 0)k = 0; |
22 | for(int j = k;j <= i;j++) |
23 | t = t*10 + s[j] - '0'; |
24 | a[index++] = t; |
25 | } |
26 | } |
27 | BigInt operator +(const BigInt &b)const{ //重构加法运算符 |
28 | BigInt res; |
29 | res.len = max(len,b.len); |
30 | for(int i = 0;i <= res.len;i++) |
31 | res.a[i] = 0; |
32 | for(int i = 0;i < res.len;i++){ |
33 | res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0); |
34 | res.a[i+1] += res.a[i]/mod; |
35 | res.a[i] %= mod; |
36 | } |
37 | if(res.a[res.len] > 0) |
38 | res.len++; |
39 | return res; |
40 | } |
41 | BigInt operator *(const BigInt &b)const{ //重构乘法运算符 |
42 | BigInt res; |
43 | for(int i = 0; i < len;i++){ |
44 | int up = 0; |
45 | for(int j = 0;j < b.len;j++){ |
46 | int temp = a[i]*b.a[j] + res.a[i+j] + up; |
47 | res.a[i+j] = temp%mod; |
48 | up = temp/mod; |
49 | } |
50 | if(up != 0) |
51 | res.a[i + b.len] = up; |
52 | } |
53 | res.len = len + b.len; |
54 | while(res.a[res.len - 1] == 0 &&res.len > 1) |
55 | res.len--; |
56 | return res; |
57 | } |
58 | void output(){ //由于没有输出的方式,添加输出的类 |
59 | printf("%d",a[len-1]); |
60 | int cnt=log10(a[len-1])+1; |
61 | for(int i = len-2;i >=0 ;i--){ |
62 | if (cnt==80){putchar('\n');cnt=0;} |
63 | printf("%d",a[i]/1000); |
64 | ++cnt;a[i]%=1000; |
65 | if (cnt==80){putchar('\n');cnt=0;} |
66 | printf("%d",a[i]/100); |
67 | ++cnt;a[i]%=100; |
68 | if (cnt==80){putchar('\n');cnt=0;} |
69 | printf("%d",a[i]/10); |
70 | ++cnt;a[i]%=10; |
71 | if (cnt==80){putchar('\n');cnt=0;} |
72 | printf("%d",a[i]); |
73 | ++cnt; |
74 | } |
75 | if (cnt!=0) putchar('\n'); |
76 | } |
77 | }; |
78 | |
79 | |
80 | int main(){ |
81 | int n; |
82 | char tmp[]={'1','\0'}; |
83 | while (~scanf("%d",&n)){ |
84 | BigInt a=tmp,b=tmp,c=tmp; |
85 | printf("%d!\n",n); |
86 | for (int i=1;i<=n;++i){ |
87 | a=a*b; |
88 | b=b+c; |
89 | } |
90 | a.output(); |
91 | } |
92 | return 0; |
93 | } |
129 D10-n的n次幂
Language: C++
Time: 96ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct BigInt { //新建一个结构体,用来模仿大数类 |
5 | const static int mod = 10000; |
6 | const static int DLEN = 4; |
7 | int a[100005],len; //长度 |
8 | BigInt(){ |
9 | memset(a,0,sizeof(a)); //初始化 |
10 | len = 1; |
11 | } |
12 | BigInt(const char s[]){ |
13 | memset(a,0,sizeof(a)); |
14 | int L = strlen(s); |
15 | len = L/DLEN; |
16 | if(L%DLEN) |
17 | len++; //将char数组转化为BigInt类型储存 |
18 | int index = 0; |
19 | for(int i = L-1;i >= 0;i -= DLEN){ |
20 | int t = 0; |
21 | int k = i - DLEN + 1; |
22 | if(k < 0)k = 0; |
23 | for(int j = k;j <= i;j++) |
24 | t = t*10 + s[j] - '0'; |
25 | a[index++] = t; |
26 | } |
27 | } |
28 | BigInt operator +(const BigInt &b)const{ //重构加法运算符 |
29 | BigInt res; |
30 | res.len = max(len,b.len); |
31 | for(int i = 0;i <= res.len;i++) |
32 | res.a[i] = 0; |
33 | for(int i = 0;i < res.len;i++){ |
34 | res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0); |
35 | res.a[i+1] += res.a[i]/mod; |
36 | res.a[i] %= mod; |
37 | } |
38 | if(res.a[res.len] > 0) |
39 | res.len++; |
40 | return res; |
41 | } |
42 | BigInt operator *(const BigInt &b)const{ //重构乘法运算符 |
43 | BigInt res; |
44 | for(int i = 0; i < len;i++){ |
45 | int up = 0; |
46 | for(int j = 0;j < b.len;j++){ |
47 | int temp = a[i]*b.a[j] + res.a[i+j] + up; |
48 | res.a[i+j] = temp%mod; |
49 | up = temp/mod; |
50 | } |
51 | if(up != 0) |
52 | res.a[i + b.len] = up; |
53 | } |
54 | res.len = len + b.len; |
55 | while(res.a[res.len - 1] == 0 &&res.len > 1) |
56 | res.len--; |
57 | return res; |
58 | } |
59 | void output(){ //由于没有输出的方式,添加输出的类 |
60 | printf("%d",a[len-1]); |
61 | for(int i = len-2;i >=0 ;i--) |
62 | printf("%04d",a[i]); |
63 | printf("\n"); |
64 | } |
65 | }; |
66 | |
67 | int main(){ |
68 | char x[10]; |
69 | while (~scanf("%s",x)){ |
70 | BigInt a=x,b=x; |
71 | int xx=atoi(x); |
72 | printf("%d^%d=\n",xx,xx); |
73 | for (int i=1;i<xx;++i){ |
74 | a=a*b; |
75 | } |
76 | a.output(); |
77 | } |
78 | return 0; |
79 | } |
130 Yaoge is Good at Playing Army Chess
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | queue<int> q1,q2; |
7 | |
8 | int main(){ |
9 | int n,m,cur; |
10 | while (~scanf("%d%d",&n,&m)){ |
11 | while (!q1.empty()) q1.pop(); |
12 | while (!q2.empty()) q2.pop(); |
13 | while (n--){ |
14 | scanf("%d",&cur); |
15 | q1.push(cur); |
16 | } |
17 | while (m--){ |
18 | scanf("%d",&cur); |
19 | q2.push(cur); |
20 | } |
21 | while (true){ |
22 | if (q1.empty()&&q2.empty()){ |
23 | printf("Draw\n"); |
24 | break; |
25 | } |
26 | if (q1.empty()){ |
27 | printf("Second\n"); |
28 | break; |
29 | } |
30 | if (q2.empty()){ |
31 | printf("First\n"); |
32 | break; |
33 | } |
34 | if (q1.front()==31&&q2.front()==31){ |
35 | printf("Draw\n"); |
36 | break; |
37 | } |
38 | if (q1.front()==30 || q2.front()==30 || q1.front()==q2.front()){ |
39 | q1.pop();q2.pop(); |
40 | } |
41 | else if (q1.front()==31){ |
42 | if (q2.front()==32) q1.pop(); |
43 | else q2.pop(); |
44 | } |
45 | else if (q2.front()==31){ |
46 | if (q1.front()==32) q2.pop(); |
47 | else q1.pop(); |
48 | } |
49 | else{ |
50 | if (q1.front()>q2.front()) q2.pop(); |
51 | else q1.pop(); |
52 | } |
53 | } |
54 | } |
55 | return 0; |
56 | } |
140 The Only Principle of Yaoge
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | char x; |
6 | int status=0,ans=0; |
7 | while ((x=getchar())!=EOF){ |
8 | if (x=='y' || x=='Y') status=1; |
9 | else if ((x=='a' || x=='A') && status==1) status=2; |
10 | else if ((x=='o' || x=='O') && status==2) status=3; |
11 | else if ((x=='g' || x=='G') && status==3) status=4; |
12 | else if ((x=='e' || x=='E') && status==4){ |
13 | ++ans;status=0; |
14 | } |
15 | else status=0; |
16 | } |
17 | printf("%d\n",ans); |
18 | return 0; |
19 | } |
146 XOR Zero
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | int n; |
7 | ll num[110]; |
8 | bool used[110]; |
9 | |
10 | void dbg(ll x){ |
11 | for (int i=63;i>=0;--i){ |
12 | printf("%d",(x&(1LL<<i))?1:0); |
13 | } |
14 | putchar('\n'); |
15 | } |
16 | |
17 | void Guass(){ |
18 | ll cur;int base; |
19 | memset(used,false,sizeof(used)); |
20 | for (int p=1;p<=64;++p){ |
21 | cur=(1LL<<(64-p)); |
22 | base=-1; |
23 | for (int i=1;i<=n;++i){ |
24 | if ((num[i]&cur)&&!used[i]){ |
25 | base=i; |
26 | used[base]=true; |
27 | break; |
28 | } |
29 | } |
30 | if (base!=-1){ |
31 | for (int i=1;i<=n;++i){ |
32 | if ((num[i]&cur)&&i!=base) |
33 | num[i]^=num[base]; |
34 | } |
35 | } |
36 | // cout<<"term "<<p<<endl; |
37 | // dbg(1LL<<(64-p)); |
38 | // cout<<"------------------------"<<endl;; |
39 | // for (int i=1;i<=n;++i){ |
40 | // dbg(num[i]); |
41 | // } |
42 | // cout<<endl; |
43 | } |
44 | } |
45 | |
46 | int main(){ |
47 | bool flag; |
48 | while (~scanf("%d",&n)){ |
49 | for (int i=1;i<=n;++i) |
50 | scanf("%lld",&num[i]); |
51 | if (n>=65){ |
52 | printf("YES\n"); |
53 | continue; |
54 | } |
55 | Guass(); |
56 | flag=false; |
57 | for (int i=1;i<=n&&!flag;++i){ |
58 | if (num[i]==0) flag=true; |
59 | } |
60 | printf("%s\n",flag?"YES":"NO"); |
61 | } |
62 | return 0; |
63 | } |
149 找个数
Language: C++
Time: 248ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,q,x; |
6 | map <int,int> mmp; |
7 | scanf("%d%d",&n,&q); |
8 | while (n--){ |
9 | scanf("%d",&x); |
10 | ++mmp[x]; |
11 | } |
12 | while (q--){ |
13 | scanf("%d",&x); |
14 | if (mmp[x]>0) printf("Yes\n"); |
15 | else printf("No\n"); |
16 | } |
17 | return 0; |
18 | } |
151 等级森严
Language: C++
Time: 44ms
1 |
|
2 | using namespace std; |
3 | |
4 | int fa[100100]; |
5 | int rk[100100]; |
6 | |
7 | struct node{ |
8 | int fa,rk; |
9 | }; |
10 | |
11 | void init(int n){ |
12 | for (int i=1;i<=n;++i){ |
13 | fa[i]=i; |
14 | rk[i]=0; |
15 | } |
16 | } |
17 | |
18 | node findfa(int x){ |
19 | if (fa[x]==x) return (node){x,0}; |
20 | node ret=findfa(fa[x]); |
21 | fa[x]=ret.fa; |
22 | rk[x]+=ret.rk; |
23 | ret.rk=rk[x]; |
24 | return ret; |
25 | } |
26 | |
27 | void merge(int x,int y){ |
28 | int fax=findfa(x).fa; |
29 | int fay=findfa(y).fa; |
30 | if (fax==fay) return; |
31 | fa[fax]=y; |
32 | rk[fax]=1; |
33 | } |
34 | |
35 | node query(int x){ |
36 | return findfa(x); |
37 | } |
38 | |
39 | |
40 | int main(){ |
41 | int n,T,op,x,y; |
42 | node a,b; |
43 | scanf("%d%d",&n,&T); |
44 | init(n); |
45 | while (T--){ |
46 | scanf("%d%d%d",&op,&x,&y); |
47 | if (op==1){ |
48 | merge(x,y); |
49 | } |
50 | else{ |
51 | a=query(x); |
52 | b=query(y); |
53 | if (a.fa!=b.fa) printf("No\n"); |
54 | else printf("Yes %d\n",b.rk-a.rk); |
55 | } |
56 | } |
57 | return 0; |
58 | } |
152 你个叛徒
Language: C++
Time: 48ms
1 |
|
2 | using namespace std; |
3 | |
4 | const int maxn=3e5+1000; |
5 | |
6 | int tmcnt; |
7 | int fa[maxn]; |
8 | int pos[maxn]; |
9 | |
10 | void init(int n){ |
11 | for (int i=1;i<maxn;++i){ |
12 | fa[i]=pos[i]=i; |
13 | } |
14 | tmcnt=n; |
15 | } |
16 | |
17 | int findfa(int x){ |
18 | if (x==fa[x]) return x; |
19 | return x=findfa(fa[x]); |
20 | } |
21 | |
22 | void merge(int x,int y){ |
23 | x=pos[x]; |
24 | y=pos[y]; |
25 | x=findfa(x); |
26 | y=findfa(y); |
27 | if (x==y) return; |
28 | fa[x]=y; |
29 | return; |
30 | } |
31 | |
32 | bool query(int x,int y){ |
33 | x=pos[x]; |
34 | y=pos[y]; |
35 | x=findfa(x); |
36 | y=findfa(y); |
37 | return x==y; |
38 | } |
39 | |
40 | void split(int x){ |
41 | pos[x]=tmcnt++; |
42 | return; |
43 | } |
44 | |
45 | int main(){ |
46 | int n,T,op,x,y; |
47 | scanf("%d%d",&n,&T); |
48 | init(n); |
49 | while (T--){ |
50 | scanf("%d%d%d",&op,&x,&y); |
51 | if (op==1){ |
52 | merge(x,y); |
53 | } |
54 | else if (op==2){ |
55 | if (query(x,y)) printf("Yes\n"); |
56 | else printf("No\n"); |
57 | } |
58 | else{ |
59 | split(x); |
60 | merge(x,y); |
61 | } |
62 | } |
63 | return 0; |
64 | } |
154 求个和
Language: C++
Time: 60ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long ans[100100]; |
5 | |
6 | int main(){ |
7 | int n,q,tmp,l,r; |
8 | scanf("%d%d",&n,&q); |
9 | ans[0]=0; |
10 | for (int i=1;i<=n;++i){ |
11 | scanf("%d",&tmp); |
12 | ans[i]=ans[i-1]+tmp; |
13 | } |
14 | while (q--){ |
15 | scanf("%d%d",&l,&r); |
16 | printf("%lld\n",ans[r]-ans[l-1]); |
17 | } |
18 | return 0; |
19 | } |
155 变个法地求个和
Language: C++
Time: 156ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 |
|
5 |
|
6 |
|
7 |
|
8 | const int MAXN=100010; |
9 | |
10 | ll tree[MAXN*4]; |
11 | int lazy[MAXN*4]; |
12 | |
13 | void push_up(int rt){ |
14 | tree[rt]=tree[lson]+tree[rson]; |
15 | } |
16 | |
17 | void push_down(int rt,int len){ |
18 | if (lazy[rt]){ |
19 | lazy[lson]+=lazy[rt]; |
20 | lazy[rson]+=lazy[rt]; |
21 | tree[lson]+=lazy[rt]*(len-(len>>1)); |
22 | tree[rson]+=lazy[rt]*(len>>1); |
23 | lazy[rt]=0; |
24 | } |
25 | } |
26 | |
27 | void build(int L,int R,int rt){ |
28 | lazy[rt]=0; |
29 | if (L==R){ |
30 | scanf("%lld",&tree[rt]); |
31 | return; |
32 | } |
33 | int mid=(L+R)>>1; |
34 | build(Lson); |
35 | build(Rson); |
36 | push_up(rt); |
37 | } |
38 | |
39 | void update(int l,int r,ll val,int L,int R,int rt){ |
40 | if (L>=l && R<=r){ |
41 | tree[rt]+=val*(R-L+1); |
42 | lazy[rt]+=val; |
43 | return; |
44 | } |
45 | push_down(rt,R-L+1); |
46 | int mid=(L+R)>>1; |
47 | if (mid>=l) update(l,r,val,Lson); |
48 | if (mid<r) update(l,r,val,Rson); |
49 | push_up(rt); |
50 | } |
51 | |
52 | ll query(int l,int r,int L,int R,int rt){ |
53 | if (L>=l && R<=r){ |
54 | return tree[rt]; |
55 | } |
56 | push_down(rt,R-L+1); |
57 | ll ans=0; |
58 | int mid=(L+R)>>1; |
59 | if (mid>=l) ans+=query(l,r,Lson); |
60 | if (mid<r) ans+=query(l,r,Rson); |
61 | push_up(rt); |
62 | return ans; |
63 | } |
64 | |
65 | int main(){ |
66 | int n,q,op,l,r; |
67 | ll v; |
68 | scanf("%d%d",&n,&q); |
69 | build(1,n,1); |
70 | while (q--){ |
71 | scanf("%d",&op); |
72 | if (op==1){ |
73 | scanf("%d%lld",&l,&v); |
74 | update(l,l,v,1,n,1); |
75 | } |
76 | else if (op==2){ |
77 | scanf("%d%d",&l,&r); |
78 | v=query(l,r,1,n,1); |
79 | printf("%lld\n",v); |
80 | } |
81 | } |
82 | return 0; |
83 | } |
156 变着法地求个值
Language: C++
Time: 132ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 |
|
5 |
|
6 |
|
7 |
|
8 | const int MAXN=100010; |
9 | |
10 | ll tree[MAXN*4]; |
11 | int lazy[MAXN*4]; |
12 | |
13 | void push_up(int rt){ |
14 | tree[rt]=tree[lson]+tree[rson]; |
15 | } |
16 | |
17 | void push_down(int rt,int len){ |
18 | if (lazy[rt]){ |
19 | lazy[lson]+=lazy[rt]; |
20 | lazy[rson]+=lazy[rt]; |
21 | tree[lson]+=lazy[rt]*(len-(len>>1)); |
22 | tree[rson]+=lazy[rt]*(len>>1); |
23 | lazy[rt]=0; |
24 | } |
25 | } |
26 | |
27 | void build(int L,int R,int rt){ |
28 | lazy[rt]=0; |
29 | if (L==R){ |
30 | scanf("%lld",&tree[rt]); |
31 | return; |
32 | } |
33 | int mid=(L+R)>>1; |
34 | build(Lson); |
35 | build(Rson); |
36 | push_up(rt); |
37 | } |
38 | |
39 | void update(int l,int r,ll val,int L,int R,int rt){ |
40 | if (L>=l && R<=r){ |
41 | tree[rt]+=val*(R-L+1); |
42 | lazy[rt]+=val; |
43 | return; |
44 | } |
45 | push_down(rt,R-L+1); |
46 | int mid=(L+R)>>1; |
47 | if (mid>=l) update(l,r,val,Lson); |
48 | if (mid<r) update(l,r,val,Rson); |
49 | push_up(rt); |
50 | } |
51 | |
52 | ll query(int p,int L,int R,int rt){ |
53 | if (L==R && L==p){ |
54 | return tree[rt]; |
55 | } |
56 | push_down(rt,R-L+1); |
57 | ll ans=0; |
58 | int mid=(L+R)>>1; |
59 | if (mid>=p) ans=query(p,Lson); |
60 | else ans=query(p,Rson); |
61 | push_up(rt); |
62 | return ans; |
63 | } |
64 | |
65 | int main(){ |
66 | int n,q,op,l,r; |
67 | ll v; |
68 | scanf("%d%d",&n,&q); |
69 | build(1,n,1); |
70 | while (q--){ |
71 | scanf("%d",&op); |
72 | if (op==1){ |
73 | scanf("%d%d%lld",&l,&r,&v); |
74 | update(l,r,v,1,n,1); |
75 | } |
76 | else if (op==2){ |
77 | scanf("%lld",&v); |
78 | v=query(v,1,n,1); |
79 | printf("%lld\n",v); |
80 | } |
81 | } |
82 | return 0; |
83 | } |
157 大和小
Language: C++
Time: 220ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 |
|
5 |
|
6 |
|
7 |
|
8 | const int MAXN=100010; |
9 | |
10 | ll t_max[MAXN*4]; |
11 | ll t_min[MAXN*4]; |
12 | ll tree[MAXN*4]; |
13 | |
14 | void push_up(int rt){ |
15 | tree[rt]=tree[lson]+tree[rson]; |
16 | t_max[rt]=max(t_max[lson],t_max[rson]); |
17 | t_min[rt]=min(t_min[lson],t_min[rson]); |
18 | } |
19 | |
20 | void build(int L,int R,int rt){ |
21 | if (L==R){ |
22 | scanf("%lld",&tree[rt]); |
23 | t_max[rt]=tree[rt]; |
24 | t_min[rt]=tree[rt]; |
25 | return; |
26 | } |
27 | int mid=(L+R)>>1; |
28 | build(Lson); |
29 | build(Rson); |
30 | push_up(rt); |
31 | } |
32 | |
33 | void update(int p,ll val,int L,int R,int rt){ |
34 | if (L==R && L==p){ |
35 | tree[rt]+=val; |
36 | t_max[rt]+=val; |
37 | t_min[rt]+=val; |
38 | return; |
39 | } |
40 | int mid=(L+R)>>1; |
41 | if (mid>=p) update(p,val,Lson); |
42 | if (mid<p) update(p,val,Rson); |
43 | push_up(rt); |
44 | } |
45 | |
46 | ll query_sum(int l,int r,int L,int R,int rt){ |
47 | if (L>=l && R<=r){ |
48 | return tree[rt]; |
49 | } |
50 | ll ans=0; |
51 | int mid=(L+R)>>1; |
52 | if (mid>=l) ans+=query_sum(l,r,Lson); |
53 | if (mid<r) ans+=query_sum(l,r,Rson); |
54 | push_up(rt); |
55 | return ans; |
56 | } |
57 | |
58 | ll query_max(int l,int r,int L,int R,int rt){ |
59 | if (L>=l && R<=r){ |
60 | return t_max[rt]; |
61 | } |
62 | ll ans=-1000000000000; |
63 | int mid=(L+R)>>1; |
64 | if (mid>=l) ans=max(ans,query_max(l,r,Lson)); |
65 | if (mid<r) ans=max(ans,query_max(l,r,Rson)); |
66 | push_up(rt); |
67 | return ans; |
68 | } |
69 | |
70 | ll query_min(int l,int r,int L,int R,int rt){ |
71 | if (L>=l && R<=r){ |
72 | return t_min[rt]; |
73 | } |
74 | ll ans=1000000000000; |
75 | int mid=(L+R)>>1; |
76 | if (mid>=l) ans=min(ans,query_min(l,r,Lson)); |
77 | if (mid<r) ans=min(ans,query_min(l,r,Rson)); |
78 | push_up(rt); |
79 | return ans; |
80 | } |
81 | int main(){ |
82 | int n,q,op,l,r; |
83 | ll v; |
84 | scanf("%d%d",&n,&q); |
85 | build(1,n,1); |
86 | while (q--){ |
87 | scanf("%d",&op); |
88 | if (op==1){ |
89 | scanf("%d%lld",&l,&v); |
90 | update(l,v,1,n,1); |
91 | } |
92 | else if (op==2){ |
93 | scanf("%d%d",&l,&r); |
94 | v=query_max(l,r,1,n,1); |
95 | printf("%lld ",v); |
96 | v=query_sum(l,r,1,n,1); |
97 | printf("%lld ",v); |
98 | v=query_min(l,r,1,n,1); |
99 | printf("%lld\n",v); |
100 | } |
101 | } |
102 | return 0; |
103 | } |
158 变着大法地求个和
Language: C++
Time: 160ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 |
|
5 |
|
6 |
|
7 |
|
8 | const int MAXN=100010; |
9 | |
10 | ll tree[MAXN*4]; |
11 | ll lazy[MAXN*4]; |
12 | |
13 | void push_up(int rt){ |
14 | tree[rt]=tree[lson]+tree[rson]; |
15 | } |
16 | |
17 | void push_down(int rt,int len){ |
18 | if (lazy[rt]){ |
19 | lazy[lson]+=lazy[rt]; |
20 | lazy[rson]+=lazy[rt]; |
21 | tree[lson]+=lazy[rt]*(len-(len>>1)); |
22 | tree[rson]+=lazy[rt]*(len>>1); |
23 | lazy[rt]=0; |
24 | } |
25 | } |
26 | |
27 | void build(int L,int R,int rt){ |
28 | lazy[rt]=0; |
29 | if (L==R){ |
30 | scanf("%lld",&tree[rt]); |
31 | return; |
32 | } |
33 | int mid=(L+R)>>1; |
34 | build(Lson); |
35 | build(Rson); |
36 | push_up(rt); |
37 | } |
38 | |
39 | void update(int l,int r,ll val,int L,int R,int rt){ |
40 | if (L>=l && R<=r){ |
41 | tree[rt]+=val*(R-L+1); |
42 | lazy[rt]+=val; |
43 | return; |
44 | } |
45 | push_down(rt,R-L+1); |
46 | int mid=(L+R)>>1; |
47 | if (mid>=l) update(l,r,val,Lson); |
48 | if (mid<r) update(l,r,val,Rson); |
49 | push_up(rt); |
50 | } |
51 | |
52 | ll query(int l,int r,int L,int R,int rt){ |
53 | if (L>=l && R<=r){ |
54 | return tree[rt]; |
55 | } |
56 | push_down(rt,R-L+1); |
57 | ll ans=0; |
58 | int mid=(L+R)>>1; |
59 | if (mid>=l) ans+=query(l,r,Lson); |
60 | if (mid<r) ans+=query(l,r,Rson); |
61 | push_up(rt); |
62 | return ans; |
63 | } |
64 | |
65 | int main(){ |
66 | int n,q,op,l,r; |
67 | ll v; |
68 | scanf("%d%d",&n,&q); |
69 | build(1,n,1); |
70 | while (q--){ |
71 | scanf("%d",&op); |
72 | if (op==1){ |
73 | scanf("%d%d%lld",&l,&r,&v); |
74 | update(l,r,v,1,n,1); |
75 | } |
76 | else if (op==2){ |
77 | scanf("%d%d",&l,&r); |
78 | v=query(l,r,1,n,1); |
79 | printf("%lld\n",v); |
80 | } |
81 | } |
82 | return 0; |
83 | } |
159 线性变换地求个和
Language: C++
Time: 180ms
1 |
|
2 | using namespace std; |
3 | |
4 |
|
5 |
|
6 |
|
7 |
|
8 | |
9 | struct node{ |
10 | //变x*a+y , 不是x*(a+y) |
11 | int x,y; |
12 | }; |
13 | const int maxn=1e5+10; |
14 | |
15 | //可改struct node |
16 | long long sum[maxn*4]; |
17 | node lazy[maxn*4]; |
18 | |
19 | //更新完子节点pushup 后序递归 |
20 | //维护的内容必须满足a[x,y]=a[x,i]某种操作a[i+1,y] |
21 | void pushup(int rt) { |
22 | sum[rt]=sum[lson]+sum[rson]; |
23 | } |
24 | |
25 | //查改lson,rson点前pushdown rt 先序递归 |
26 | //查改rt是不需要pushdown的 |
27 | //所以叶子节点也有lazy更新但不可能用上 |
28 | //仔细想想lazy是否有可叠加性 |
29 | //lson长len-(len>>1),rson长len>>1 |
30 | void pushdown(int rt,int len) { |
31 | if(lazy[rt].x!=1 || lazy[rt].y!=0) { |
32 | // cout<<"LAZY"<<endl; |
33 | lazy[lson].x=lazy[lson].x*lazy[rt].x; |
34 | lazy[lson].y=lazy[lson].y*lazy[rt].x+lazy[rt].y; |
35 | lazy[rson].x=lazy[rson].x*lazy[rt].x; |
36 | lazy[rson].y=lazy[rson].y*lazy[rt].x+lazy[rt].y; |
37 | sum[lson]=sum[lson]*lazy[rt].x+lazy[rt].y*(len-(len>>1)); |
38 | sum[rson]=sum[rson]*lazy[rt].x+lazy[rt].y*(len>>1); |
39 | lazy[rt].x=1;lazy[rt].y=0; |
40 | } |
41 | } |
42 | |
43 | //init |
44 | void build(int L,int R,int rt) { |
45 | lazy[rt].x=1; |
46 | lazy[rt].y=0; |
47 | if(L==R) { |
48 | scanf("%lld",&sum[rt]); |
49 | return ; |
50 | } |
51 | int mid=(L+R)>>1; |
52 | build(Lson); |
53 | build(Rson); |
54 | pushup(rt); |
55 | } |
56 | |
57 | //板子是对的,错了是别的问题 |
58 | void update(int l,int r,int val1,int val2,int L,int R,int rt) { |
59 | // cout<<L<<' '<<R<<endl; |
60 | if(l<=L&&r>=R) { |
61 | sum[rt]=sum[rt]*val1+(R-L+1)*val2; |
62 | lazy[rt].x=lazy[rt].x*val1; |
63 | lazy[rt].y=lazy[rt].y*val1+val2; |
64 | return; |
65 | } |
66 | pushdown(rt,R-L+1); |
67 | int mid=(L+R)>>1; |
68 | if(l<=mid) |
69 | update(l,r,val1,val2,Lson); |
70 | if(r>mid) |
71 | update(l,r,val1,val2,Rson); |
72 | pushup(rt); |
73 | } |
74 | |
75 | //板子是对的,错了是别的问题 |
76 | long long query(int l,int r,int L,int R,int rt) { |
77 | if(l<=L&&r>=R) { |
78 | return sum[rt]; |
79 | } |
80 | pushdown(rt,R-L+1); |
81 | int mid=(L+R)>>1; |
82 | long long res=0; |
83 | if(l<=mid) |
84 | res+=query(l,r,Lson); |
85 | if(r>mid) |
86 | res+=query(l,r,Rson); |
87 | return res; |
88 | } |
89 | |
90 | int N,Q,op; |
91 | |
92 | int main() { |
93 | while(~scanf("%d%d",&N,&Q)) { |
94 | build(1,N,1); |
95 | while(Q--) { |
96 | scanf("%d",&op); |
97 | if(op==1) { |
98 | int l,r; |
99 | int x1,x2; |
100 | scanf("%d%d%d%d",&l,&r,&x1,&x2); |
101 | update(l,r,x1,x2,1,N,1); |
102 | } |
103 | else { |
104 | int l,r; |
105 | scanf("%d%d",&l,&r); |
106 | printf("%lld\n",query(l,r,1,N,1)); |
107 | } |
108 | } |
109 | } |
110 | return 0; |
111 | } |
164 Multiplification
Language: C++
Time: 292ms
1 |
|
2 | using namespace std; |
3 | |
4 | // base and base_digits must be consistent |
5 | constexpr int base = 1000000000; |
6 | constexpr int base_digits = 9; |
7 | |
8 | struct bigint |
9 | { |
10 | // value == 0 is represented by empty z |
11 | vector<int> z; // digits |
12 | |
13 | // sign == 1 <==> value >= 0 |
14 | // sign == -1 <==> value < 0 |
15 | int sign; |
16 | |
17 | bigint() : sign(1) {} |
18 | |
19 | bigint(long long v) { *this = v; } |
20 | |
21 | bigint& operator=(long long v) |
22 | { |
23 | sign = v < 0 ? -1 : 1; |
24 | v *= sign; |
25 | z.clear(); |
26 | for (; v > 0; v = v / base) |
27 | z.push_back((int)(v % base)); |
28 | return *this; |
29 | } |
30 | |
31 | bigint(const string& s) { read(s); } |
32 | |
33 | bigint& operator+=(const bigint& other) |
34 | { |
35 | if (sign == other.sign) |
36 | { |
37 | for (int i = 0, carry = 0; i < other.z.size() || carry; ++i) |
38 | { |
39 | if (i == z.size()) |
40 | z.push_back(0); |
41 | z[i] += carry + (i < other.z.size() ? other.z[i] : 0); |
42 | carry = z[i] >= base; |
43 | if (carry) |
44 | z[i] -= base; |
45 | } |
46 | } |
47 | else if (other != 0 /* prevent infinite loop */) |
48 | { |
49 | *this -= -other; |
50 | } |
51 | return *this; |
52 | } |
53 | |
54 | friend bigint operator+(bigint a, const bigint& b) |
55 | { |
56 | return a += b; |
57 | } |
58 | |
59 | bigint& operator-=(const bigint& other) |
60 | { |
61 | if (sign == other.sign) |
62 | { |
63 | if (sign == 1 && *this >= other || sign == -1 && *this <= other) |
64 | { |
65 | for (int i = 0, carry = 0; i < other.z.size() || carry; ++i) |
66 | { |
67 | z[i] -= carry + (i < other.z.size() ? other.z[i] : 0); |
68 | carry = z[i] < 0; |
69 | if (carry) |
70 | z[i] += base; |
71 | } |
72 | trim(); |
73 | } |
74 | else |
75 | { |
76 | *this = other - *this; |
77 | this->sign = -this->sign; |
78 | } |
79 | } |
80 | else |
81 | { |
82 | *this += -other; |
83 | } |
84 | return *this; |
85 | } |
86 | |
87 | friend bigint operator-(bigint a, const bigint& b) |
88 | { |
89 | return a -= b; |
90 | } |
91 | |
92 | bigint& operator*=(int v) |
93 | { |
94 | if (v < 0) |
95 | sign = -sign, v = -v; |
96 | for (int i = 0, carry = 0; i < z.size() || carry; ++i) |
97 | { |
98 | if (i == z.size()) |
99 | z.push_back(0); |
100 | long long cur = (long long)z[i] * v + carry; |
101 | carry = (int)(cur / base); |
102 | z[i] = (int)(cur % base); |
103 | } |
104 | trim(); |
105 | return *this; |
106 | } |
107 | |
108 | bigint operator*(int v) const |
109 | { |
110 | return bigint(*this) *= v; |
111 | } |
112 | |
113 | friend pair<bigint, bigint> divmod(const bigint& a1, const bigint& b1) |
114 | { |
115 | int norm = base / (b1.z.back() + 1); |
116 | bigint a = a1.abs() * norm; |
117 | bigint b = b1.abs() * norm; |
118 | bigint q, r; |
119 | q.z.resize(a.z.size()); |
120 | |
121 | for (int i = (int)a.z.size() - 1; i >= 0; i--) |
122 | { |
123 | r *= base; |
124 | r += a.z[i]; |
125 | int s1 = b.z.size() < r.z.size() ? r.z[b.z.size()] : 0; |
126 | int s2 = b.z.size() - 1 < r.z.size() ? r.z[b.z.size() - 1] : 0; |
127 | int d = (int)(((long long)s1 * base + s2) / b.z.back()); |
128 | r -= b * d; |
129 | while (r < 0) |
130 | r += b, --d; |
131 | q.z[i] = d; |
132 | } |
133 | |
134 | q.sign = a1.sign * b1.sign; |
135 | r.sign = a1.sign; |
136 | q.trim(); |
137 | r.trim(); |
138 | return {q, r / norm}; |
139 | } |
140 | |
141 | friend bigint sqrt(const bigint& a1) |
142 | { |
143 | bigint a = a1; |
144 | while (a.z.empty() || a.z.size() % 2 == 1) |
145 | a.z.push_back(0); |
146 | |
147 | int n = a.z.size(); |
148 | |
149 | int firstDigit = (int)::sqrt((double)a.z[n - 1] * base + a.z[n - 2]); |
150 | int norm = base / (firstDigit + 1); |
151 | a *= norm; |
152 | a *= norm; |
153 | while (a.z.empty() || a.z.size() % 2 == 1) |
154 | a.z.push_back(0); |
155 | |
156 | bigint r = (long long)a.z[n - 1] * base + a.z[n - 2]; |
157 | firstDigit = (int)::sqrt((double)a.z[n - 1] * base + a.z[n - 2]); |
158 | int q = firstDigit; |
159 | bigint res; |
160 | |
161 | for (int j = n / 2 - 1; j >= 0; j--) |
162 | { |
163 | for (;; --q) |
164 | { |
165 | bigint r1 = (r - (res * 2 * base + q) * q) * base * base + (j > 0 ? (long long)a.z[2 * j - 1] * base + a.z[2 * j - 2] : 0); |
166 | if (r1 >= 0) |
167 | { |
168 | r = r1; |
169 | break; |
170 | } |
171 | } |
172 | res *= base; |
173 | res += q; |
174 | |
175 | if (j > 0) |
176 | { |
177 | int d1 = res.z.size() + 2 < r.z.size() ? r.z[res.z.size() + 2] : 0; |
178 | int d2 = res.z.size() + 1 < r.z.size() ? r.z[res.z.size() + 1] : 0; |
179 | int d3 = res.z.size() < r.z.size() ? r.z[res.z.size()] : 0; |
180 | q = (int)(((long long)d1 * base * base + (long long)d2 * base + d3) / (firstDigit * 2)); |
181 | } |
182 | } |
183 | |
184 | res.trim(); |
185 | return res / norm; |
186 | } |
187 | |
188 | bigint operator/(const bigint& v) const |
189 | { |
190 | return divmod(*this, v).first; |
191 | } |
192 | |
193 | bigint operator%(const bigint& v) const |
194 | { |
195 | return divmod(*this, v).second; |
196 | } |
197 | |
198 | bigint& operator/=(int v) |
199 | { |
200 | if (v < 0) |
201 | sign = -sign, v = -v; |
202 | for (int i = (int)z.size() - 1, rem = 0; i >= 0; --i) |
203 | { |
204 | long long cur = z[i] + rem * (long long)base; |
205 | z[i] = (int)(cur / v); |
206 | rem = (int)(cur % v); |
207 | } |
208 | trim(); |
209 | return *this; |
210 | } |
211 | |
212 | bigint operator/(int v) const |
213 | { |
214 | return bigint(*this) /= v; |
215 | } |
216 | |
217 | int operator%(int v) const |
218 | { |
219 | if (v < 0) |
220 | v = -v; |
221 | int m = 0; |
222 | for (int i = (int)z.size() - 1; i >= 0; --i) |
223 | m = (int)((z[i] + m * (long long)base) % v); |
224 | return m * sign; |
225 | } |
226 | |
227 | bigint& operator*=(const bigint& v) |
228 | { |
229 | *this = *this * v; |
230 | return *this; |
231 | } |
232 | |
233 | bigint& operator/=(const bigint& v) |
234 | { |
235 | *this = *this / v; |
236 | return *this; |
237 | } |
238 | |
239 | bool operator<(const bigint& v) const |
240 | { |
241 | if (sign != v.sign) |
242 | return sign < v.sign; |
243 | if (z.size() != v.z.size()) |
244 | return z.size() * sign < v.z.size() * v.sign; |
245 | for (int i = (int)z.size() - 1; i >= 0; i--) |
246 | if (z[i] != v.z[i]) |
247 | return z[i] * sign < v.z[i] * sign; |
248 | return false; |
249 | } |
250 | |
251 | bool operator>(const bigint& v) const |
252 | { |
253 | return v < *this; |
254 | } |
255 | |
256 | bool operator<=(const bigint& v) const |
257 | { |
258 | return !(v < *this); |
259 | } |
260 | |
261 | bool operator>=(const bigint& v) const |
262 | { |
263 | return !(*this < v); |
264 | } |
265 | |
266 | bool operator==(const bigint& v) const |
267 | { |
268 | return !(*this < v) && !(v < *this); |
269 | } |
270 | |
271 | bool operator!=(const bigint& v) const |
272 | { |
273 | return *this < v || v < *this; |
274 | } |
275 | |
276 | void trim() |
277 | { |
278 | while (!z.empty() && z.back() == 0) |
279 | z.pop_back(); |
280 | if (z.empty()) |
281 | sign = 1; |
282 | } |
283 | |
284 | bool isZero() const |
285 | { |
286 | return z.empty(); |
287 | } |
288 | |
289 | friend bigint operator-(bigint v) |
290 | { |
291 | if (!v.z.empty()) |
292 | v.sign = -v.sign; |
293 | return v; |
294 | } |
295 | |
296 | bigint abs() const |
297 | { |
298 | return sign == 1 ? *this : -*this; |
299 | } |
300 | |
301 | long long longValue() const |
302 | { |
303 | long long res = 0; |
304 | for (int i = (int)z.size() - 1; i >= 0; i--) |
305 | res = res * base + z[i]; |
306 | return res * sign; |
307 | } |
308 | |
309 | friend bigint gcd(const bigint& a, const bigint& b) |
310 | { |
311 | return b.isZero() ? a : gcd(b, a % b); |
312 | } |
313 | |
314 | friend bigint lcm(const bigint& a, const bigint& b) |
315 | { |
316 | return a / gcd(a, b) * b; |
317 | } |
318 | |
319 | void read(const string& s) |
320 | { |
321 | sign = 1; |
322 | z.clear(); |
323 | int pos = 0; |
324 | while (pos < s.size() && (s[pos] == '-' || s[pos] == '+')) |
325 | { |
326 | if (s[pos] == '-') |
327 | sign = -sign; |
328 | ++pos; |
329 | } |
330 | for (int i = (int)s.size() - 1; i >= pos; i -= base_digits) |
331 | { |
332 | int x = 0; |
333 | for (int j = max(pos, i - base_digits + 1); j <= i; j++) |
334 | x = x * 10 + s[j] - '0'; |
335 | z.push_back(x); |
336 | } |
337 | trim(); |
338 | } |
339 | |
340 | friend istream& operator>>(istream& stream, bigint& v) |
341 | { |
342 | string s; |
343 | stream >> s; |
344 | v.read(s); |
345 | return stream; |
346 | } |
347 | |
348 | friend ostream& operator<<(ostream& stream, const bigint& v) |
349 | { |
350 | if (v.sign == -1) |
351 | stream << '-'; |
352 | stream << (v.z.empty() ? 0 : v.z.back()); |
353 | for (int i = (int)v.z.size() - 2; i >= 0; --i) |
354 | stream << setw(base_digits) << setfill('0') << v.z[i]; |
355 | return stream; |
356 | } |
357 | |
358 | static vector<int> convert_base(const vector<int>& a, int old_digits, int new_digits) |
359 | { |
360 | vector<long long> p(max(old_digits, new_digits) + 1); |
361 | p[0] = 1; |
362 | for (int i = 1; i < p.size(); i++) |
363 | p[i] = p[i - 1] * 10; |
364 | vector<int> res; |
365 | long long cur = 0; |
366 | int cur_digits = 0; |
367 | for (int v : a) |
368 | { |
369 | cur += v * p[cur_digits]; |
370 | cur_digits += old_digits; |
371 | while (cur_digits >= new_digits) |
372 | { |
373 | res.push_back(int(cur % p[new_digits])); |
374 | cur /= p[new_digits]; |
375 | cur_digits -= new_digits; |
376 | } |
377 | } |
378 | res.push_back((int)cur); |
379 | while (!res.empty() && res.back() == 0) |
380 | res.pop_back(); |
381 | return res; |
382 | } |
383 | |
384 | typedef vector<long long> vll; |
385 | |
386 | static vll karatsubaMultiply(const vll& a, const vll& b) |
387 | { |
388 | int n = a.size(); |
389 | vll res(n + n); |
390 | if (n <= 32) |
391 | { |
392 | for (int i = 0; i < n; i++) |
393 | for (int j = 0; j < n; j++) |
394 | res[i + j] += a[i] * b[j]; |
395 | return res; |
396 | } |
397 | |
398 | int k = n >> 1; |
399 | vll a1(a.begin(), a.begin() + k); |
400 | vll a2(a.begin() + k, a.end()); |
401 | vll b1(b.begin(), b.begin() + k); |
402 | vll b2(b.begin() + k, b.end()); |
403 | |
404 | vll a1b1 = karatsubaMultiply(a1, b1); |
405 | vll a2b2 = karatsubaMultiply(a2, b2); |
406 | |
407 | for (int i = 0; i < k; i++) |
408 | a2[i] += a1[i]; |
409 | for (int i = 0; i < k; i++) |
410 | b2[i] += b1[i]; |
411 | |
412 | vll r = karatsubaMultiply(a2, b2); |
413 | for (int i = 0; i < a1b1.size(); i++) |
414 | r[i] -= a1b1[i]; |
415 | for (int i = 0; i < a2b2.size(); i++) |
416 | r[i] -= a2b2[i]; |
417 | |
418 | for (int i = 0; i < r.size(); i++) |
419 | res[i + k] += r[i]; |
420 | for (int i = 0; i < a1b1.size(); i++) |
421 | res[i] += a1b1[i]; |
422 | for (int i = 0; i < a2b2.size(); i++) |
423 | res[i + n] += a2b2[i]; |
424 | return res; |
425 | } |
426 | |
427 | bigint operator*(const bigint& v) const |
428 | { |
429 | vector<int> a6 = convert_base(this->z, base_digits, 6); |
430 | vector<int> b6 = convert_base(v.z, base_digits, 6); |
431 | vll a(a6.begin(), a6.end()); |
432 | vll b(b6.begin(), b6.end()); |
433 | while (a.size() < b.size()) |
434 | a.push_back(0); |
435 | while (b.size() < a.size()) |
436 | b.push_back(0); |
437 | while (a.size() & (a.size() - 1)) |
438 | a.push_back(0), b.push_back(0); |
439 | vll c = karatsubaMultiply(a, b); |
440 | bigint res; |
441 | res.sign = sign * v.sign; |
442 | for (int i = 0, carry = 0; i < c.size(); i++) |
443 | { |
444 | long long cur = c[i] + carry; |
445 | res.z.push_back((int)(cur % 1000000)); |
446 | carry = (int)(cur / 1000000); |
447 | } |
448 | res.z = convert_base(res.z, 6, base_digits); |
449 | res.trim(); |
450 | return res; |
451 | } |
452 | }; |
453 | |
454 | int main() |
455 | { |
456 | bigint a, b; |
457 | int T; |
458 | cin>>T; |
459 | while (T--) |
460 | { |
461 | cin>>a>>b; |
462 | cout<<a*b<<endl; |
463 | } |
464 | } |
171 小6的灾难
Language: C++
Time: 120ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int p,x1,y1,x2,y2,t; |
6 | }; |
7 | |
8 | int m,n,endp; |
9 | int d[4][2]={-1,0,1,0,0,1,0,-1}; |
10 | char maze[10][10]; |
11 | bool vis[65536][5][5][5][5]; |
12 | queue <node> que; |
13 | |
14 | bool can_move(int x,int y){ |
15 | if (x<1 || x>m) return false; |
16 | if (y<1 || y>n) return false; |
17 | if (maze[x][y]=='X') return false; |
18 | return true; |
19 | } |
20 | |
21 | int update(int p,int x1,int y1,int x2,int y2){ |
22 | int temp=1<<((x1-1)*n+y1-1); |
23 | p=p|temp; |
24 | temp=1<<((x2-1)*n+y2-1); |
25 | p=p|temp; |
26 | return p; |
27 | } |
28 | |
29 | void get_end(){ |
30 | endp=0; |
31 | int temp; |
32 | for (int i=1;i<=m;++i){ |
33 | for (int j=1;j<=n;++j){ |
34 | if (maze[i][j]!='X'){ |
35 | temp=1<<((i-1)*n+j-1); |
36 | endp=endp|temp; |
37 | } |
38 | } |
39 | } |
40 | } |
41 | |
42 | void bfs(){ |
43 | struct node cur; |
44 | int nxtx1,nxty1,nxtx2,nxty2,nxtp; |
45 | while (!que.empty()){ |
46 | cur=que.front();que.pop(); |
47 | if (cur.p==endp){ |
48 | printf("%d\n",cur.t); |
49 | return; |
50 | } |
51 | // cout<<cur.p<<' '<<cur.x1<<' '<<cur.y1<<' '<<cur.x2<<' '<<cur.y2<<' '<<cur.t<<endl; |
52 | // system("pause"); |
53 | for (int i=0;i<4;++i){ |
54 | nxtx1=cur.x1+d[i][0]; |
55 | nxty1=cur.y1+d[i][1]; |
56 | if (!can_move(nxtx1,nxty1)) continue; |
57 | for (int j=0;j<4;++j){ |
58 | nxtx2=cur.x2+d[j][0]; |
59 | nxty2=cur.y2+d[j][1]; |
60 | if (!can_move(nxtx2,nxty2)) continue; |
61 | nxtp=update(cur.p,nxtx1,nxty1,nxtx2,nxty2); |
62 | if (!vis[nxtp][nxtx1][nxty1][nxtx2][nxty2]){ |
63 | vis[nxtp][nxtx1][nxty1][nxtx2][nxty2]=true; |
64 | que.push((node){update(cur.p,nxtx1,nxty1,nxtx2,nxty2),nxtx1,nxty1,nxtx2,nxty2,cur.t+1}); |
65 | } |
66 | } |
67 | } |
68 | } |
69 | printf("-1\n"); |
70 | } |
71 | |
72 | int main(){ |
73 | int T; |
74 | scanf("%d",&T); |
75 | for (int kase=1;kase<=T;++kase){ |
76 | scanf("%d%d",&m,&n); getchar(); |
77 | memset(vis,false,sizeof(vis)); |
78 | while (!que.empty()) que.pop(); |
79 | for (int i=1;i<=m;++i){ |
80 | for (int j=1;j<=n;++j){ |
81 | maze[i][j]=getchar(); |
82 | if (maze[i][j]=='S'){ |
83 | que.push((node){update(0,i,j,i,j),i,j,i,j,0}); |
84 | vis[(i-1)*n+j][i][j][i][j]=true; |
85 | } |
86 | } |
87 | getchar(); |
88 | } |
89 | get_end(); |
90 | // cout<<endp<<endl; |
91 | // printf("Case #%d: ",kase); |
92 | bfs(); |
93 | } |
94 | |
95 | return 0; |
96 | } |
97 | |
98 | |
99 | //int main(){ |
100 | // m=4;n=4; |
101 | // int x1,y1,p=0; |
102 | // while (cin>>x1>>y1){ |
103 | // p=update(p,x1,y1,x1,y1); |
104 | // cout<<p<<endl; |
105 | // } |
106 | //} |
174 yaoge的命令
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int a;cin>>a; |
6 | if (a==1) cout<<"Accepted"<<endl; |
7 | else if (a==2) cout<<"Wrong Answer"<<endl; |
8 | else if (a==3) cout<<"handsome yaoge"<<endl; |
9 | return 0; |
10 | } |
178 正方形环
Language: C++
Time: 12ms
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | using namespace std; |
7 | typedef long long ll; |
8 | |
9 | int gcd(int a,int b){ |
10 | if(b==0) return a; |
11 | return gcd(b,a%b); |
12 | } |
13 | |
14 | ll quick_pow(ll a, ll n){ |
15 | ll ans = 1; |
16 | while (n){ |
17 | if (n & 1) ans = ans*a; //若当前二进制位为1,则乘以a |
18 | a = a*a; //此处的a实际为a^(2^t) |
19 | n >>= 1; |
20 | } |
21 | return ans; |
22 | } |
23 | |
24 | |
25 | |
26 | ll polya(int m,int n) //m color ,n number |
27 | { |
28 | ll tot=0; |
29 | for(int i=1;i<=n;i++) |
30 | tot+=quick_pow(m,gcd(n,i)); |
31 | tot/=n; |
32 | if(n%2!=0) tot+=quick_pow(m,(n+1)/2); //odd |
33 | else tot+=(quick_pow(m,n/2)+quick_pow(m,n/2+1))/2; |
34 | return tot/2; |
35 | } |
36 | |
37 | int main(){ |
38 | int n; |
39 | while (cin>>n){ |
40 | cout<<polya(n,4)<<endl; |
41 | } |
42 | return 0; |
43 | } |
180 Bob and Jack’s Shortest Path Problem
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int T;scanf("%d",&T); |
5 | int x1,y1,x2,y2,w1,w2,w3,w4; |
6 | double ans1,ans2; |
7 | while (T--){ |
8 | scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&w1,&w2,&w3,&w4); |
9 | ans1=sqrt(1.0*(w4-y1)*(w4-y1)+1.0*(w3-x1)*(w3-x1))+sqrt(1.0*(w4-y2)*(w4-y2)+1.0*(w3-x2)*(w3-x2)); |
10 | ans2=sqrt(1.0*(w2-y1)*(w2-y1)+1.0*(w1-x1)*(w1-x1))+sqrt(1.0*(w2-y2)*(w2-y2)+1.0*(w1-x2)*(w1-x2)); |
11 | printf("%.3f\n",ans1>ans2?ans2:ans1); |
12 | } |
13 | return 0; |
14 | } |
185 Bob的二倍数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | map <int,int> mmp1,mmp2; |
5 | |
6 | int main(){ |
7 | int T,n,x,ans;scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%d",&n); |
10 | mmp1.clear();mmp2.clear(); |
11 | while (n--){ |
12 | scanf("%d",&x); |
13 | ++mmp1[x]; |
14 | ++mmp2[2*x]; |
15 | } |
16 | ans=0; |
17 | for (auto it=mmp2.begin();it!=mmp2.end();++it){ |
18 | if (mmp1[(it->first)]!=0) ++ans; |
19 | } |
20 | printf("%d\n",ans); |
21 | } |
22 | return 0; |
23 | } |
186 穿墙术
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,y,m,t; |
6 | }; |
7 | |
8 | char maze[22][22]; |
9 | int m,n,endx,endy; |
10 | int d[4][2]={-1,0,1,0,0,1,0,-1}; |
11 | queue <node> que; |
12 | bool vis[22][22][12]; |
13 | |
14 | bool is_in(int x,int y){ |
15 | if (x<1 || x>m) return false; |
16 | if (y<1 || y>n) return false; |
17 | return true; |
18 | } |
19 | |
20 | void bfs(){ |
21 | struct node cur; |
22 | int nx,ny; |
23 | while (!que.empty()){ |
24 | cur=que.front();que.pop(); |
25 | if (cur.x==endx && cur.y==endy){ |
26 | printf("%d\n",cur.t); |
27 | return; |
28 | } |
29 | for (int i=0;i<4;++i){ |
30 | nx=cur.x+d[i][0];ny=cur.y+d[i][1]; |
31 | if (is_in(nx,ny)){ |
32 | if (maze[nx][ny]=='x'){ |
33 | if (maze[cur.x][cur.y]!='x' && cur.m>0 && !vis[nx][ny][cur.m-1]){ |
34 | vis[nx][ny][cur.m-1]=true; |
35 | que.push((node){nx,ny,cur.m-1,cur.t+1}); |
36 | } |
37 | } |
38 | else{ |
39 | if (!vis[nx][ny][cur.m]){ |
40 | vis[nx][ny][cur.m]=true; |
41 | que.push((node){nx,ny,cur.m,cur.t+1}); |
42 | } |
43 | } |
44 | } |
45 | } |
46 | } |
47 | printf("-1\n"); |
48 | } |
49 | |
50 | int main(){ |
51 | int T,k;scanf("%d",&T); |
52 | while (T--){ |
53 | memset(vis,false,sizeof(vis)); |
54 | while (!que.empty()) que.pop(); |
55 | scanf("%d%d%d%~c",&m,&n,&k); |
56 | for (int i=1;i<=m;++i){ |
57 | for (int j=1;j<=n;++j){ |
58 | maze[i][j]=getchar(); |
59 | if (maze[i][j]=='S'){ |
60 | vis[i][j][k]=true; |
61 | que.push((node){i,j,k,0}); |
62 | } |
63 | else if (maze[i][j]=='T'){ |
64 | endx=i;endy=j; |
65 | } |
66 | } |
67 | getchar(); |
68 | } |
69 | bfs(); |
70 | } |
71 | return 0; |
72 | } |
191 BFS
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[105]; |
5 | |
6 | int main(){ |
7 | while(~scanf("%s",a)){ |
8 | int sta=0; |
9 | int len=strlen(a); |
10 | bool flag=true; |
11 | for (int i=0;i<len-2;++i){ |
12 | if ((a[i]=='B'||a[i]=='b')\ |
13 | &&(a[i+1]=='o'||a[i+1]=='O')\ |
14 | &&(a[i+2]=='b'||a[i+2]=='B')){ |
15 | flag=false; |
16 | printf("%d\n",i); |
17 | break; |
18 | } |
19 | } |
20 | if (flag){ |
21 | printf("%d\n",-1); |
22 | } |
23 | } |
24 | return 0; |
25 | } |
196 A + B + C Problem
Language: C++
Time: 20ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long a[1010]; |
5 | |
6 | int main(){ |
7 | int n,l,r,mid; |
8 | long long s,tmp; |
9 | bool flag; |
10 | while (~scanf("%d%lld",&n,&s)){ |
11 | for (int i=0;i<n;++i){ |
12 | scanf("%lld",&a[i]); |
13 | } |
14 | flag=true; |
15 | sort(a,a+n); |
16 | for (int i=0;i<n && flag && a[i]<=s/3+4;++i){ |
17 | for (int j=i+1;j<n;++j){ |
18 | tmp=s-a[i]-a[j]; |
19 | if (tmp<=a[j]) break; |
20 | if (a[lower_bound(a,a+n,tmp)-a]==tmp){ |
21 | flag=false; |
22 | printf("YES\n"); |
23 | break; |
24 | } |
25 | } |
26 | } |
27 | if (flag) printf("NO\n"); |
28 | } |
29 | } |
200 组合数level0
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | const ll mod=1000000007; |
6 | ll Fac[1010]; |
7 | |
8 | ll inv (ll a){ |
9 | if (a==1) return 1; |
10 | return inv(mod%a)*(mod-mod/a)%mod; |
11 | } |
12 | |
13 | void init(int n){ |
14 | Fac[0]=1; |
15 | for(int i = 1; i <= n; i++){ |
16 | Fac[i] = Fac[i-1] * i % mod; |
17 | } |
18 | } |
19 | |
20 | |
21 | |
22 | int main(){ |
23 | init(1010); |
24 | int T,m,n; |
25 | ll ans; |
26 | scanf("%d",&T); |
27 | while (T--){ |
28 | scanf("%d%d",&n,&m); |
29 | ans=((Fac[n]%mod*(inv(Fac[m])%mod))%mod*(inv(Fac[n-m])%mod))%mod; |
30 | printf("%lld\n",ans); |
31 | } |
32 | return 0; |
33 | } |
201 组合数level1
Language: C++
Time: 192ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | const ll mod=1000000007; |
6 | ll Fac[1010]; |
7 | |
8 | ll inv (ll a){ |
9 | if (a==1) return 1; |
10 | return inv(mod%a)*(mod-mod/a)%mod; |
11 | } |
12 | |
13 | void init(int n){ |
14 | Fac[0]=1; |
15 | for(int i = 1; i <= n; i++){ |
16 | Fac[i] = Fac[i-1] * i % mod; |
17 | } |
18 | } |
19 | |
20 | |
21 | |
22 | int main(){ |
23 | init(1010); |
24 | int T,m,n; |
25 | ll ans; |
26 | scanf("%d",&T); |
27 | while (T--){ |
28 | scanf("%d%d",&n,&m); |
29 | ans=((Fac[n]%mod*(inv(Fac[m])%mod))%mod*(inv(Fac[n-m])%mod))%mod; |
30 | printf("%lld\n",ans); |
31 | } |
32 | return 0; |
33 | } |
202 组合数level2
Language: C++
Time: 12ms
1 |
|
2 |
|
3 | using namespace std; |
4 | typedef long long ll; |
5 | |
6 | const int N = 1e5 + 5; |
7 | |
8 | bool notprime[N]; |
9 | int prime[N]; |
10 | int tot = 0; |
11 | |
12 | void getPrime(){ |
13 | for (int i = 2; i < N; i++){ |
14 | if (!notprime[i]) |
15 | prime[++tot] = i; |
16 | for (int j = 1; j <= tot && prime[j] * i < N; j++){ |
17 | notprime[prime[j] * i] = true; |
18 | if (i % prime[j] == 0) |
19 | break; |
20 | } |
21 | } |
22 | } |
23 | |
24 | ll breakDown(ll x, int pr, ll p){ |
25 | ll ans = 0; |
26 | while (x / pr){ |
27 | ans += x / pr; |
28 | x /= pr; |
29 | } |
30 | return ans; |
31 | } |
32 | |
33 | |
34 | ll quick_pow(ll a, ll n, ll MOD){ |
35 | ll ans = 1; |
36 | while (n){ |
37 | if (n & 1) ans = ans*a%MOD; //若当前二进制位为1,则乘以a |
38 | a = a*a%MOD; //此处的a实际为a^(2^t) |
39 | n >>= 1; |
40 | } |
41 | return ans; |
42 | } |
43 | |
44 | |
45 | int main(){ |
46 | getPrime(); |
47 | int T; |
48 | scanf("%d", &T); |
49 | while (T--){ |
50 | ll n, m; |
51 | ll p; |
52 | scanf("%lld%lld%lld", &n, &m, &p); |
53 | ll ans = 1; |
54 | for (int i = 1; i <= tot && prime[i] <= n; i++){ |
55 | ll lcy = breakDown(n, prime[i], p); |
56 | ll x = breakDown(n - m, prime[i], p); |
57 | ll y = breakDown(m, prime[i], p); |
58 | ans = ans * quick_pow(prime[i], lcy - x - y, p) % p; |
59 | } |
60 | printf("%lld\n", ans); |
61 | } |
62 | return 0; |
63 | } |
203 组合数level3
Language: C++
Time: 216ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | ll mod=1000000007; |
6 | ll Fac[100020]; |
7 | |
8 | ll inv (ll a){ |
9 | if (a==1) return 1; |
10 | return inv(mod%a)*(mod-mod/a)%mod; |
11 | } |
12 | |
13 | void init(int n){ |
14 | Fac[0]=1; |
15 | for(int i = 1; i <= n; i++){ |
16 | Fac[i] = Fac[i-1] * i % mod; |
17 | } |
18 | } |
19 | |
20 | |
21 | int main(){ |
22 | int T,m,n; |
23 | ll ans; |
24 | scanf("%d",&T); |
25 | while (T--){ |
26 | scanf("%d%d%lld",&n,&m,&mod); |
27 | init(100010); |
28 | ans=((Fac[n]%mod*(inv(Fac[m])%mod))%mod*(inv(Fac[n-m])%mod))%mod; |
29 | printf("%lld\n",ans); |
30 | } |
31 | return 0; |
32 | } |
204 组合数level4
Language: C++
Time: 460ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long poww(long long a,long long b,long long p){ |
5 | long long ans=1,base=a; |
6 | while(b!=0){ |
7 | if(b&1!=0) |
8 | { |
9 | ans *= base; |
10 | ans %= p; |
11 | } |
12 | base *= base; |
13 | base %= p; |
14 | b>>=1; |
15 | } |
16 | return ans; |
17 | } |
18 | |
19 | |
20 | |
21 |
|
22 | int prime[1000005]; |
23 | bool isprime[1000005]; |
24 | |
25 | void get_prime(int listsize) |
26 | { |
27 | int primesize=1; |
28 | memset(isprime,1,sizeof(isprime)); |
29 | isprime[1] = false; |
30 | for(int i=2;i<=listsize;i++) |
31 | { |
32 | if(isprime[i]) prime[primesize++]=i; |
33 | for(int j=1;i*prime[j]<=listsize&&j<=primesize;j++) |
34 | { |
35 | isprime[i*prime[j]] = false; |
36 | if(i%prime[j]==0) break; |
37 | } |
38 | } |
39 | } |
40 | |
41 | struct p |
42 | { |
43 | int value; |
44 | int time; |
45 | }p[MAXIMUM]; |
46 | |
47 | void prime_factorization(long long n) |
48 | { |
49 | memset(p,0,sizeof(p)); |
50 | long long psize=0; |
51 | long long a = n; |
52 | for(int t = 1;prime[t]*prime[t]<=n;t++) |
53 | { |
54 | if(a%prime[t]==0) p[++psize].value = prime[t]; |
55 | while(a%prime[t]==0) |
56 | { |
57 | p[psize].time += 1; |
58 | a = a / prime[t]; |
59 | } |
60 | if(a<=90000) |
61 | if(isprime[a]) |
62 | { |
63 | p[++psize].value = a; |
64 | p[psize].time += 1; |
65 | a = 1; |
66 | break; |
67 | } |
68 | if(a==1) break; |
69 | } |
70 | if(a!=1) |
71 | { |
72 | p[++psize].value = a; |
73 | p[psize].time = 1; |
74 | } |
75 | } |
76 | |
77 | long long ans[100]; |
78 | long long mod[100]; |
79 | long long res[100]; |
80 | |
81 | |
82 | const int maxn=100005; |
83 | const int inf=0x7fffffff; |
84 | typedef long long ll; |
85 | void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y)//扩展欧几里得 |
86 | { |
87 | if(!b) {d=a;x=1;y=0;} |
88 | else{ |
89 | ex_gcd(b,a%b,d,y,x); |
90 | y-=x*(a/b); |
91 | } |
92 | } |
93 | ll ex_crt(ll *m,ll *r,int n) |
94 | { |
95 | ll M=m[1],R=r[1],x,y,d; |
96 | for(int i=2;i<=n;i++){ |
97 | ex_gcd(M,m[i],d,x,y); |
98 | if((r[i]-R)%d) return -1; |
99 | x=(r[i]-R)/d*x%(m[i]/d); |
100 | R+=x*M; |
101 | M=M/d*m[i]; |
102 | R%=M; |
103 | } |
104 | return R>=0?R:R+M; |
105 | } |
106 | |
107 | |
108 | |
109 | int main() |
110 | { |
111 | //freopen("1.in","r",stdin); |
112 | get_prime(1000000); |
113 | int t; |
114 | cin >> t; |
115 | while(t--) |
116 | { |
117 | for(int i=0;i<=99;i++) |
118 | { |
119 | ans[i] = 1; |
120 | mod[i] = 0; |
121 | res[i] = 0; |
122 | } |
123 | |
124 | int n,m,k; |
125 | cin >> n >> m >> k; |
126 | prime_factorization(k); |
127 | |
128 | int i=1; |
129 | while(p[i].value!=0) |
130 | { |
131 | long long w = poww(p[i].value,p[i].time,1000000009); |
132 | long long phi_w = poww(p[i].value,p[i].time-1,1000000009); |
133 | phi_w *= p[i].value - 1; |
134 | mod[i] = w; |
135 | int mm = m,nn = n; |
136 | while(mm>0) |
137 | { |
138 | if(nn%p[i].value==0) |
139 | { |
140 | int t = p[i].value; |
141 | while(nn%t==0) |
142 | { |
143 | res[i]++; |
144 | t*=p[i].value; |
145 | |
146 | } |
147 | t/=p[i].value; |
148 | ans[i] *= nn/t; |
149 | ans[i] %= mod[i]; |
150 | |
151 | } |
152 | else |
153 | { |
154 | ans[i] *= nn; |
155 | ans[i] %= mod[i]; |
156 | } |
157 | |
158 | if(mm%p[i].value==0) |
159 | { |
160 | int t = p[i].value; |
161 | while(mm%t==0) |
162 | { |
163 | res[i]--; |
164 | t*=p[i].value; |
165 | } |
166 | t/=p[i].value; |
167 | ans[i] *= poww(mm/t,phi_w-1,w); |
168 | ans[i] %= mod[i]; |
169 | } |
170 | else |
171 | { |
172 | ans[i] *= poww(mm,phi_w-1,w); |
173 | ans[i] %= mod[i]; |
174 | } |
175 | nn--; |
176 | mm--; |
177 | } |
178 | |
179 | if(res[i]>=p[i].time) ans[i] = 0; |
180 | else |
181 | { |
182 | ans[i] *= poww(p[i].value,res[i],1000000009); |
183 | ans[i] %= mod[i]; |
184 | } |
185 | i++; |
186 | } |
187 | //cout << ans[0] << endl; |
188 | cout << ex_crt(mod,ans,i-1) << endl; |
189 | } |
190 | } |
208 三角形
Language: C++
Time: 4ms
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | using namespace std; |
7 | typedef long long ll; |
8 | |
9 | const ll mod=1e9+7; |
10 | |
11 | ll inv (ll a){ |
12 | if (a==1) return 1; |
13 | return inv(mod%a)*(mod-mod/a)%mod; |
14 | } |
15 | |
16 | int gcd(int a,int b){ |
17 | if(b==0) return a; |
18 | return gcd(b,a%b); |
19 | } |
20 | |
21 | ll quick_pow(ll a, ll n){ |
22 | ll ans = 1; |
23 | while (n){ |
24 | if (n&1) ans=ans*a%mod; //若当前二进制位为1,则乘以a |
25 | a=a*a%mod; //此处的a实际为a^(2^t) |
26 | n>>=1; |
27 | } |
28 | return ans; |
29 | } |
30 | |
31 | |
32 | ll polya(int m,int n){ //color,node number |
33 | ll tot=0; |
34 | //rotate |
35 | for(int i=1;i<=n;i++) |
36 | tot=(tot+quick_pow(m,gcd(n,i)))%mod; |
37 | tot=(tot*inv(n))%mod; |
38 | if(n%2!=0) tot=(tot+quick_pow(m,(n+1)/2))%mod; //odd |
39 | else tot=tot+((quick_pow(m,n/2)+quick_pow(m,n/2+1))*inv(2))%mod; |
40 | return (tot*inv(2))%mod; |
41 | } |
42 | |
43 | int main(){ |
44 | int n; |
45 | while (cin>>n){ |
46 | cout<<polya(n,3)<<endl; |
47 | } |
48 | return 0; |
49 | } |
210 Xor on tree
Language: C++
Time: 536ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int to,val; |
6 | }; |
7 | |
8 | int tree[40010]; |
9 | vector<node> G[40010]; |
10 | int ans[40010]; |
11 | |
12 | void dfs(int p){ |
13 | for (auto &it: G[p]){ |
14 | if (ans[it.to]!=-1) continue; |
15 | ans[it.to]=ans[p]^it.val; |
16 | dfs(it.to); |
17 | } |
18 | } |
19 | |
20 | int main(){ |
21 | int T,n=40010,q,t1,t2,t3; |
22 | scanf("%d",&T); |
23 | for (int kase=1;kase<=T;++kase){ |
24 | printf("Case %d:\n",kase); |
25 | for (int i=0;i<=n;++i){ |
26 | G[i].clear(); |
27 | } |
28 | memset(ans,-1,sizeof(ans)); |
29 | scanf("%d%d",&n,&q); |
30 | for (int i=0;i<n-1;++i){ |
31 | scanf("%d%d%d",&t1,&t2,&t3); |
32 | G[t1].push_back((node){t2,t3}); |
33 | G[t2].push_back((node){t1,t3}); |
34 | } |
35 | ans[1]=0; |
36 | dfs(1); |
37 | while (q--){ |
38 | scanf("%d%d",&t1,&t2); |
39 | printf("%d\n",ans[t1]^ans[t2]); |
40 | } |
41 | } |
42 | return 0; |
43 | } |
216 23333333
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int ans[44721]; |
5 | |
6 | void init(){ |
7 | for (int i=0;i<44721;++i){ |
8 | ans[i]=(1+i)*i/2+1; |
9 | } |
10 | } |
11 | |
12 | int main(){ |
13 | init(); |
14 | int T,x; |
15 | scanf("%d",&T); |
16 | while (T--){ |
17 | scanf("%d",&x); |
18 | int l=0,r=44721; |
19 | while (r-l!=1){ |
20 | int mid=(l+r)>>1; |
21 | // cout<<l<<' '<<mid<<' '<<r<<endl; |
22 | // system("pause"); |
23 | if (x<ans[mid]) r=mid; |
24 | else l=mid; |
25 | } |
26 | if (ans[l]==x) printf("2\n"); |
27 | else printf("3\n"); |
28 | } |
29 | return 0; |
30 | } |
219 帽子戏法
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T,x,y; |
6 | scanf("%d",&T); |
7 | while (T--){ |
8 | scanf("%d%d",&x,&y); |
9 | if (y==0) printf("%d\n",x); |
10 | else printf("%d\n",((x+y)&1)?1:2); |
11 | } |
12 | return 0; |
13 | } |
221 Water and Fire Maze
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,y,s,t; |
6 | }; |
7 | |
8 | int m,n; |
9 | char maze[110][110]; |
10 | bool vis[110][110][2]; |
11 | int d[4][2]={1,0,-1,0,0,1,0,-1}; |
12 | queue <node> que; |
13 | |
14 | void bfs(){ |
15 | int nx,ny; |
16 | struct node c; |
17 | while (!que.empty()){ |
18 | c=que.front();que.pop(); |
19 | if (maze[c.x][c.y]=='T'){ |
20 | printf("%d\n",c.t); |
21 | return; |
22 | } |
23 | if (maze[c.x][c.y]=='@'){ |
24 | if (c.s==0 && !vis[c.x][c.y][1]){ |
25 | vis[c.x][c.y][1]=true; |
26 | que.push((node){c.x,c.y,1,c.t+1}); |
27 | } |
28 | else if (c.s==1 && !vis[c.x][c.y][0]){ |
29 | vis[c.x][c.y][0]=true; |
30 | que.push((node){c.x,c.y,0,c.t+1}); |
31 | } |
32 | } |
33 | for (int op=0;op<4;++op){ |
34 | nx=c.x+d[op][0];ny=c.y+d[op][1]; |
35 | if (nx<1 || nx>m) continue; |
36 | if (ny<1 || ny>n) continue; |
37 | if (vis[nx][ny][c.s]) continue; |
38 | if (maze[nx][ny]=='#') continue; |
39 | if (maze[nx][ny]=='w' && c.s!=1) continue; |
40 | if (maze[nx][ny]=='~' && c.s!=0) continue; |
41 | vis[nx][ny][c.s]=true; |
42 | que.push((node){nx,ny,c.s,c.t+1}); |
43 | } |
44 | } |
45 | printf("Sad Yaoge!\n"); |
46 | } |
47 | |
48 | int main(){ |
49 | int T;scanf("%d",&T); |
50 | while (T--){ |
51 | scanf("%d%d%~c",&m,&n); |
52 | while (!que.empty()) que.pop(); |
53 | memset(vis,false,sizeof(vis)); |
54 | for (int i=1;i<=m;++i){ |
55 | for (int j=1;j<=n;++j){ |
56 | maze[i][j]=getchar(); |
57 | if (maze[i][j]=='S'){ |
58 | vis[i][j][0]=true; |
59 | que.push((node){i,j,0,0}); |
60 | } |
61 | } |
62 | getchar(); |
63 | } |
64 | // for (int i=1;i<=m;++i){ |
65 | // for (int j=1;j<=n;++j){ |
66 | // putchar(maze[i][j]); |
67 | // } |
68 | // putchar('\n'); |
69 | // } |
70 | bfs(); |
71 | } |
72 | return 0; |
73 | } |
224 Fibonacci String
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | ll a[91]; |
6 | |
7 | void init(){ |
8 | a[0]=a[1]=a[2]=a[3]=a[4]=0; |
9 | a[5]=a[6]=1; |
10 | for (int i=7;i<=90;++i){ |
11 | a[i]=a[i-1]+a[i-2]; |
12 | if (i%2==1) ++a[i]; |
13 | } |
14 | } |
15 | |
16 | int main(){ |
17 | init(); |
18 | int T;scanf("%d",&T); |
19 | while (T--){ |
20 | int n; |
21 | scanf("%d",&n); |
22 | printf("%llu\n",a[n]); |
23 | } |
24 | return 0; |
25 | } |
229 超级进制转换
Language: Java
Time: 4596ms
1 | import java.util.*; |
2 | import java.math.*; |
3 | |
4 | public class Main { |
5 | public static void main(String[] args) { |
6 | Scanner s=new Scanner(System.in); |
7 | while (s.hasNextLine()) { |
8 | System.out.println(new BigInteger(s.nextLine(),10).toString(2)); |
9 | } |
10 | s.close(); |
11 | } |
12 | } |
230 Eat it up
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[1000][1000]; |
5 | |
6 | bool dfs(int x,int y){ |
7 | if (dp[x][y]!=-1) return dp[x][y]; |
8 | if (x==1&&y==1) return dp[x][y]=false; |
9 | for (int i=1;i<x;++i){ |
10 | if (!dfs(i,x-i)) return dp[x][y]=true; |
11 | } |
12 | for (int j=1;j<y;++j){ |
13 | if (!dfs(j,y-j)) return dp[x][y]=true; |
14 | } |
15 | return dp[x][y]=false; |
16 | } |
17 | |
18 | void db(){ |
19 | memset(dp,-1,sizeof(dp)); |
20 | for (int i=1;i<=100;++i){ |
21 | for (int j=1;j<=100;++j){ |
22 | dp[i][j]=dfs(i,j); |
23 | } |
24 | } |
25 | } |
26 | |
27 | int main(){ |
28 | // db(); |
29 | // for (int i=1;i<=20;++i){ |
30 | // for (int j=1;j<=20;++j){ |
31 | // printf("%2d",dp[i][j]); |
32 | // } |
33 | // putchar('\n'); |
34 | // } |
35 | int T,x,y; |
36 | scanf("%d",&T); |
37 | while (T--){ |
38 | scanf("%d%d",&x,&y); |
39 | if (x%2==1&&y%2==1){ |
40 | printf("xyiyy\n"); |
41 | } |
42 | else{ |
43 | printf("yaoge\n"); |
44 | } |
45 | } |
46 | return 0; |
47 | } |
232 鸡排销售查询系统
Language: C++
Time: 144ms
1 |
|
2 | using namespace std; |
3 | |
4 |
|
5 |
|
6 |
|
7 |
|
8 | |
9 | const int maxn=1e5+10; |
10 | |
11 | struct node{ |
12 | int x,y,z;//0 1 2 |
13 | }; |
14 | |
15 | node sum[maxn*4]; |
16 | int lazy[maxn*4]; |
17 | |
18 | void pushup(int rt) { |
19 | sum[rt].x=sum[lson].x+sum[rson].x; |
20 | sum[rt].y=sum[lson].y+sum[rson].y; |
21 | sum[rt].z=sum[lson].z+sum[rson].z; |
22 | } |
23 | |
24 | void pushdown(int rt) { |
25 | if(lazy[rt]%3) { |
26 | lazy[lson]+=lazy[rt]; |
27 | lazy[rson]+=lazy[rt]; |
28 | if (lazy[rt]%3==1){ |
29 | int tmp=sum[lson].x; |
30 | sum[lson].x=sum[lson].z; |
31 | sum[lson].z=sum[lson].y; |
32 | sum[lson].y=tmp; |
33 | tmp=sum[rson].x; |
34 | sum[rson].x=sum[rson].z; |
35 | sum[rson].z=sum[rson].y; |
36 | sum[rson].y=tmp; |
37 | } |
38 | else if (lazy[rt]%3==2){ |
39 | int tmp=sum[lson].x; |
40 | sum[lson].x=sum[lson].y; |
41 | sum[lson].y=sum[lson].z; |
42 | sum[lson].z=tmp; |
43 | tmp=sum[rson].x; |
44 | sum[rson].x=sum[rson].y; |
45 | sum[rson].y=sum[rson].z; |
46 | sum[rson].z=tmp; |
47 | } |
48 | } |
49 | lazy[rt]=0; |
50 | } |
51 | |
52 | void build(int L,int R,int rt) { |
53 | lazy[rt]=0; |
54 | if(L==R) { |
55 | sum[rt].x=1; |
56 | sum[rt].y=0; |
57 | sum[rt].z=0; |
58 | return; |
59 | } |
60 | int mid=(L+R)>>1; |
61 | build(Lson); |
62 | build(Rson); |
63 | pushup(rt); |
64 | } |
65 | |
66 | void update(int l,int r,int L,int R,int rt) { |
67 | if(l<=L && r>=R) { |
68 | int tmp=sum[rt].x; |
69 | sum[rt].x=sum[rt].z; |
70 | sum[rt].z=sum[rt].y; |
71 | sum[rt].y=tmp; |
72 | lazy[rt]++; |
73 | return; |
74 | } |
75 | pushdown(rt); |
76 | int mid=(L+R)>>1; |
77 | if(l<=mid) |
78 | update(l,r,Lson); |
79 | if(r>mid) |
80 | update(l,r,Rson); |
81 | pushup(rt); |
82 | } |
83 | |
84 | long long query(int l,int r,int L,int R,int rt) { |
85 | if(l<=L && r>=R) { |
86 | return sum[rt].x; |
87 | } |
88 | pushdown(rt); |
89 | int mid=(L+R)>>1; |
90 | long long res=0; |
91 | if(l<=mid) |
92 | res+=query(l,r,Lson); |
93 | if(r>mid) |
94 | res+=query(l,r,Rson); |
95 | return res; |
96 | } |
97 | |
98 | int main() { |
99 | int op,N,Q; |
100 | while(~scanf("%d%d",&N,&Q)) { |
101 | build(1,N,1); |
102 | while(Q--) { |
103 | scanf("%d",&op); |
104 | if(op==0) { |
105 | int l,r; |
106 | scanf("%d%d",&l,&r); |
107 | update(l,r,1,N,1); |
108 | } |
109 | else { |
110 | int l,r; |
111 | scanf("%d%d",&l,&r); |
112 | printf("%lld\n",query(l,r,1,N,1)); |
113 | } |
114 | } |
115 | } |
116 | return 0; |
117 | } |
241 Fibonacci数列
Language: C++
Time: 4ms
1 |
|
2 |
|
3 | using namespace std; |
4 | |
5 | long long a[50]; |
6 | |
7 | void init(){ |
8 | a[0]=0;a[1]=1; |
9 | int i=1; |
10 | while (a[i]<=2147483647){ |
11 | a[i+1]=a[i]+a[i-1]; |
12 | ++i; |
13 | // cout<<a[i]<<endl; |
14 | } |
15 | // cout<<i<<endl; |
16 | } |
17 | |
18 | int main(){ |
19 | init(); |
20 | long long x; |
21 | while (cin>>x){ |
22 | if (x==-1) break; |
23 | bool flag=false; |
24 | for (int i=0;i<47;++i){ |
25 | if (x==a[i]){ |
26 | cout<<i<<endl; |
27 | flag=true; |
28 | break; |
29 | } |
30 | } |
31 | if (flag) continue; |
32 | cout<<"Not a Fibonacci number."<<endl; |
33 | } |
34 | return 0; |
35 | } |
242 方格涂色
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | int n; |
6 | ll ans; |
7 | |
8 | int main(){ |
9 | while (cin>>n){ |
10 | if (n<=0){ |
11 | cout<<0<<endl; |
12 | continue; |
13 | } |
14 | if (n==1){ |
15 | cout<<3<<endl; |
16 | continue; |
17 | } |
18 | ans=1; |
19 | for (int i=0;i<n;++i){ |
20 | ans<<=1; |
21 | } |
22 | if (n%2) ans-=2; |
23 | else ans+=2; |
24 | cout<<ans<<endl; |
25 | } |
26 | return 0; |
27 | } |
28 | |
29 | |
30 | //void dfs(int p,int sc,int cc){ |
31 | // if (p==n){ |
32 | // if (sc!=cc) ++ans; |
33 | // return; |
34 | // } |
35 | // for (int i=1;i<=3;++i){ |
36 | // if (i!=cc){ |
37 | // dfs(p+1,sc,i); |
38 | // } |
39 | // } |
40 | //} |
41 | // for (n=1;n<=20;++n){ |
42 | // ans=0; |
43 | // dfs(1,1,1); |
44 | // dfs(1,2,2); |
45 | // dfs(1,3,3); |
46 | // printf("%d:%lld\n",n,ans); |
47 | // } |
244 过河
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[25]; |
5 | |
6 | int main(){ |
7 | int n,ans1,ans2; |
8 | while (~scanf("%d",&n)){ |
9 | for (int i=0;i<n;++i){ |
10 | scanf("%d",a+i); |
11 | } |
12 | sort(a,a+n); |
13 | if (n==0) {printf("0\n");continue;} |
14 | if (n==1) {printf("%d\n",a[0]);continue;} |
15 | ans1=(n-2)*a[0]; |
16 | for (int i=1;i<n;++i) ans1+=a[i]; |
17 | // ans2=(n-2)/2*(2*a[1]+a[0]); |
18 | ans2=0; |
19 | for (int i=n-1;i>=3;i-=2){ |
20 | ans2+=2*a[1]+a[0]+a[i]; |
21 | } |
22 | if (n&1) ans2+=a[0]+a[1]+a[2]; |
23 | else ans2+=a[1]; |
24 | // cout<<ans1<<' '<<ans2<<endl; |
25 | printf("%d\n",min(ans1,ans2)); |
26 | } |
27 | return 0; |
28 | } |
246 最少拦截系统
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,n; |
6 | bool operator<(const node& qmh) const{ |
7 | return x<qmh.x; |
8 | } |
9 | }; |
10 | |
11 | set <node> myset; |
12 | |
13 | int main(){ |
14 | int n,cur,ans; |
15 | node tmp; |
16 | while (~scanf("%d",&n)){ |
17 | ans=0;myset.clear(); |
18 | for (int i=0;i<n;++i){ |
19 | scanf("%d",&cur); |
20 | if (myset.empty()){ |
21 | ++ans;myset.insert((node){cur,1}); |
22 | continue; |
23 | } |
24 | tmp=*(myset.lower_bound((node){cur,1})); |
25 | if (tmp.x<cur){ |
26 | ++ans;myset.insert((node){cur,1}); |
27 | } |
28 | else{ |
29 | myset.erase(tmp); |
30 | if (tmp.n==1){ |
31 | myset.insert((node){cur,1}); |
32 | } |
33 | else{ |
34 | myset.insert((node){cur,1}); |
35 | myset.insert((node){tmp.x,tmp.n-1}); |
36 | } |
37 | } |
38 | } |
39 | printf("%d\n",ans); |
40 | } |
41 | return 0; |
42 | } |
247 活动时间
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int a1,b1,c1,d1,a2,b2,c2,d2; |
6 | while (~scanf("%d%d%d%d%d%d%d%d",&a1,&b1,&c1,&d1,&a2,&b2,&c2,&d2)){ |
7 | a1+=a2;b1+=b2;c1+=c2;d1+=d2; |
8 | if (d1>=60){d1-=60;++c1;} |
9 | if (c1>=60){c1-=60;++b1;} |
10 | if (b1>=24){b1-=24;++a1;} |
11 | printf("%d %d %d %d\n",a1,b1,c1,d1); |
12 | } |
13 | return 0; |
14 | } |
248 整理电话号码
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | char solve(char x){ |
5 | if (x>='0' && x<='9') return x; |
6 | if (x>='A' && x<='Z') x=x-'A'+'a'; |
7 | if (x>='a' && x<='c') return '2'; |
8 | if (x>='d' && x<='f') return '3'; |
9 | if (x>='g' && x<='i') return '4'; |
10 | if (x>='j' && x<='l') return '5'; |
11 | if (x>='m' && x<='o') return '6'; |
12 | if (x>='p' && x<='s') return '7'; |
13 | if (x>='t' && x<='v') return '8'; |
14 | if (x>='w' && x<='z') return '9'; |
15 | } |
16 | |
17 | |
18 | char a[10]; |
19 | |
20 | int main(){ |
21 | int T;scanf("%d",&T); |
22 | while (T--){ |
23 | scanf("%s",a); |
24 | for (int i=0;i<8;++i){ |
25 | putchar(solve(a[i])); |
26 | if (i==3) putchar('-'); |
27 | } |
28 | putchar('\n'); |
29 | } |
30 | return 0; |
31 | } |
249 复制书稿
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[550]; |
5 | int n,k; |
6 | |
7 | inline bool can(const int &x){ |
8 | int cnt=1,cur=0; |
9 | for (int i=0;i<n;++i){ |
10 | if (cur+a[i]>x){ |
11 | cur=a[i]; |
12 | ++cnt; |
13 | } |
14 | else{ |
15 | cur+=a[i]; |
16 | } |
17 | if (cnt>k) return false; |
18 | } |
19 | return true; |
20 | } |
21 | |
22 | |
23 | int main(){ |
24 | int L,R,mid,kase=0; |
25 | while (~scanf("%d%d",&n,&k)){ |
26 | L=R=0; |
27 | int ans=0; |
28 | for (int i=0;i<n;++i){ |
29 | scanf("%d",&a[i]); |
30 | R+=a[i]; |
31 | L=max(L,a[i]); |
32 | } |
33 | R=R*2+1; |
34 | // R=1000000000; |
35 | while (L<=R){ |
36 | mid=(L+R)>>1; |
37 | if (can(mid)){ |
38 | R=mid-1; |
39 | ans=mid; |
40 | } |
41 | else{ |
42 | L=mid+1; |
43 | } |
44 | // cout<<L<<' '<<(L+R)/2<<' '<<R<<endl; |
45 | } |
46 | printf("Case %d: %d\n",++kase,ans); |
47 | } |
48 | return 0; |
49 | } |
255 Even or Odd
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T; |
6 | long long n; |
7 | scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%lld",&n); |
10 | long long ans=0; |
11 | while (n){ |
12 | if ((n|1)==n) ++ans; |
13 | n>>=1; |
14 | } |
15 | ans=1<<ans; |
16 | printf("%lld\n",ans); |
17 | } |
18 | } |
257 Good 8
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | |
5 | int main(){ |
6 | int T; |
7 | scanf("%d",&T); |
8 | long long ans,tmp; |
9 | while (T--){ |
10 | scanf("%lld",&ans); |
11 | int cnt=0; |
12 | while (1){ |
13 | cnt=0; |
14 | tmp=ans; |
15 | while (tmp){ |
16 | if (tmp%10==8) ++cnt; |
17 | tmp/=10; |
18 | } |
19 | if (cnt==3) break; |
20 | ++ans; |
21 | } |
22 | printf("%lld\n",ans); |
23 | } |
24 | return 0; |
25 | } |
259 Infinite loop
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | //gcd 最大公约数 |
6 | //欧几里得算法 辗转相除 |
7 | long long gcd(long long a, long long b){ |
8 | return a == 0 ? b : gcd(b % a, a); |
9 | } |
10 | |
11 | int main(){ |
12 | int T;scanf("%d",&T); |
13 | ll m,n,t,ans; |
14 | while (T--){ |
15 | scanf("%lld%lld",&m,&n); |
16 | t=gcd(m,n); |
17 | ans=m/t; |
18 | printf("%lld\n",ans); |
19 | } |
20 | return 0; |
21 | } |
261 Least Common Multiple
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long gcd(long long a, long long b){ |
5 | return a == 0 ? b : gcd(b % a, a); |
6 | } |
7 | |
8 | int main(){ |
9 | int T,n; |
10 | long long a,b; |
11 | scanf("%d",&T); |
12 | while (T--){ |
13 | scanf("%d",&n); |
14 | scanf("%lld",&a); |
15 | while (--n){ |
16 | scanf("%lld",&b); |
17 | a=a*b/gcd(a,b); |
18 | } |
19 | printf("%lld\n",a); |
20 | } |
21 | return 0; |
22 | } |
264 选数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | bool is_prime(ll x){ |
6 | if (x<=1) return false; |
7 | if (x==2) return true; |
8 | if (x%2==0) return false; |
9 | for (ll i=3;i*i<=x;++i){ |
10 | if (x%i==0) return false; |
11 | } |
12 | return true; |
13 | } |
14 | |
15 | ll a[25]; |
16 | int n,k; |
17 | int cnt; |
18 | |
19 | void dfs(int p,int d,ll sum){ |
20 | if (d==k){ |
21 | // cout<<sum<<endl; |
22 | if (is_prime(sum)) ++cnt; |
23 | return; |
24 | } |
25 | if (p>=n) return; |
26 | for (int i=p;i<n;++i){ |
27 | dfs(i+1,d+1,sum+a[i]); |
28 | } |
29 | return; |
30 | } |
31 | |
32 | int main(){ |
33 | while (~scanf("%d%d",&n,&k)){ |
34 | cnt=0; |
35 | for (int i=0;i<n;++i){ |
36 | scanf("%lld",&a[i]); |
37 | } |
38 | dfs(0,0,0); |
39 | printf("%d\n",cnt); |
40 | } |
41 | return 0; |
42 | } |
270 采药
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[1010]; |
5 | int w[110],val[110]; |
6 | |
7 | int main(){ |
8 | int maxw,n; |
9 | while (~scanf("%d%d",&maxw,&n)){ |
10 | memset(dp,0,sizeof(dp)); |
11 | for (int i=0;i<n;++i){ |
12 | scanf("%d%d",&w[i],&val[i]); |
13 | } |
14 | for (int i=0;i<n;++i){ |
15 | for (int j=maxw;j>=w[i];--j){ |
16 | dp[j]=max(dp[j],dp[j-w[i]]+val[i]); |
17 | } |
18 | } |
19 | int ans=0; |
20 | for (int i=0;i<=maxw;++i){ |
21 | ans=max(ans,dp[i]); |
22 | } |
23 | printf("%d\n",ans); |
24 | } |
25 | return 0; |
26 | } |
271 津津的储蓄计划
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[12]; |
5 | |
6 | int main(){ |
7 | int cur,cnt; |
8 | bool flag; |
9 | while (~scanf("%d",&a[0])){ |
10 | for (int i=1;i<12;++i) |
11 | scanf("%d",&a[i]); |
12 | cur=0;cnt=0;flag=true; |
13 | for (int i=0;i<12;++i){ |
14 | cur+=300; |
15 | cur-=a[i]; |
16 | if (cur<0){ |
17 | flag=false; |
18 | printf("-%d\n",i+1); |
19 | break; |
20 | } |
21 | while (cur>=100){ |
22 | cur-=100;++cnt; |
23 | } |
24 | } |
25 | if (flag) printf("%d\n",120*cnt+cur); |
26 | } |
27 | return 0; |
28 | } |
273 XX和YY的2的N次方
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n;cin>>n; |
6 | unsigned long long x=1<<n; |
7 | cout<<x<<endl; |
8 | return 0; |
9 | } |
274 XX和YY的新朋友
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[100]; |
5 | |
6 | int main(){ |
7 | int T;scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%s",a); |
10 | printf("%s%s\n",a,a); |
11 | } |
12 | return 0; |
13 | } |
275 XX和YY的余弦定理
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | |
6 | int main(){ |
7 | int T;scanf("%d",&T); |
8 | double a,b,c,ang; |
9 | while (T--){ |
10 | scanf("%lf%lf%lf",&a,&b,&ang); |
11 | c=a*a+b*b-2.0*a*b*cos(ang*pi/180.0); |
12 | c=sqrt(c); |
13 | printf("%.2f\n",c); |
14 | } |
15 | return 0; |
16 | } |
276 XX和YY的图书馆
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T,n,a,b,ans; |
6 | scanf("%d",&T); |
7 | while (T--){ |
8 | scanf("%d%d%d",&n,&a,&b); |
9 | ans=(int)fabs(n-a)+n; |
10 | printf("%d ",5*(ans-1)); |
11 | ans=(int)fabs(n-b)+n; |
12 | printf("%d\n",5*(ans-1)); |
13 | } |
14 | return 0; |
15 | } |
277 XX和YY的游戏
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[1000][1000]; |
5 | |
6 | bool dfs(int x,int y){ |
7 | if (dp[x][y]!=-1) return dp[x][y]; |
8 | if (x==1&&y==1) return dp[x][y]=false; |
9 | for (int i=1;i<x;++i){ |
10 | if (!dfs(i,x-i)) return dp[x][y]=true; |
11 | } |
12 | for (int j=1;j<y;++j){ |
13 | if (!dfs(j,y-j)) return dp[x][y]=true; |
14 | } |
15 | return dp[x][y]=false; |
16 | } |
17 | |
18 | void db(){ |
19 | memset(dp,-1,sizeof(dp)); |
20 | for (int i=1;i<=100;++i){ |
21 | for (int j=1;j<=100;++j){ |
22 | dp[i][j]=dfs(i,j); |
23 | } |
24 | } |
25 | } |
26 | |
27 | int main(){ |
28 | // db(); |
29 | // for (int i=1;i<=20;++i){ |
30 | // for (int j=1;j<=20;++j){ |
31 | // printf("%2d",dp[i][j]); |
32 | // } |
33 | // putchar('\n'); |
34 | // } |
35 | int T,x,y; |
36 | scanf("%d",&T); |
37 | while (T--){ |
38 | scanf("%d%d",&x,&y); |
39 | if (x%2==1&&y%2==1){ |
40 | printf("YY\n"); |
41 | } |
42 | else{ |
43 | printf("XX\n"); |
44 | } |
45 | } |
46 | return 0; |
47 | } |
286 Prime Path
Language: C++
Time: 4ms
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | using namespace std; |
8 | |
9 | struct sta{ |
10 | int x1,x2,x3,x4,t; |
11 | }; |
12 | |
13 | const int N = 10000; |
14 | bool is[N]; |
15 | int prime[N]; |
16 | int cnt = 0,esct; |
17 | int s[4],e[4]; |
18 | bool vis[10][10][10][10]; |
19 | queue <sta> que; |
20 | |
21 | void getprime(){ |
22 | memset(is,true,sizeof(is)); |
23 | is[0] = is[1] = false; |
24 | for (int i = 2; i < N; ++i){ |
25 | if (is[i]) prime[++cnt] = i; |
26 | for (int j = 1; j <= cnt && i*prime[j] < N; j++){ |
27 | is[i*prime[j]] = 0; |
28 | if (!(i%prime[j])) break; |
29 | } |
30 | } |
31 | } |
32 | |
33 | int cat(int a,int b,int c,int d){ |
34 | return a*1000+b*100+c*10+d; |
35 | } |
36 | |
37 | void bfs(){ |
38 | struct sta cur,nxt; |
39 | while (que.size()){ |
40 | cur=que.front();que.pop(); |
41 | if (cur.x1==e[0]&&cur.x2==e[1]&&cur.x3==e[2]&&cur.x4==e[3]){ |
42 | esct=cur.t; |
43 | return; |
44 | } |
45 | for (int i=1;i<=9;i++){ |
46 | if (is[cat(i,cur.x2,cur.x3,cur.x4)] && !vis[i][cur.x2][cur.x3][cur.x4]){ |
47 | vis[i][cur.x2][cur.x3][cur.x4]=true; |
48 | nxt={i,cur.x2,cur.x3,cur.x4,cur.t+1}; |
49 | que.push(nxt); |
50 | } |
51 | } |
52 | for (int i=0;i<=9;i++){ |
53 | if (is[cat(cur.x1,i,cur.x3,cur.x4)] && !vis[cur.x1][i][cur.x3][cur.x4]){ |
54 | vis[cur.x1][i][cur.x3][cur.x4]=true; |
55 | nxt={cur.x1,i,cur.x3,cur.x4,cur.t+1}; |
56 | que.push(nxt); |
57 | } |
58 | } |
59 | for (int i=0;i<=9;i++){ |
60 | if (is[cat(cur.x1,cur.x2,i,cur.x4)] && !vis[cur.x1][cur.x2][i][cur.x4]){ |
61 | vis[cur.x1][cur.x2][i][cur.x4]=true; |
62 | nxt={cur.x1,cur.x2,i,cur.x4,cur.t+1}; |
63 | que.push(nxt); |
64 | } |
65 | } |
66 | for (int i=0;i<=9;i++){ |
67 | if (is[cat(cur.x1,cur.x2,cur.x3,i)] && !vis[cur.x1][cur.x2][cur.x3][i]){ |
68 | vis[cur.x1][cur.x2][cur.x3][i]=true; |
69 | nxt={cur.x1,cur.x2,cur.x3,i,cur.t+1}; |
70 | que.push(nxt); |
71 | } |
72 | } |
73 | } |
74 | return; |
75 | } |
76 | |
77 | |
78 | int main(){ |
79 | getprime(); |
80 | int T;cin>>T; |
81 | while (T--){ |
82 | memset(vis,false,sizeof(vis)); |
83 | while (que.size()) que.pop(); |
84 | esct=-1; |
85 | scanf("%1d%1d%1d%1d",&s[0],&s[1],&s[2],&s[3]); |
86 | scanf("%1d%1d%1d%1d",&e[0],&e[1],&e[2],&e[3]); |
87 | vis[s[0]][s[1]][s[2]][s[3]]=true; |
88 | struct sta temp={s[0],s[1],s[2],s[3],0}; |
89 | que.push(temp); |
90 | bfs(); |
91 | if (esct==-1){ |
92 | printf("Impossible\n"); |
93 | } |
94 | else{ |
95 | printf("%d\n",esct); |
96 | } |
97 | } |
98 | } |
291 折纸的厚度
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | double cur; |
6 | int cnt,kase=0; |
7 | while (~scanf("%lf",&cur)){ |
8 | cnt=0; |
9 | printf("Case %d: %.1f, ",++kase,cur); |
10 | cur/=1000.00; |
11 | while (cur<=8844.43){ |
12 | cur*=2; |
13 | ++cnt; |
14 | } |
15 | printf("%d, %.1f\n",cnt,cur); |
16 | } |
17 | return 0; |
18 | } |
299 删除一系列数据中的重复数据
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 | |
6 | string s; |
7 | set <int> mst; |
8 | |
9 | int main(){ |
10 | int kase=0,tmp; |
11 | while (getline(cin,s)){ |
12 | stringstream ss(s); |
13 | mst.clear(); |
14 | cout<<"Case "<<++kase<<":"; |
15 | while (ss>>tmp){ |
16 | if (mst.insert(tmp).y) cout<<' '<<tmp; |
17 | } |
18 | cout<<endl; |
19 | } |
20 | return 0; |
21 | } |
300 阶乘尾部0的个数
Language: C++
Time: 4ms
1 |
|
2 |
|
3 |
|
4 | using namespace std; |
5 | int main(){ |
6 | int x,i=1; |
7 | while (scanf("%d",&x)==1){ |
8 | printf("Case %d: %d, ",i,x); |
9 | int t=5,sum=0; |
10 | while (t<=x){ |
11 | sum+=x/t; |
12 | t*=5; |
13 | } |
14 | printf("%d\n",sum); |
15 | i++; |
16 | } |
17 | return 0; |
18 | } |
301 判断算式的正确性
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | string a; |
5 | stringstream ss; |
6 | int x,y,z; |
7 | char op,tmp; |
8 | |
9 | bool solve(){ |
10 | if (op=='+' && x+y==z) return true; |
11 | if (op=='-' && x-y==z) return true; |
12 | if (op=='*' && x*y==z) return true; |
13 | if (op=='/' && y!=0 && x/y==z && x%y==0) return true; |
14 | return false; |
15 | } |
16 | |
17 | int main(){ |
18 | int kase=0; |
19 | while (~scanf("%d",&x)){ |
20 | while (1){ |
21 | op=getchar(); |
22 | if (op=='+' || op=='-' || op=='*' || op=='/') break; |
23 | } |
24 | scanf("%d",&y); |
25 | while (1){ |
26 | tmp=getchar(); |
27 | if (tmp=='=') break; |
28 | } |
29 | scanf("%d",&z); |
30 | // printf("%d%c%d=%d\n",x,op,y,z); |
31 | printf("Case %d: %s\n",++kase,solve()?"Yes":"No"); |
32 | } |
33 | return 0; |
34 | } |
302 求给定的n个实数中的最大值
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,kase=0; |
6 | double cur,maxx; |
7 | while (~scanf("%d",&n)){ |
8 | maxx=-100000000; |
9 | while (n--){ |
10 | scanf("%lf",&cur); |
11 | maxx=max(maxx,cur); |
12 | } |
13 | printf("Case %d: %.1f\n",++kase,maxx); |
14 | } |
15 | return 0; |
16 | } |
303 计算若干个整数的和
Language: C++
Time: 1ms
1 |
|
2 |
|
3 | using namespace std; |
4 | int main(){ |
5 | string a; |
6 | int kase=0; |
7 | while (getline(cin,a)){ |
8 | stringstream aa(a); |
9 | int cnt=0,sum=0,x; |
10 | while (aa>>x){ |
11 | ++cnt; |
12 | sum+=x; |
13 | } |
14 | cout<<"Case "<<++kase<<": "<<cnt<<", "<<sum<<endl; |
15 | } |
16 | return 0; |
17 | } |
304 判断回文串
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | string a,b; |
5 | int main(){ |
6 | int T,kase=0;cin>>T;getchar(); |
7 | while (T--){ |
8 | getline(cin,a); |
9 | b=a;reverse(b.begin(),b.end()); |
10 | if (a==b) cout<<"Case "<<++kase<<": YES."<<endl; |
11 | else cout<<"Case "<<++kase<<": NO."<<endl; |
12 | } |
13 | return 0; |
14 | } |
305 Super Even Palindrome String
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[100010]; |
5 | |
6 | int main(){ |
7 | scanf("%s",a); |
8 | printf("%s",a); |
9 | reverse(a,a+strlen(a)); |
10 | printf("%s\n",a); |
11 | return 0; |
12 | } |
307 Hunger Games
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int sg[100000]; |
5 | |
6 | void db(){ |
7 | sg[0]=0; |
8 | for (int n=1;n<=100000;++n){ |
9 | set<int> cur; |
10 | int x=n-1,y=0; |
11 | while (x>=y){ |
12 | cur.insert(sg[x]^sg[y]); |
13 | --x,++y; |
14 | } |
15 | x=n-2,y=0; |
16 | while (x>=y){ |
17 | cur.insert(sg[x]^sg[y]); |
18 | --x,++y; |
19 | } |
20 | x=0; |
21 | while (cur.find(x)!=cur.end()){ |
22 | ++x; |
23 | } |
24 | sg[n]=x; |
25 | if (sg[n]==0) printf("%d:%d\n",n,sg[n]); |
26 | if (n%1000==0) printf("(%d)\n",n); |
27 | } |
28 | } |
29 | |
30 | int main(){ |
31 | int T,x; |
32 | scanf("%d",&T); |
33 | while (T--){ |
34 | scanf("%d",&x); |
35 | if (x<=2) printf("5\n"); |
36 | else printf("6\n"); |
37 | } |
38 | return 0; |
39 | } |
309 The Area of Pan-Chi
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[16][16]; |
5 | int m,n; |
6 | int d[4][2]={0,1,0,-1,-1,0,1,0}; |
7 | |
8 | void init(){ |
9 | for (int i=0;i<16;++i){ |
10 | for (int j=0;j<16;++j){ |
11 | a[i][j]='.'; |
12 | } |
13 | } |
14 | } |
15 | |
16 | void debug(){ |
17 | for (int i=0;i<16;++i){ |
18 | for (int j=0;j<16;++j){ |
19 | putchar(a[i][j]); |
20 | } |
21 | putchar('\n'); |
22 | } |
23 | } |
24 | |
25 | void dfs(int x,int y){ |
26 | a[x][y]='#'; |
27 | int nx,ny; |
28 | for (int i=0;i<4;++i){ |
29 | nx=x+d[i][0];ny=y+d[i][1]; |
30 | if (nx<0 || nx>15) continue; |
31 | if (ny<0 || ny>15) continue; |
32 | if (a[nx][ny]!='.') continue; |
33 | dfs(nx,ny); |
34 | } |
35 | } |
36 | |
37 | int main(){ |
38 | int ans; |
39 | while(~scanf("%d%d%~c",&m,&n)){ |
40 | init(); |
41 | for (int i=1;i<=m;++i){ |
42 | for (int j=1;j<=n;++j){ |
43 | a[i][j]=getchar(); |
44 | } |
45 | getchar(); |
46 | } |
47 | dfs(0,0); |
48 | // debug(); |
49 | ans=0; |
50 | for (int i=0;i<=m;++i){ |
51 | for (int j=0;j<=n;++j){ |
52 | if (a[i][j]=='/' || a[i][j]=='\\') ++ans; |
53 | else if (a[i][j]=='.') ans+=2; |
54 | } |
55 | } |
56 | printf("%d\n",ans); |
57 | } |
58 | return 0; |
59 | } |
311 Crazy Overwatch Boxes
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | int ans; |
6 | |
7 | void dfs(int a,int b){ |
8 | int aa=a%4,bb=b%2; |
9 | int cur=a/4+b/2; |
10 | ans+=cur; |
11 | if (cur==0) return; |
12 | dfs(aa+cur,bb+cur); |
13 | } |
14 | |
15 | int main(){ |
16 | int T,x; |
17 | scanf("%d",&T); |
18 | while (T--){ |
19 | scanf("%d",&x); |
20 | ans=x/4; |
21 | dfs(ans,ans); |
22 | printf("%d\n",ans); |
23 | } |
24 | return 0; |
25 | } |
313 Grids Counting
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | int main(){ |
6 | int T,m,n,ans; |
7 | scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%d%d",&m,&n); |
10 | ans=0; |
11 | for (int i=1;i<=n;++i){ |
12 | for (int j=1;j<=m;++j){ |
13 | ans+=i*j; |
14 | } |
15 | } |
16 | printf("%d\n",ans); |
17 | } |
18 | return 0; |
19 | } |
314 Courses of CES
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[1000]; |
5 | |
6 | int main(){ |
7 | int n,cnt; |
8 | while (~scanf("%d",&n)){ |
9 | cnt=0; |
10 | while (n--){ |
11 | scanf("%s",a); |
12 | if (a[0]=='0'&&a[1]=='8'&&a[2]=='3'&&a[3]=='0'){ |
13 | ++cnt; |
14 | } |
15 | } |
16 | printf("%d\n",cnt); |
17 | } |
18 | return 0; |
19 | } |
315 Computer Science Progresses
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,m; |
6 | while (cin>>n>>m){ |
7 | if (n==0 && m==0) break; |
8 | if (n+n-1+n-2>=m){ |
9 | cout<<"Yes"<<endl; |
10 | } |
11 | else cout<<"No"<<endl; |
12 | } |
13 | return 0; |
14 | } |
317 Steam Summer Sales
Language: C++
Time: 40ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[100100]; |
5 | int w[505],v[505]; |
6 | |
7 | int main(){ |
8 | int n,m; |
9 | scanf("%d%d",&n,&m); |
10 | memset(dp,0,sizeof(dp)); |
11 | for (int i=1;i<=n;++i){ |
12 | scanf("%d%d",&w[i],&v[i]); |
13 | } |
14 | for (int i=1;i<=n;++i){ |
15 | for (int j=m;j-w[i]>=0;--j){ |
16 | dp[j]=max(dp[j-w[i]]+v[i],dp[j]); |
17 | } |
18 | } |
19 | int ans=0; |
20 | for (int i=1;i<=m;++i){ |
21 | ans=max(ans,dp[i]); |
22 | } |
23 | printf("%d\n",ans); |
24 | return 0; |
25 | } |
318 Jazz_Charles的Dog数列
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | const ll MOD=100000007; |
6 | const int maxn=2; |
7 | |
8 | struct mat { |
9 | ll a[maxn][maxn]; |
10 | void init() { |
11 | memset(a, 0, sizeof(a)); |
12 | for (int i = 0; i<maxn; ++i) { |
13 | a[i][i] = 1; |
14 | } |
15 | } |
16 | void clear() { |
17 | memset(a, 0, sizeof(a)); |
18 | } |
19 | mat operator *(const mat &b)const { |
20 | mat c; |
21 | c.clear(); |
22 | for (int i=0; i<maxn; i++) |
23 | for (int j=0; j<maxn; j++) |
24 | for (int k=0; k<maxn; k++) |
25 | c.a[i][j]=(c.a[i][j]+(a[i][k]*b.a[k][j])%MOD)%MOD; |
26 | return c; |
27 | } |
28 | }; |
29 | |
30 | mat quick_pow(mat a, ll n) { |
31 | mat ans; |
32 | ans.init(); |
33 | while (n) { |
34 | if (n & 1) |
35 | ans = ans*a; |
36 | a = a*a; |
37 | n >>= 1; |
38 | } |
39 | return ans; |
40 | } |
41 | |
42 | ll init1[2][2]= { |
43 | 1,8, |
44 | 1,0 |
45 | }; |
46 | |
47 | int main() { |
48 | ll n,ans; |
49 | mat a; |
50 | while (cin>>n) { |
51 | if (n<=2){ |
52 | cout<<1<<endl; |
53 | continue; |
54 | } |
55 | for (int i=0; i<maxn; ++i) { |
56 | for (int j=0; j<maxn; ++j) { |
57 | a.a[i][j]=init1[i][j]; |
58 | } |
59 | } |
60 | a=quick_pow(a,n-2); |
61 | ans=a.a[0][0]+a.a[0][1]; |
62 | cout<<ans%MOD<<endl; |
63 | } |
64 | return 0; |
65 | } |
325 五子棋
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[9][9]; |
5 | |
6 | bool check(int x,int y){ |
7 | if (a[x][y]!='O') return false; |
8 | a[x][y]='B'; |
9 | for (int i=x-4;i<=x;++i){ |
10 | if (i<0 || i+4>=9) continue; |
11 | // printf("(%d,%d)--(%d,%d)\n",i,y,i+4,y); |
12 | // (i,y)--(i+4,y) |
13 | bool flag=true; |
14 | for (int j=0;j<5;++j){ |
15 | if (a[i+j][y]!='B'){ |
16 | flag=false; |
17 | break; |
18 | } |
19 | } |
20 | if (flag){ |
21 | a[x][y]='O'; |
22 | return true; |
23 | } |
24 | } |
25 | for (int i=y-4;i<=y;++i){ |
26 | if (i<0 || i+4>=9) continue; |
27 | // printf("(%d,%d)--(%d,%d)\n",x,i,x,i+4); |
28 | // (x,i)--(x,i+4) |
29 | bool flag=true; |
30 | for (int j=0;j<5;++j){ |
31 | if (a[x][i+j]!='B'){ |
32 | flag=false; |
33 | break; |
34 | } |
35 | } |
36 | if (flag){ |
37 | a[x][y]='O'; |
38 | return true; |
39 | } |
40 | } |
41 | for (int i=0;i<5;++i){ |
42 | // (x-i,y-i)--(x-i+4;y-i+4) |
43 | if (x-i<0 || y-i<0 || x-i+4>=9 || y-i+4>=9) continue; |
44 | bool flag=true; |
45 | for (int j=0;j<5;++j){ |
46 | if (a[x-i+j][y-i+j]!='B'){ |
47 | flag=false; |
48 | break; |
49 | } |
50 | } |
51 | if (flag){ |
52 | a[x][y]='O'; |
53 | return true; |
54 | } |
55 | } |
56 | for (int i=0;i<5;++i){ |
57 | // (x-i,y+i)--(x-i+4,y+i-4) |
58 | if (x-i<0 || y+i>=9 || x-i+4>=9 || y+i-4<0) continue; |
59 | bool flag=true; |
60 | for (int j=0;j<5;++j){ |
61 | if (a[x-i+j][y+i-j]!='B'){ |
62 | flag=false; |
63 | break; |
64 | } |
65 | } |
66 | if (flag){ |
67 | a[x][y]='O'; |
68 | return true; |
69 | } |
70 | } |
71 | a[x][y]='O'; |
72 | return false; |
73 | } |
74 | |
75 | int main(){ |
76 | int T; |
77 | bool flag; |
78 | scanf("%d",&T); |
79 | while (T--){ |
80 | getchar(); |
81 | for (int i=0;i<9;++i){ |
82 | for (int j=0;j<9;++j){ |
83 | a[i][j]=getchar(); |
84 | } |
85 | getchar(); |
86 | } |
87 | flag=true; |
88 | for (int i=0;i<9 && flag;++i){ |
89 | for (int j=0;j<9;++j){ |
90 | if (check(i,j)){ |
91 | // printf("[%d %d]\n",i,j); |
92 | flag=false; |
93 | break; |
94 | } |
95 | } |
96 | } |
97 | if (!flag) printf("Yes!\n"); |
98 | else printf("No!\n"); |
99 | } |
100 | return 0; |
101 | } |
102 | |
103 | /* |
104 | 100 |
105 | OOOOOOOOO |
106 | BBBBWBBBB |
107 | BBBBBBBBB |
108 | BBBBBBWBB |
109 | OOOWWWOWW |
110 | WWWWWWWWW |
111 | OOOOOOOOO |
112 | OOOBBBOOO |
113 | BBBOOBBBO |
114 | */ |
329 转换三值逻辑运算真值表
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[1000]; |
5 | |
6 | struct node{ |
7 | int cnt,p,x; |
8 | bool operator < (const node& qmh) const{ |
9 | if (cnt==qmh.cnt) return p<qmh.p; |
10 | return cnt>qmh.cnt; |
11 | } |
12 | }; |
13 | |
14 | node x[3]; |
15 | |
16 | int main(){ |
17 | int T,len; |
18 | char s[3]; |
19 | scanf("%d",&T); |
20 | while (T--){ |
21 | scanf("%s",a); |
22 | len=strlen(a); |
23 | x[0].cnt=x[1].cnt=x[2].cnt=0; |
24 | x[0].p=x[1].p=x[2].p=1010; |
25 | x[0].x=0;x[1].x=1;x[2].x=2; |
26 | for (int i=0;i<len;++i){ |
27 | if (a[i]=='0') { |
28 | ++x[0].cnt; |
29 | x[0].p=min(x[0].p,i); |
30 | } |
31 | else if (a[i]=='1') { |
32 | ++x[1].cnt; |
33 | x[1].p=min(x[1].p,i); |
34 | } |
35 | else{ |
36 | ++x[2].cnt; |
37 | x[2].p=min(x[2].p,i); |
38 | } |
39 | } |
40 | sort(x,x+3); |
41 | for (int i=0;i<3;++i){ |
42 | if (i==0) s[x[i].x]='D'; |
43 | else if (i==1) s[x[i].x]='H'; |
44 | else s[x[i].x]='V'; |
45 | } |
46 | for (int i=0;i<len;++i){ |
47 | putchar(s[a[i]-'0']); |
48 | } |
49 | putchar('\n'); |
50 | } |
51 | return 0; |
52 | } |
330 k-子串问题
Language: C++
Time: 296ms
1 |
|
2 | using namespace std; |
3 | |
4 | int ans[26][100110]; |
5 | |
6 | int main(){ |
7 | int T,len,k; |
8 | char x; |
9 | scanf("%d",&T); |
10 | while (T--){ |
11 | for (int i=0;i<26;++i) ans[i][0]=0; |
12 | scanf("%d%d%~c",&len,&k); |
13 | for (int i=1;i<=len;++i){ |
14 | for (int j=0;j<26;++j) ans[j][i]=ans[j][i-1]; |
15 | x=getchar(); |
16 | ++ans[x-'a'][i]; |
17 | } |
18 | bool flag=true; |
19 | for (int i=k*26;i<=len && flag;++i){ |
20 | flag=false; |
21 | for (int j=0;j<26 && !flag;++j){ |
22 | if (ans[j][i]-ans[j][i-k*26]!=k) flag=true; |
23 | } |
24 | } |
25 | printf("%s\n",flag?"NO":"YES"); |
26 | } |
27 | return 0; |
28 | } |
331 麻将
Language: C++
Time: 12ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool check(map<int,int>& cur){ |
5 | int cnt=0; |
6 | for (int i=1;i<=9;++i){ |
7 | if (cur[i]==2) ++cnt; |
8 | else if (cur[i]!=0){ |
9 | cnt=-1; |
10 | break; |
11 | } |
12 | } |
13 | if (cnt==1) return true; |
14 | bool ret; |
15 | for (int i=1;i<=9;++i){ |
16 | if (cur[i]>=3){ |
17 | cur[i]-=3; |
18 | ret=check(cur); |
19 | cur[i]+=3; |
20 | if (ret) return true; |
21 | } |
22 | } |
23 | for (int i=1;i<=7;++i){ |
24 | if (cur[i]>=1&&cur[i+1]>=1&&cur[i+2]>=1){ |
25 | --cur[i];--cur[i+1];--cur[i+2]; |
26 | ret=check(cur); |
27 | ++cur[i];++cur[i+1];++cur[i+2]; |
28 | if (ret) return true; |
29 | } |
30 | } |
31 | return false; |
32 | } |
33 | |
34 | int main(){ |
35 | int T,x;cin>>T; |
36 | map<int,int> mmp; |
37 | vector<int> ans; |
38 | while (T--){ |
39 | mmp.clear(); |
40 | for (int i=0;i<13;++i){ |
41 | cin>>x; |
42 | ++mmp[x]; |
43 | } |
44 | ans.clear(); |
45 | bool tin=false; |
46 | for (int j=1;j<=9;++j){ |
47 | if (mmp[j]==4) continue; |
48 | ++mmp[j]; |
49 | if (check(mmp)){ |
50 | tin=true; |
51 | ans.push_back(j); |
52 | } |
53 | --mmp[j]; |
54 | } |
55 | if (tin){ |
56 | for (int i=0;i<ans.size();++i){ |
57 | cout<<ans[i]; |
58 | if (i==ans.size()-1) cout<<endl; |
59 | else cout<<' '; |
60 | } |
61 | } |
62 | else{ |
63 | cout<<"NO"<<endl; |
64 | } |
65 | } |
66 | return 0; |
67 | } |
338 The Seat is taken
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int a,b; |
5 | cin>>a>>b; |
6 | cout<<a-b; |
7 | } |
340 生日蛋糕
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | const ll INF=100000000; |
6 | ll ans; |
7 | int n,m; |
8 | |
9 | void dfs(int cen,int v,int rmax,int hmax,ll curs){ |
10 | //cen--,v--,rmax--,hmax--,curs++; |
11 | if (cen*rmax*rmax*hmax<v && cen!=0) return; |
12 | if (curs>ans||v<0||rmax<0||hmax<0||cen<0) return; |
13 | if (cen==0){ |
14 | if (v==0) ans=min(ans,curs); |
15 | return; |
16 | } |
17 | for (int i=cen;i*i*cen<=v&&i<=rmax;++i){ //r |
18 | for (int j=cen;i*i*j<=v&&j<=hmax;++j){ //h |
19 | dfs(cen-1,v-i*i*j,i-1,j-1,curs+2*i*j); |
20 | } |
21 | } |
22 | } |
23 | |
24 | int main(){ |
25 | while (~scanf("%d%d",&n,&m)){ |
26 | ans=INF; |
27 | for (int i=m;i*i<=n;++i){ //r |
28 | for (int j=m;i*i*j<=n;++j){ //h |
29 | dfs(m-1,n-i*i*j,i-1,j-1,(ll)(i*i+2*i*j)); |
30 | } |
31 | } |
32 | if (ans==INF) printf("0\n"); |
33 | else printf("%lld\n",ans); |
34 | } |
35 | return 0; |
36 | } |
344 一道简单题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | int n,x,maxx,minn,sum; |
5 | while(cin>>n){ |
6 | sum=0; |
7 | maxx=-100000; |
8 | minn=100000; |
9 | for (int i=0;i<n;++i){ |
10 | cin>>x; |
11 | sum+=x; |
12 | if (x>maxx) maxx=x; |
13 | if (x<minn) minn=x; |
14 | } |
15 | cout<<maxx<<' '<<minn<<' '<<sum<<endl; |
16 | } |
17 | return 0; |
18 | } |
345 究竟有多二
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T; |
6 | long long x,cur,cnt; |
7 | scanf("%d",&T); |
8 | while (T--){ |
9 | scanf("%lld",&x); |
10 | cnt=0;cur=1; |
11 | while (cur<x){ |
12 | cur<<=1; |
13 | cnt+=x/cur; |
14 | } |
15 | printf("%lld\n",cnt); |
16 | } |
17 | return 0; |
18 | } |
349 出现次数最多的整数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | map <long long,int> mmp; |
5 | |
6 | int main(){ |
7 | int n,maxn; |
8 | long long x,ans; |
9 | while (~scanf("%d",&n)){ |
10 | maxn=0; |
11 | mmp.clear(); |
12 | for (int i=0;i<n;++i){ |
13 | scanf("%lld",&x); |
14 | ++mmp[x]; |
15 | maxn=max(mmp[x],maxn); |
16 | } |
17 | ans=10000000000010; |
18 | for (auto it=mmp.begin();it!=mmp.end();++it){ |
19 | if ((it->second)==maxn) ans=min(it->first,ans); |
20 | } |
21 | printf("%lld\n",ans); |
22 | } |
23 | return 0; |
24 | } |
350 重合的爆竹声
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int a,b,c,d,t,cnt,ans; |
6 | while (~scanf("%d%d%d%d%d",&a,&b,&c,&d,&t)){ |
7 | ans=0; |
8 | for (int i=1;i<=t;++i){ |
9 | cnt=0; |
10 | if (i%a==0) ++cnt; |
11 | if (i%b==0) ++cnt; |
12 | if (i%c==0) ++cnt; |
13 | if (i%d==0) ++cnt; |
14 | if (cnt>=2) ++ans; |
15 | } |
16 | printf("%d\n",ans); |
17 | } |
18 | return 0; |
19 | } |
353 再来一道简单题
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool is(long long x){ |
5 | if (x<=1) return false; |
6 | if (x==2) return true; |
7 | if (!(x&1)) return false; |
8 | for (long long i=3;i*i<=x;i+=2){ |
9 | if (x%i==0) return false; |
10 | } |
11 | return true; |
12 | } |
13 | |
14 | int main(){ |
15 | long long x; |
16 | while(~scanf("%lld",&x)){ |
17 | if (x==2) printf("1\n"); |
18 | else if (!(x&1)) printf("2\n"); |
19 | else if (is(x)) printf("1\n"); |
20 | else if (is(x-2)) printf("2\n"); |
21 | else printf("3\n"); |
22 | } |
23 | return 0; |
24 | } |
354 字母图形
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,m,kase=0; |
6 | while (~scanf("%d%d",&n,&m)){ |
7 | printf("Case %d\n",++kase); |
8 | for (int i=0;i<n;++i){ |
9 | for (int j=0;j<m;++j){ |
10 | putchar((int)fabs(i-j)+'A'); |
11 | } |
12 | putchar('\n'); |
13 | } |
14 | } |
15 | return 0; |
16 | } |
356 新建 Microsoft Office Word 文档
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool a[100]; |
5 | |
6 | int main(){ |
7 | int n,x; |
8 | char temp[20]; |
9 | scanf("%d",&n); |
10 | memset(a,false,sizeof(a)); |
11 | while (n--){ |
12 | scanf("%s",temp); |
13 | if (temp[0]=='N'){ |
14 | int cnt=1; |
15 | while (a[cnt]) ++cnt; |
16 | printf("%d\n",cnt); |
17 | a[cnt]=true; |
18 | } |
19 | else if (temp[0]=='D'){ |
20 | scanf("%d",&x); |
21 | if (a[x]){ |
22 | printf("Successful\n"); |
23 | a[x]=false; |
24 | } |
25 | else{ |
26 | printf("Failed\n"); |
27 | } |
28 | } |
29 | } |
30 | return 0; |
31 | } |
357 最大乘积
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int m,n; |
5 | int a[17]; |
6 | |
7 | long long solve(){ |
8 | long long ans=-1e9,cur,nn; |
9 | long long maxn=(1<<n); |
10 | int p; |
11 | for (long long i=0;i<maxn;++i){ |
12 | if (__builtin_popcount(i)!=m) continue; |
13 | cur=1;nn=i;p=0; |
14 | while (nn){ |
15 | if (nn&1) cur*=a[p]; |
16 | nn>>=1;++p; |
17 | } |
18 | // cout<<cur<<' '; |
19 | ans=max(ans,cur); |
20 | } |
21 | return ans; |
22 | } |
23 | |
24 | int main(){ |
25 | int T;scanf("%d",&T); |
26 | while (T--){ |
27 | scanf("%d%d",&n,&m); |
28 | for (int i=0;i<n;++i){ |
29 | scanf("%d",&a[i]); |
30 | } |
31 | printf("%lld\n",solve()); |
32 | } |
33 | } |
361 新兔子数列
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | const ll MOD=100000007; |
6 | const int maxn=4; |
7 | |
8 | struct mat { |
9 | ll a[maxn][maxn]; |
10 | void init() { |
11 | memset(a, 0, sizeof(a)); |
12 | for (int i = 0; i<maxn; ++i) { |
13 | a[i][i] = 1; |
14 | } |
15 | } |
16 | void clear() { |
17 | memset(a, 0, sizeof(a)); |
18 | } |
19 | mat operator *(const mat &b)const { |
20 | mat c; |
21 | c.clear(); |
22 | for (int i=0; i<maxn; i++) |
23 | for (int j=0; j<maxn; j++) |
24 | for (int k=0; k<maxn; k++) |
25 | c.a[i][j]=(c.a[i][j]+(a[i][k]*b.a[k][j])%MOD)%MOD; |
26 | return c; |
27 | } |
28 | }; |
29 | |
30 | mat quick_pow(mat a, ll n) { |
31 | mat ans; |
32 | ans.init(); |
33 | while (n) { |
34 | if (n & 1) |
35 | ans = ans*a; |
36 | a = a*a; |
37 | n >>= 1; |
38 | } |
39 | return ans; |
40 | } |
41 | |
42 | ll init1[4][4]= { |
43 | 1,1,1,0, |
44 | 1,0,0,0, |
45 | 0,0,1,1, |
46 | 0,0,0,1 |
47 | }; |
48 | |
49 | int main() { |
50 | ll n,ans; |
51 | mat a; |
52 | while (cin>>n) { |
53 | if (n<=2){ |
54 | cout<<1<<endl; |
55 | continue; |
56 | } |
57 | for (int i=0; i<4; ++i) { |
58 | for (int j=0; j<4; ++j) { |
59 | a.a[i][j]=init1[i][j]; |
60 | } |
61 | } |
62 | a=quick_pow(a,n-2); |
63 | ans=((a.a[0][0]+a.a[0][1])%MOD+a.a[0][2]*3%MOD)%MOD+a.a[0][3]; |
64 | cout<<ans%MOD<<endl; |
65 | } |
66 | return 0; |
67 | } |
362 选数游戏
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int dp[105][105]; |
5 | int a[105][105]; |
6 | |
7 | int main(){ |
8 | int m,n; |
9 | while (~scanf("%d%d",&m,&n)){ |
10 | for (int i=0;i<105;++i){ |
11 | for (int j=0;j<105;++j){ |
12 | dp[i][j]=-100000; |
13 | } |
14 | } |
15 | for (int i=1;i<=m;++i){ |
16 | for (int j=1;j<=n;++j){ |
17 | scanf("%d",&a[i][j]); |
18 | } |
19 | } |
20 | for (int j=1;j<=n;++j){ |
21 | dp[1][j]=max(dp[1][j-1],a[1][j]); |
22 | } |
23 | for (int i=2;i<=m;++i){ |
24 | for (int j=1;j<=n;++j){ |
25 | dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+a[i][j]); |
26 | } |
27 | } |
28 | // for (int i=0;i<=m;++i){ |
29 | // for (int j=0;j<=n;++j){ |
30 | // printf("%d ",dp[i][j]); |
31 | // } |
32 | // putchar('\n'); |
33 | // } |
34 | printf("%d\n",dp[m][n]); |
35 | } |
36 | return 0; |
37 | } |
364 整数拼接
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | vector <string> vec; |
5 | |
6 | bool cmp(const string &a,const string &b){ |
7 | return (a+b>b+a); |
8 | } |
9 | |
10 | int main(){ |
11 | int n; |
12 | string cur; |
13 | while(cin>>n){ |
14 | vec.clear(); |
15 | for (int i=0;i<n;++i){ |
16 | cin>>cur; |
17 | vec.push_back(cur); |
18 | } |
19 | sort(vec.begin(),vec.end(),cmp); |
20 | for(auto it=vec.begin();it!=vec.end();++it){ |
21 | cout<<(*it); |
22 | } |
23 | cout<<endl; |
24 | } |
25 | return 0; |
26 | } |
367 csl买苹果
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int ans; |
5 | |
6 | void dfs(int a,int ma,int n){ |
7 | if (ma*n<a) return; |
8 | if (n==0){ |
9 | ++ans; |
10 | return; |
11 | } |
12 | int x=min(a,ma); |
13 | for (int i=x;i>=0;--i){ |
14 | dfs(a-i,i,n-1); |
15 | } |
16 | } |
17 | |
18 | int main(){ |
19 | int m,n; |
20 | while (cin>>m>>n){ |
21 | ans=0; |
22 | dfs(m,11,n); |
23 | cout<<ans<<endl; |
24 | } |
25 | return 0; |
26 | } |
377 会拆数
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long dp[128][128]; |
5 | |
6 | void init(){ |
7 | for (int i=1;i<=120;++i){ |
8 | dp[i][0]=0; |
9 | for (int j=1;j<i;++j){ |
10 | dp[i][j]=dp[i-j][j]+dp[i][j-1]; |
11 | } |
12 | dp[i][i]=dp[i][i-1]+1; |
13 | for (int j=i+1;j<=120;++j){ |
14 | dp[i][j]=dp[i][i]; |
15 | } |
16 | } |
17 | return; |
18 | } |
19 | |
20 | int main(){ |
21 | init(); |
22 | int x; |
23 | while (cin>>x){ |
24 | cout<<dp[x][x]<<endl; |
25 | } |
26 | // for (int i=1;i<=120;++i){ |
27 | // cout<<dp[i][i]<<' '; |
28 | // } |
29 | return 0; |
30 | } |
378 XX和YY的一堆数字
Language: C++
Time: 224ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,ans,cur,cnt; |
6 | scanf("%d",&n); |
7 | ans=-1;cnt=0; |
8 | while (n--){ |
9 | scanf("%d",&cur); |
10 | if (ans==cur) ++cnt; |
11 | else{ |
12 | if (cnt==0) ans=cur; |
13 | else --cnt; |
14 | } |
15 | } |
16 | printf("%d\n",ans); |
17 | // main(); |
18 | return 0; |
19 | } |
379 水题
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | int num[100]; |
7 | ll dp[100]; |
8 | |
9 | ll dfs(int p,bool uplimit,bool one){ |
10 | if (p==-1){ |
11 | return 1; |
12 | } |
13 | if (!uplimit && !one && dp[p]!=-1) return dp[p]; |
14 | ll ret=0; |
15 | int up=uplimit?num[p]:1; |
16 | for (int i=up;i>=0;--i){ |
17 | if (i==1&&one) continue; |
18 | ret+=dfs(p-1,uplimit&&i==up,i==1); |
19 | } |
20 | if (!uplimit && !one) dp[p]=ret; |
21 | return ret; |
22 | } |
23 | |
24 | ll solve (ll x){ |
25 | int len=0; |
26 | while (x){ |
27 | num[len++]=x&1; |
28 | x>>=1; |
29 | } |
30 | return dfs(len-1,true,false); |
31 | } |
32 | |
33 | int main(){ |
34 | ll x; |
35 | memset(dp,-1,sizeof(dp)); |
36 | while (~scanf("%lld",&x)){ |
37 | printf("%lld\n",solve(x)); |
38 | } |
39 | return 0; |
40 | } |
386 csl的签到题
Language: C++
Time: 32ms
1 |
|
2 | using namespace std; |
3 | |
4 | const long long mod=1000000007; |
5 | long long ans[100010]; |
6 | |
7 | void init(){ |
8 | ans[0]=1;ans[1]=1; |
9 | for (int i=2;i<=100000;++i){ |
10 | ans[i]=(ans[i-1]*i)%mod; |
11 | } |
12 | } |
13 | |
14 | int main(){ |
15 | init(); |
16 | int T,n; |
17 | scanf("%d",&T); |
18 | while(T--){ |
19 | scanf("%d",&n); |
20 | printf("%lld\n",ans[n]); |
21 | } |
22 | return 0; |
23 | } |
394 Candy装袋
Language: C++
Time: 76ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int p,v; |
6 | bool operator <(const struct node & qmh) const{ |
7 | if (v==qmh.v) return p>qmh.p; |
8 | return v<qmh.v; |
9 | } |
10 | }; |
11 | |
12 | priority_queue <node> que; |
13 | int ans[100000]; |
14 | |
15 | int main(){ |
16 | int n,x; |
17 | struct node cur; |
18 | scanf("%d",&n); |
19 | for (int i=0;i<n;++i){ |
20 | scanf("%d",&x); |
21 | que.push((node){i,x}); |
22 | cur=que.top();que.pop(); |
23 | --cur.v;que.push(cur); |
24 | } |
25 | while (!que.empty()){ |
26 | cur=que.top();que.pop(); |
27 | ans[cur.p]=cur.v; |
28 | } |
29 | for (int i=0;i<n;++i){ |
30 | printf("%d",ans[i]); |
31 | if (i!=n-1) putchar(' '); |
32 | } |
33 | return 0; |
34 | } |
395 Bachelor排序
Language: C++
Time: 428ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct stu{ |
5 | char name[50]; |
6 | int in; |
7 | int ans; |
8 | }a[300300]; |
9 | |
10 | bool cmp1(stu a,stu b){ |
11 | return strcmp(a.name,b.name)>0?false:true; |
12 | } |
13 | |
14 | //bool cmp2(stu a,stu b){ |
15 | // return a.in<b.in; |
16 | //} |
17 | |
18 | int ans[300300]; |
19 | |
20 | int main(){ |
21 | int n; |
22 | scanf("%d",&n); |
23 | for (int i=0;i<n;++i){ |
24 | scanf("%s",a[i].name); |
25 | a[i].in=i+1; |
26 | } |
27 | sort(a,a+n,cmp1); |
28 | for (int i=0;i<n;++i){ |
29 | a[i].ans=i+1; |
30 | } |
31 | for (int i=0;i<n;++i){ |
32 | ans[a[i].in]=a[i].ans; |
33 | } |
34 | for (int i=1;i<=n;++i){ |
35 | printf("%d\n",ans[i]); |
36 | } |
37 | return 0; |
38 | } |
401 csl的帽色判定
Language: C++
Time: 32ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[100100]; |
5 | |
6 | int main(){ |
7 | int n,q,tmp1,tmp2; |
8 | while (~scanf("%d%d",&n,&q)){ |
9 | for (int i=0;i<n;++i){ |
10 | scanf("%d",&a[i]); |
11 | } |
12 | while (q--){ |
13 | scanf("%d%d",&tmp1,&tmp2); |
14 | if (a[tmp1]==a[tmp2]) printf("yes\n"); |
15 | else printf("no\n"); |
16 | } |
17 | } |
18 | return 0; |
19 | } |
402 纸币
Language: C++
Time: 20ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[1010]; |
5 | |
6 | int main(){ |
7 | int n; |
8 | while (~scanf("%d",&n)){ |
9 | if (n==0){ |
10 | printf("0\n"); |
11 | continue; |
12 | } |
13 | for (int i=0;i<n;++i){ |
14 | scanf("%d",&a[i]); |
15 | } |
16 | sort(a,a+n); |
17 | int ans=1; |
18 | for (int i=0;i<n;++i){ |
19 | if (ans<a[i]) break; |
20 | ans+=a[i]; |
21 | } |
22 | printf("%d\n",ans); |
23 | } |
24 | return 0; |
25 | } |
403 只出现一次的字符
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | string a; |
5 | map <char,int> mmp; |
6 | |
7 | int main(){ |
8 | int T,len; |
9 | bool flag; |
10 | cin>>T;getchar(); |
11 | while (T--){ |
12 | getline(cin,a); |
13 | len=a.length(); |
14 | mmp.clear(); |
15 | for (int i=0;i<len;++i){ |
16 | ++mmp[a[i]]; |
17 | } |
18 | flag=true; |
19 | for (int i=0;i<len;++i){ |
20 | if (mmp[a[i]]==1){ |
21 | flag=false; |
22 | printf("%c\n",a[i]); |
23 | break; |
24 | } |
25 | } |
26 | if (flag) printf("*\n"); |
27 | } |
28 | return 0; |
29 | } |
404 csl的暴走
Language: C++
Time: 292ms
1 |
|
2 | using namespace std; |
3 | |
4 | vector<int> net[100233]; |
5 | bool vis[100233]; |
6 | int ans; |
7 | |
8 | void dfs(int p,int d){ |
9 | vis[p]=true; |
10 | ans=max(ans,d); |
11 | for (auto it=net[p].begin();it!=net[p].end();++it){ |
12 | if (!vis[*it]) dfs(*it,d+1); |
13 | } |
14 | } |
15 | |
16 | int main(){ |
17 | int n,x,y; |
18 | while (~scanf("%d",&n)){ |
19 | for (int i=0;i<n+10;++i){ |
20 | net[i].clear(); |
21 | } |
22 | for (int i=0;i<n-1;++i){ |
23 | scanf("%d%d",&x,&y); |
24 | net[x].push_back(y); |
25 | net[y].push_back(x); |
26 | } |
27 | memset(vis,false,sizeof(vis)); |
28 | ans=0; |
29 | dfs(0,0); |
30 | printf("%d\n",ans); |
31 | } |
32 | return 0; |
33 | } |
408 csl被拐走了!
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,y,z,t; |
6 | }; |
7 | |
8 | int m,n,o; |
9 | queue<node> que; |
10 | char maze[32][32][32]; |
11 | bool vis[32][32][32]; |
12 | int d[][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1}; |
13 | |
14 | inline bool can_vis(int x,int y,int z){ |
15 | if (x<0||x>=m) return false; |
16 | if (y<0||y>=n) return false; |
17 | if (z<0||z>=o) return false; |
18 | return true; |
19 | } |
20 | |
21 | void bfs(){ |
22 | node cur; |
23 | int curx,cury,curz; |
24 | int nxtx,nxty,nxtz; |
25 | while (!que.empty()){ |
26 | cur=que.front();que.pop(); |
27 | curx=cur.x;cury=cur.y;curz=cur.z; |
28 | if (maze[curx][cury][curz]=='E'){ |
29 | printf("Escaped in %d minute(s).\n",cur.t); |
30 | return; |
31 | } |
32 | for (int i=0;i<6;++i){ |
33 | nxtx=cur.x+d[i][0]; |
34 | nxty=cur.y+d[i][1]; |
35 | nxtz=cur.z+d[i][2]; |
36 | if (!can_vis(nxtx,nxty,nxtz)) continue; |
37 | if (maze[nxtx][nxty][nxtz]=='#') continue; |
38 | if (vis[nxtx][nxty][nxtz]) continue; |
39 | vis[nxtx][nxty][nxtz]=true; |
40 | que.push((node){nxtx,nxty,nxtz,cur.t+1}); |
41 | } |
42 | } |
43 | printf("Trapped!\n"); |
44 | } |
45 | |
46 | int main(){ |
47 | while (~scanf("%d%d%d",&m,&n,&o)){ |
48 | while (!que.empty()) que.pop(); |
49 | memset(vis,false,sizeof(vis)); |
50 | getchar(); |
51 | if (m==0&&n==0&&o==0) break; |
52 | for (int i=0;i<m;++i){ |
53 | for (int j=0;j<n;++j){ |
54 | for (int k=0;k<o;++k){ |
55 | maze[i][j][k]=getchar(); |
56 | if (maze[i][j][k]=='S'){ |
57 | vis[i][j][k]=true; |
58 | que.push((node){i,j,k,0}); |
59 | } |
60 | } |
61 | getchar(); |
62 | } |
63 | getchar(); |
64 | getchar(); |
65 | } |
66 | bfs(); |
67 | } |
68 | return 0; |
69 | } |
410 黑白图像直方图
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[105]; |
5 | |
6 | int main(){ |
7 | int m,n,x; |
8 | while (~scanf("%d%d",&m,&n)){ |
9 | memset(a,0,sizeof(a)); |
10 | for (int i=0;i<m;++i){ |
11 | for (int j=0;j<n;++j){ |
12 | scanf("%d",&x); |
13 | a[j]+=x; |
14 | } |
15 | } |
16 | for (int i=0;i<n;++i){ |
17 | printf("%d",a[i]); |
18 | if (i!=n-1) putchar(' '); |
19 | } |
20 | putchar('\n'); |
21 | } |
22 | |
23 | return 0; |
24 | } |
411 神无月排位赛
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | struct node{ |
6 | int score,lv,inwin,inloose; |
7 | bool in; |
8 | void init(){ |
9 | score=lv=0; |
10 | in=false; |
11 | } |
12 | void update(bool win){ |
13 | if (win){ |
14 | if (in){ |
15 | ++inwin; |
16 | if (inwin>=2){ |
17 | ++lv; |
18 | score=0; |
19 | in=false; |
20 | } |
21 | } |
22 | else{ |
23 | score+=10; |
24 | if (score>=100&&lv!=4){ |
25 | in=true; |
26 | inwin=inloose=0; |
27 | } |
28 | } |
29 | } |
30 | else{//loose |
31 | if (in){ |
32 | ++inloose; |
33 | if (inloose>=2){ |
34 | score=60; |
35 | in=false; |
36 | } |
37 | } |
38 | else{ |
39 | score=max(0,score-5); |
40 | } |
41 | } |
42 | } |
43 | void out(){ |
44 | switch(lv){ |
45 | case 0:putchar('D');break; |
46 | case 1:putchar('C');break; |
47 | case 2:putchar('B');break; |
48 | case 3:putchar('A');break; |
49 | case 4:putchar('S');break; |
50 | } |
51 | putchar('\n'); |
52 | } |
53 | }; |
54 | |
55 | int main(){ |
56 | int n,x; |
57 | node a; |
58 | while (~scanf("%d",&n)){ |
59 | a.init(); |
60 | while (n--){ |
61 | scanf("%d",&x); |
62 | a.update(x); |
63 | } |
64 | a.out(); |
65 | } |
66 | return 0; |
67 | } |
412 I Love ces
Language: C++
Time: 12ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[100100]; |
5 | int i,l,o,v,e,c,s; |
6 | |
7 | int main(){ |
8 | while (~scanf("%s",a)){ |
9 | i=l=o=v=e=c=s=0; |
10 | int len=strlen(a); |
11 | for (int ii=0;ii<len;++ii){ |
12 | if (a[ii]>='A'&&a[ii]<='Z') a[ii]=a[ii]-'A'+'a'; |
13 | if (a[ii]=='i')++i; |
14 | if (a[ii]=='l')++l; |
15 | if (a[ii]=='o')++o; |
16 | if (a[ii]=='v')++v; |
17 | if (a[ii]=='e')++e; |
18 | if (a[ii]=='c')++c; |
19 | if (a[ii]=='s')++s; |
20 | } |
21 | printf("%d\n",min(i,min(l,min(o,min(v,min(e/2,min(c,s))))))); |
22 | } |
23 | return 0; |
24 | } |
413 添加好友
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | const ll MOD=1000000007; |
6 | |
7 | ll quick_pow(ll a, ll n){ |
8 | ll ans = 1; |
9 | while (n){ |
10 | if (n & 1) ans = ans*a%MOD; |
11 | a = a*a%MOD; |
12 | n >>= 1; |
13 | } |
14 | return ans; |
15 | } |
16 | |
17 | |
18 | int main(){ |
19 | ll n; |
20 | while (~scanf("%lld",&n)){ |
21 | printf("%lld\n",(quick_pow(2LL,n)+MOD-1)%MOD); |
22 | } |
23 | return 0; |
24 | } |
414 字符串进制转换
Language: Java
Time: 108ms
1 | import java.util.*; |
2 | import java.math.*; |
3 | |
4 | public class Main { |
5 | public static void main(String[] args) { |
6 | Scanner s=new Scanner(System.in); |
7 | while (s.hasNext()) { |
8 | String[] aa=s.nextLine().split(" "); |
9 | String a=aa[0]; |
10 | int x=Integer.valueOf(aa[1]); |
11 | BigInteger sum=new BigInteger("0"); |
12 | int tmp; |
13 | for (int i=0;i<a.length();++i) { |
14 | tmp=(int)(a.charAt(i))-(int)('a'); |
15 | sum=sum.multiply(BigInteger.valueOf(26)).add(BigInteger.valueOf(tmp)); |
16 | //System.out.println(i+" "+tmp+" "+sum); |
17 | } |
18 | System.out.println(sum.toString(x)); |
19 | } |
20 | s.close(); |
21 | } |
22 | } |
420 购买装备
Language: C++
Time: 208ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,y; //x=money;y=shu xin; |
6 | bool operator< (const node& qmh)const{ |
7 | if (x!=qmh.x) return x<qmh.x; |
8 | return y<qmh.y; |
9 | } |
10 | }; |
11 | |
12 | node a[100100]; |
13 | int m,n,cnt; |
14 | bool check(int x){ |
15 | int tmp1=0,tmp2=m; |
16 | for (int i=0;i<n;++i){ |
17 | if (a[i].y<x) continue; |
18 | if (a[i].x>tmp2) break; |
19 | tmp2-=a[i].x; |
20 | ++tmp1; |
21 | } |
22 | if (tmp1<cnt) return false; |
23 | return true; |
24 | } |
25 | |
26 | int main(){ |
27 | int T; |
28 | scanf("%d",&T); |
29 | while (T--){ |
30 | scanf("%d%d",&n,&m); |
31 | for (int i=0;i<n;++i){ |
32 | scanf("%d%d",&a[i].y,&a[i].x); |
33 | } |
34 | sort(a,a+n); |
35 | int tmp=m;cnt=0; |
36 | for (int i=0;i<n;++i){ |
37 | if (a[i].x>tmp) break; |
38 | tmp-=a[i].x; |
39 | ++cnt; |
40 | } |
41 | int L=1,R=30001,ans=0; |
42 | while (L<=R){ |
43 | int mid=(L+R)>>1; |
44 | if (check(mid)){ |
45 | ans=mid; |
46 | L=mid+1; |
47 | } |
48 | else{ |
49 | R=mid-1; |
50 | } |
51 | } |
52 | printf("%d %d\n",cnt,ans); |
53 | } |
54 | return 0; |
55 | } |
430 最小调整代价
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[150]; |
5 | int dp[150][150]; |
6 | |
7 | int main(){ |
8 | int n,s; |
9 | while (~scanf("%d%d",&n,&s)){ |
10 | memset(dp,0,sizeof(dp)); |
11 | for (int i=1;i<=n;++i){ |
12 | scanf("%d",&a[i]); |
13 | } |
14 | for(int i=1;i<=n;++i){ //number a[1,i]; |
15 | for (int j=1;j<=100;++j){ //a[i] adjust to j; |
16 | dp[i][j]=100000000; |
17 | for (int k=-s;k<=s;++k){ |
18 | if (j+k<1||j+k>100) continue; |
19 | dp[i][j]=min(dp[i][j],dp[i-1][j+k]+abs(a[i]-j)); |
20 | } |
21 | } |
22 | } |
23 | // for (int i=1;i<=n;++i){ |
24 | // for (int j=1;j<=10;++j){ |
25 | // printf("%d ",dp[i][j]); |
26 | // } |
27 | // putchar('\n'); |
28 | // } |
29 | int ans=100000000; |
30 | for (int i=1;i<=100;++i){ |
31 | ans=min(ans,dp[n][i]); |
32 | } |
33 | printf("%d\n",ans); |
34 | } |
35 | return 0; |
36 | } |
431 跳跃游戏
Language: C++
Time: 664ms
1 |
|
2 | using namespace std; |
3 | |
4 | int n; |
5 | int a[1000000]; |
6 | bool vis[1000000]; |
7 | bool flag; |
8 | |
9 | void dfs(int x){ |
10 | if (x==n){ |
11 | flag=true; |
12 | return; |
13 | } |
14 | for (int i=a[x];i>0 && !flag;--i){ |
15 | if (vis[x+i]) continue; |
16 | vis[x+i]=true; |
17 | dfs(x+i); |
18 | } |
19 | } |
20 | |
21 | int main(){ |
22 | while (~scanf("%d",&n)){ |
23 | for (int i=1;i<=n;++i){ |
24 | scanf("%d",&a[i]); |
25 | } |
26 | memset(vis,false,sizeof(vis)); |
27 | flag=false; |
28 | dfs(1); |
29 | printf("%s\n",flag?"true":"false"); |
30 | } |
31 | return 0; |
32 | } |
434 滑动窗口的最大值
Language: C++
Time: 2464ms
1 |
|
2 | using namespace std; |
3 | |
4 | int que[1000100]; |
5 | long long a[1000100]; |
6 | |
7 | int main(){ |
8 | int n,k; |
9 | while (~scanf("%d%d",&n,&k)){ |
10 | for (int i=0;i<n;++i){ |
11 | scanf("%lld",&a[i]); |
12 | } |
13 | int l=0,r=0; |
14 | for (int i=0;i<n;++i){ |
15 | while (l<r){ |
16 | if (que[l]<=i-k) ++l; |
17 | else break; |
18 | } |
19 | while (l<r){ |
20 | if (a[que[r-1]]<=a[i]) --r; |
21 | else break; |
22 | } |
23 | que[r++]=i; |
24 | // cout<<l<<' '<<r<<endl; |
25 | // for (int j=l;j<r;++j){ |
26 | // cout<<que[j]<<' '; |
27 | // } |
28 | // cout<<endl; |
29 | if (i>=k-1){ |
30 | printf("%lld",a[que[l]]); |
31 | putchar(i==n-1?'\n':' '); |
32 | } |
33 | // cout<<endl; |
34 | } |
35 | } |
36 | return 0; |
37 | } |
435 多边形面积
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | const double eps=1e-6; |
4 |
|
5 |
|
6 | |
7 | struct point{ |
8 | double x,y; |
9 | point(double a=0,double b=0){x=a,y=b;} |
10 | point operator-(const point& b)const{return point(x-b.x,y-b.y);} |
11 | point operator+(const point& b)const{return point(x+b.x,y+b.y);} |
12 | bool operator==(point& b){return zero(x-b.x)&&zero(y-b.y);} |
13 | double operator*(const point& b)const{return x*b.x+y*b.y;} |
14 | double operator^(const point& b)const{return x*b.y-y*b.x;} |
15 | }; |
16 | |
17 | point p[1000]; |
18 | int n; |
19 | double area(){ |
20 | double res=0; |
21 | for (int i=0;i<n;++i){ |
22 | res+=(p[i]^p[(i+1)%n])/2; |
23 | } |
24 | return fabs(res); |
25 | } |
26 | |
27 | int main(){ |
28 | int kase=0; |
29 | while (~scanf("%d",&n)){ |
30 | for (int i=0;i<n;++i){ |
31 | scanf("%lf%lf",&p[i].x,&p[i].y); |
32 | } |
33 | printf("Case %d:%.1f\n",++kase,area()); |
34 | } |
35 | return 0; |
36 | } |
438 大学校区形状
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | const double eps = 1e-10; |
5 | |
6 |
|
7 |
|
8 | |
9 | struct point { |
10 | double x, y; |
11 | point(double a = 0, double b = 0) { |
12 | x = a, y = b; |
13 | } point operator-(const point& b) const { |
14 | return point(x - b.x, y - b.y); |
15 | } point operator+(const point& b) const { |
16 | return point(x + b.x, y + b.y); |
17 | } // 两点是否重合 |
18 | bool operator==(point& b) { |
19 | return zero(x - b.x) && zero(y - b.y); |
20 | } // 点积(以原点为基准) |
21 | double operator*(const point& b) const { |
22 | return x * b.x + y * b.y; // 叉积(以原点为基准) |
23 | } |
24 | double operator^(const point& b) const { |
25 | return x * b.y - y * b.x; // 绕P点逆时针旋转a弧度后的点 |
26 | } |
27 | point rotate(point b, double a) { |
28 | double dx, dy; |
29 | (*this - b).split(dx, dy); |
30 | double tx = dx * cos(a) - dy * sin(a); |
31 | double ty = dx * sin(a) + dy * cos(a); |
32 | return point(tx, ty) + b; |
33 | } // 点坐标分别赋值到a和b |
34 | void split(double& a, double& b) { |
35 | a = x, b = y; |
36 | } |
37 | }; |
38 | |
39 | int n; |
40 | point poly[12000]; |
41 | |
42 | bool isconvex() { |
43 | bool s[3]; |
44 | memset(s, 0, sizeof(s)); |
45 | for (int i = 0; i < n; i++) { |
46 | s[sgn((poly[(i + 1) % n] - poly[i]) ^ (poly[(i + 2) % n] - poly[i])) + 1] = 1; |
47 | if (s[0] && s[2]) |
48 | return 0; |
49 | } |
50 | return 1; |
51 | } |
52 | |
53 | int main() { |
54 | while (1){ |
55 | cin>>n; |
56 | if (n==0) break; |
57 | for (int i=0;i<n;++i){ |
58 | cin>>poly[i].x>>poly[i].y; |
59 | } |
60 | if (isconvex()){ |
61 | cout<<"convex"<<endl; |
62 | } |
63 | else{ |
64 | cout<<"concave"<<endl; |
65 | } |
66 | } |
67 | return 0; |
68 | } |
441 求n!的位数
Language: C++
Time: 72ms
1 |
|
2 | using namespace std; |
3 | |
4 | double a[1000100]; |
5 | |
6 | void init(){ |
7 | a[0]=0; |
8 | for (int i=1;i<=1000000;++i){ |
9 | a[i]=a[i-1]+(log10(i)); |
10 | } |
11 | } |
12 | |
13 | int main(){ |
14 | init(); |
15 | int x; |
16 | while (~scanf("%d",&x)){ |
17 | double ans=a[x]; |
18 | ans=ans-floor(ans); |
19 | printf("%d\n",(int)pow(10,ans)); |
20 | } |
21 | return 0; |
22 | } |
442 最接近的三数之和
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[1000005]; |
5 | |
6 | int main(){ |
7 | int n,x; |
8 | int ans,cur; |
9 | int l,r; |
10 | while (~scanf("%d%d",&n,&x)){ |
11 | for (int i=0;i<n;++i){ |
12 | scanf("%d",&a[i]); |
13 | } |
14 | sort(a,a+n); |
15 | ans=1000000000; |
16 | for (int i=0;i<n-1;++i){ |
17 | l=i+1;r=n-1; |
18 | while (l<r){ |
19 | cur=a[i]+a[l]+a[r]; |
20 | if (abs(cur-x)<abs(ans-x)){ |
21 | ans=cur; |
22 | } |
23 | if (cur>x) --r; |
24 | else ++l; |
25 | } |
26 | } |
27 | printf("%d\n",ans); |
28 | } |
29 | return 0; |
30 | } |
443 谁是神射手?
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | long double a,b; |
5 | while (cin>>a>>b){ |
6 | b=(1.0-a)*b; |
7 | if (fabs(a-b)<1e-9) cout<<"equal\n"; |
8 | else if (a>b) cout<<"mwh\n"; |
9 | else cout<<"csl\n"; |
10 | } |
11 | return 0; |
12 | } |
444 最大矩形
Language: C++
Time: 80ms
1 |
|
2 | using namespace std; |
3 | |
4 | int maze[250][250]; |
5 | int dp[250][250]; |
6 | |
7 | int main(){ |
8 | int m,n; |
9 | int ans,cur; |
10 | int tmp; |
11 | while (~scanf("%d%d",&m,&n)){ |
12 | memset(dp,0,sizeof(dp)); |
13 | for (int i=1;i<=m;++i){ |
14 | for (int j=1;j<=n;++j){ |
15 | scanf("%1d",&maze[i][j]); |
16 | dp[i][j]=maze[i][j]?1+dp[i][j-1]:0; |
17 | } |
18 | } |
19 | // for (int i=1;i<=m;++i){ |
20 | // for (int j=1;j<=n;++j){ |
21 | // printf("%2d",dp[i][j]); |
22 | // } |
23 | // putchar('\n'); |
24 | // } |
25 | ans=0; |
26 | for (int i=1;i<=m;++i){ |
27 | for (int j=1;j<=n;++j){ |
28 | if (dp[i][j]){ |
29 | cur=dp[i][j]; |
30 | tmp=i+1; |
31 | while (tmp<=m && dp[tmp][j]){ |
32 | if (dp[tmp][j]<cur){ |
33 | ans=max(ans,cur*(tmp-i)); |
34 | // printf("1. (%d,%d)->(%d,%d)=%d\n",i,j,tmp-1,j,cur*(tmp-i)); |
35 | cur=dp[tmp][j]; |
36 | } |
37 | ++tmp; |
38 | } |
39 | ans=max(ans,cur*(tmp-i)); |
40 | // printf("2. (%d,%d)->(%d,%d)=%d\n",i,j,tmp-1,j,cur*(tmp-i)); |
41 | } |
42 | } |
43 | } |
44 | printf("%d\n",ans); |
45 | } |
46 | return 0; |
47 | } |
445 Leftmost Digit
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | int T;scanf("%d",&T); |
7 | double n; |
8 | while (T--){ |
9 | scanf("%lf",&n); |
10 | n=n*log10(n); |
11 | n=n-(ll)n; |
12 | n=pow(10,n); |
13 | printf("%d\n",(int)n); |
14 | } |
15 | return 0; |
16 | } |
446 兔子数列
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | const ll MOD=1e8+7; |
6 | const int maxn=5; |
7 | |
8 | struct mat{ |
9 | ll a[maxn][maxn]; |
10 | void init() { //初始化为单位矩阵 |
11 | memset(a, 0, sizeof(a)); |
12 | for (int i = 0; i<maxn; ++i) { |
13 | a[i][i] = 1; |
14 | } |
15 | } |
16 | void clear(){ //清空矩阵 |
17 | memset(a, 0, sizeof(a)); |
18 | } |
19 | mat operator *(const mat &b)const { //重载乘法 |
20 | mat c; c.clear(); |
21 | for (int i=0;i<maxn;i++) |
22 | for (int j=0;j<maxn;j++) |
23 | for (int k=0;k<maxn;k++) |
24 | c.a[i][j]=(c.a[i][j]+(a[i][k]*b.a[k][j])%MOD)%MOD; |
25 | return c; |
26 | } |
27 | }; |
28 | |
29 | mat quick_pow(mat a, ll n){ |
30 | mat ans; |
31 | ans.init(); |
32 | while (n){ |
33 | if (n & 1) ans = ans*a; |
34 | a = a*a; |
35 | n >>= 1; |
36 | } |
37 | return ans; |
38 | } |
39 | |
40 | int main(){ |
41 | mat a;a.clear(); |
42 | a.a[0][0]=1; |
43 | a.a[0][1]=1; |
44 | a.a[1][0]=1; |
45 | a.a[1][1]=0; |
46 | ll n; |
47 | while (cin>>n){ |
48 | --n; |
49 | mat b=quick_pow(a,n); |
50 | cout<<b.a[0][0]<<endl; |
51 | } |
52 | return 0; |
53 | } |
447 数列计算
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | const ll MOD=100000007; |
6 | const int maxn=4; |
7 | |
8 | struct mat { |
9 | ll a[maxn][maxn]; |
10 | void init() { |
11 | memset(a, 0, sizeof(a)); |
12 | for (int i = 0; i<maxn; ++i) { |
13 | a[i][i] = 1; |
14 | } |
15 | } |
16 | void clear() { |
17 | memset(a, 0, sizeof(a)); |
18 | } |
19 | mat operator *(const mat &b)const { |
20 | mat c; |
21 | c.clear(); |
22 | for (int i=0; i<maxn; i++) |
23 | for (int j=0; j<maxn; j++) |
24 | for (int k=0; k<maxn; k++) |
25 | c.a[i][j]=(c.a[i][j]+(a[i][k]*b.a[k][j])%MOD)%MOD; |
26 | return c; |
27 | } |
28 | }; |
29 | |
30 | mat quick_pow(mat a, ll n) { |
31 | mat ans; |
32 | ans.init(); |
33 | while (n) { |
34 | if (n & 1) |
35 | ans = ans*a; |
36 | a = a*a; |
37 | n >>= 1; |
38 | } |
39 | return ans; |
40 | } |
41 | |
42 | ll init1[maxn][maxn]= { |
43 | 3,2,1,0, |
44 | 1,0,0,0, |
45 | 0,0,3,1, |
46 | 0,0,0,3 |
47 | }; |
48 | |
49 | int main() { |
50 | ll n,ans; |
51 | mat a; |
52 | while (cin>>n) { |
53 | if (n==0){ |
54 | cout<<1<<endl; |
55 | continue; |
56 | } |
57 | if (n==1){ |
58 | cout<<2<<endl; |
59 | continue; |
60 | } |
61 | for (int i=0; i<maxn; ++i) { |
62 | for (int j=0; j<maxn; ++j) { |
63 | a.a[i][j]=init1[i][j]; |
64 | } |
65 | } |
66 | a=quick_pow(a,n-1); |
67 | ans=((a.a[0][0]*2%MOD+a.a[0][1])%MOD+a.a[0][2]*18%MOD)%MOD+a.a[0][3]*27%MOD; |
68 | cout<<ans%MOD<<endl; |
69 | } |
70 | return 0; |
71 | } |
448 置换的分解
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | bool vis[40]; |
5 | int a[40]; |
6 | |
7 | void dfs(int p,int x){ |
8 | if (x==p) return; |
9 | vis[x]=true; |
10 | // cout<<x<<' '; |
11 | dfs(p,a[x]); |
12 | } |
13 | |
14 | int main(){ |
15 | int n,ans; |
16 | while (~scanf("%d",&n)){ |
17 | memset(vis,false,sizeof(vis)); |
18 | ans=0; |
19 | for (int i=1;i<=n;++i){ |
20 | scanf("%d",&a[i]); |
21 | } |
22 | for (int i=1;i<=n;++i){ |
23 | if (!vis[i]){ |
24 | ++ans; |
25 | vis[i]=true; |
26 | // cout<<i<<' '; |
27 | dfs(i,a[i]); |
28 | // cout<<endl; |
29 | } |
30 | } |
31 | printf("%d\n",ans); |
32 | } |
33 | return 0; |
34 | } |
451 Counting Star
Language: C++
Time: 716ms
1 |
|
2 | using namespace std; |
3 | |
4 | long long ans[1000000]; |
5 | |
6 | int main(){ |
7 | int T,m,n,cnt,kase=0; |
8 | long long x,k; |
9 | scanf("%d",&T); |
10 | while (T--){ |
11 | scanf("%d%d%lld",&n,&m,&k); |
12 | ans[0]=cnt=0; |
13 | for (int i=1;i<=n;++i){ |
14 | scanf("%lld",&x); |
15 | ans[i]=ans[i-1]+x; |
16 | } |
17 | for (int i=m;i<=n;++i){ |
18 | if (ans[i]-ans[i-m]>=k) ++cnt; |
19 | } |
20 | printf("Case #%d: %d\n",++kase,cnt); |
21 | } |
22 | return 0; |
23 | } |
452 CSL’s School Card
Language: C++
Time: 128ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int p,x1,y1,x2,y2,t; |
6 | }; |
7 | |
8 | int m,n,endp; |
9 | int d[4][2]={-1,0,1,0,0,1,0,-1}; |
10 | char maze[10][10]; |
11 | bool vis[65536][5][5][5][5]; |
12 | queue <node> que; |
13 | |
14 | bool can_move(int x,int y){ |
15 | if (x<1 || x>m) return false; |
16 | if (y<1 || y>n) return false; |
17 | if (maze[x][y]=='X') return false; |
18 | return true; |
19 | } |
20 | |
21 | int update(int p,int x1,int y1,int x2,int y2){ |
22 | int temp=1<<((x1-1)*n+y1-1); |
23 | p=p|temp; |
24 | temp=1<<((x2-1)*n+y2-1); |
25 | p=p|temp; |
26 | return p; |
27 | } |
28 | |
29 | void get_end(){ |
30 | endp=0; |
31 | int temp; |
32 | for (int i=1;i<=m;++i){ |
33 | for (int j=1;j<=n;++j){ |
34 | if (maze[i][j]!='X'){ |
35 | temp=1<<((i-1)*n+j-1); |
36 | endp=endp|temp; |
37 | } |
38 | } |
39 | } |
40 | } |
41 | |
42 | void bfs(){ |
43 | struct node cur; |
44 | int nxtx1,nxty1,nxtx2,nxty2,nxtp; |
45 | while (!que.empty()){ |
46 | cur=que.front();que.pop(); |
47 | if (cur.p==endp){ |
48 | printf("%d\n",cur.t); |
49 | return; |
50 | } |
51 | // cout<<cur.p<<' '<<cur.x1<<' '<<cur.y1<<' '<<cur.x2<<' '<<cur.y2<<' '<<cur.t<<endl; |
52 | // system("pause"); |
53 | for (int i=0;i<4;++i){ |
54 | nxtx1=cur.x1+d[i][0]; |
55 | nxty1=cur.y1+d[i][1]; |
56 | if (!can_move(nxtx1,nxty1)) continue; |
57 | for (int j=0;j<4;++j){ |
58 | nxtx2=cur.x2+d[j][0]; |
59 | nxty2=cur.y2+d[j][1]; |
60 | if (!can_move(nxtx2,nxty2)) continue; |
61 | nxtp=update(cur.p,nxtx1,nxty1,nxtx2,nxty2); |
62 | if (!vis[nxtp][nxtx1][nxty1][nxtx2][nxty2]){ |
63 | vis[nxtp][nxtx1][nxty1][nxtx2][nxty2]=true; |
64 | que.push((node){update(cur.p,nxtx1,nxty1,nxtx2,nxty2),nxtx1,nxty1,nxtx2,nxty2,cur.t+1}); |
65 | } |
66 | } |
67 | } |
68 | } |
69 | printf("-1\n"); |
70 | } |
71 | |
72 | int main(){ |
73 | int T; |
74 | scanf("%d",&T); |
75 | for (int kase=1;kase<=T;++kase){ |
76 | scanf("%d%d",&m,&n); getchar(); |
77 | memset(vis,false,sizeof(vis)); |
78 | while (!que.empty()) que.pop(); |
79 | for (int i=1;i<=m;++i){ |
80 | for (int j=1;j<=n;++j){ |
81 | maze[i][j]=getchar(); |
82 | if (maze[i][j]=='S'){ |
83 | que.push((node){update(0,i,j,i,j),i,j,i,j,0}); |
84 | vis[(i-1)*n+j][i][j][i][j]=true; |
85 | } |
86 | } |
87 | getchar(); |
88 | } |
89 | get_end(); |
90 | // cout<<endp<<endl; |
91 | printf("Case #%d: ",kase); |
92 | bfs(); |
93 | } |
94 | |
95 | return 0; |
96 | } |
97 | |
98 | |
99 | //int main(){ |
100 | // m=4;n=4; |
101 | // int x1,y1,p=0; |
102 | // while (cin>>x1>>y1){ |
103 | // p=update(p,x1,y1,x1,y1); |
104 | // cout<<p<<endl; |
105 | // } |
106 | //} |
453 Lonelam’s Problem Set
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[20],n; |
5 | |
6 | bool solve(){ |
7 | if (a[1]>2 || a[2]<3) return false; |
8 | for (int i=2;i<n-1;++i){ |
9 | if (a[i]-a[i-1]>2) return false; |
10 | } |
11 | return true; |
12 | } |
13 | |
14 | int main(){ |
15 | int T,kase=0;scanf("%d",&T); |
16 | while (T--){ |
17 | scanf("%d",&n); |
18 | for (int i=0;i<n;++i){ |
19 | scanf("%d",&a[i]); |
20 | } |
21 | sort(a,a+n); |
22 | printf("Case #%d: %s\n",++kase,solve()?"Good Problem Set":"Bad Problem Set"); |
23 | } |
24 | return 0; |
25 | } |
455 Oneday’s Codeforces
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | int per[200][5]; |
5 | int num[5]; |
6 | int n; |
7 | |
8 | int getscore(int idx,bool is,int nn) |
9 | { |
10 | if(per[is][idx]==-1) return 0; |
11 | int solved=0; |
12 | if(per[0][idx]==-1||per[1][idx]==-1||per[0][idx]<=per[1][idx]) |
13 | { |
14 | solved=num[idx]; |
15 | } |
16 | else |
17 | { |
18 | solved=nn-n+num[idx]; |
19 | } |
20 | int maxn=500; |
21 | for(int i=2; i<=32; i*=2) |
22 | { |
23 | if(solved*i>nn) break; |
24 | else maxn+=500; |
25 | } |
26 | return maxn*(1.0-per[is][idx]/250.0); |
27 | } |
28 | int main() |
29 | { |
30 | int T; |
31 | scanf("%d",&T); |
32 | for (int kase=1;kase<=T;++kase){ |
33 | printf("Case #%d: ",kase); |
34 | scanf("%d",&n); |
35 | memset(num,0,sizeof(num)); |
36 | memset(per,0,sizeof(per)); |
37 | for(int i=0; i<n; i++) |
38 | { |
39 | for(int j=0; j<5; j++) |
40 | { |
41 | scanf("%d",&per[i][j]); |
42 | if(per[i][j]!=-1) num[j]++; |
43 | } |
44 | } |
45 | vector<int> v; |
46 | v.clear(); |
47 | v.push_back(n); |
48 | for(int i=0; i<5; i++) |
49 | { |
50 | for(int j=2; j<=32; j*=2) |
51 | if(num[i]*j>=n) v.push_back(num[i]*j); |
52 | } |
53 | sort(v.begin(),v.end()); |
54 | bool flag=true; |
55 | for(int i=0; i<v.size(); i++) |
56 | { |
57 | if(i&&v[i]==v[i-1]) continue; |
58 | int score1=0,score2=0; |
59 | for(int j=0; j<5; j++) |
60 | score1+=getscore(j,false,v[i]); |
61 | for(int j=0; j<5; j++) |
62 | score2+=getscore(j,true,v[i]); |
63 | if(score1>score2) |
64 | { |
65 | cout<<v[i]-n<<endl; |
66 | flag=false; |
67 | break; |
68 | } |
69 | } |
70 | if (flag) cout<<-1<<endl; |
71 | } |
72 | return 0; |
73 | } |
456 QAQ
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | char s[220]; |
6 | int Q[220]; |
7 | int A[220]; |
8 | |
9 | int main(){ |
10 | int T,len; |
11 | ll ans; |
12 | scanf("%d",&T); |
13 | for (int kase=1;kase<=T;++kase){ |
14 | scanf("%s",s); |
15 | len=strlen(s); |
16 | // memset(Q,0,sizeof(Q)); |
17 | // memset(A,0,sizeof(Q)); |
18 | // for (int i=len-1;i>=0;--i){ |
19 | // if (s[i]=='Q') |
20 | // Q[i]=Q[i+1]+1; |
21 | // else |
22 | // Q[i]=Q[i+1]; |
23 | // if (s[i]=='A') |
24 | // A[i]=A[i+1]+1; |
25 | // else |
26 | // A[i]=A[i+1]; |
27 | // } |
28 | ans=0; |
29 | for (int i=0;i<len;++i){//Q |
30 | if (s[i]!='Q') continue; |
31 | for (int j=i+1;j<len;++j){//A |
32 | if (s[j]!='A') continue; |
33 | for (int k=j+1;k<len;++k){ |
34 | if (s[k]=='Q') ++ans; |
35 | } |
36 | } |
37 | } |
38 | printf("Case #%d: %lld\n",kase,ans); |
39 | } |
40 | return 0; |
41 | } |
457 Triangle War
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | |
5 | |
6 | ll a[10]; |
7 | |
8 | int main(){ |
9 | int T; |
10 | scanf("%d",&T); |
11 | for (int kase=1;kase<=T;++kase){ |
12 | for (int i=0;i<3;++i){ |
13 | scanf("%lld",&a[i]); |
14 | } |
15 | sort(a,a+3); |
16 | ll tmp=a[0]*a[0]+a[1]*a[1]; |
17 | ll tmp2=a[2]*a[2]; |
18 | printf("Case #%d: %s\n",kase,(tmp==tmp2)?"Yes":"No"); |
19 | } |
20 | return 0; |
21 | } |
485 前k小数
Language: C++
Time: 568ms
1 |
|
2 | using namespace std; |
3 | |
4 | unsigned long long a[100100]; |
5 | int ans[100100]; |
6 | |
7 | int main(){ |
8 | int n,q; |
9 | while (~scanf("%d%d",&n,&q)){ |
10 | for (int i=0;i<n;++i){ |
11 | scanf("%llu",&a[i]); |
12 | } |
13 | sort(a,a+n); |
14 | ans[0]=0; |
15 | unsigned long long cur=a[0]; |
16 | int cnt=0; |
17 | for (int i=0;i<n;++i){ |
18 | if (cur!=a[i]){ |
19 | ans[++cnt]=i; |
20 | cur=a[i]; |
21 | } |
22 | } |
23 | ans[++cnt]=n; |
24 | for (int i=cnt+1;i<=n;++i) ans[i]=ans[cnt]; |
25 | // for (int i=1;i<=n;++i){ |
26 | // printf("%d ",ans[i]); |
27 | // } |
28 | // putchar('\n'); |
29 | int tmp; |
30 | while (q--){ |
31 | scanf("%d",&tmp); |
32 | printf("%d\n",ans[tmp]); |
33 | } |
34 | } |
35 | return 0; |
36 | } |
487 TSL数
Language: C++
Time: 884ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | int num[100]; |
7 | ll dp[13][100][1030]; |
8 | |
9 | ll dfs(int B,int p,bool uplimit,bool zero,int cur){ |
10 | if (p==-1){ |
11 | if (cur==0) return 1; |
12 | return 0; |
13 | } |
14 | if (!uplimit && !zero && dp[B][p][cur]!=-1) return dp[B][p][cur]; |
15 | ll ret=0; |
16 | int up=uplimit?num[p]:B-1; |
17 | for (int i=up;i>=0;--i){ |
18 | if (zero && i==0) ret+=dfs(B,p-1,uplimit&&i==up,true,cur); |
19 | else ret+=dfs(B,p-1,uplimit&&i==up,false,(cur&(1<<i))?(cur&(~(1<<i))):(cur|(1<<i))); |
20 | } |
21 | if (!uplimit && !zero) dp[B][p][cur]=ret; |
22 | return ret; |
23 | } |
24 | |
25 | ll solve(ll x,int B){ |
26 | int len=0; |
27 | while (x){ |
28 | num[len++]=x%B; |
29 | x/=B; |
30 | } |
31 | return dfs(B,len-1,true,true,0); |
32 | } |
33 | |
34 | int main(){ |
35 | int T,B; |
36 | ll L,R,ans1,ans2; |
37 | scanf("%d",&T); |
38 | memset(dp,-1,sizeof(dp)); |
39 | while (T--){ |
40 | scanf("%d%lld%lld",&B,&L,&R); |
41 | ans1=solve(L-1,B); |
42 | ans2=solve(R,B); |
43 | printf("%lld\n",ans2-ans1); |
44 | } |
45 | return 0; |
46 | } |
488 从来没见过这么裸的区间更新
Language: C++
Time: 4068ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 |
|
7 | |
8 | const int maxn=1e5+10; |
9 | |
10 | //可改struct node |
11 | long long sum[maxn*4]; |
12 | long long lazy[maxn*4]; |
13 | |
14 | //更新完子节点pushup 后序递归 |
15 | //维护的内容必须满足a[x,y]=a[x,i]某种操作a[i+1,y] |
16 | void pushup(int rt) { |
17 | sum[rt]=sum[lson]+sum[rson]; |
18 | } |
19 | |
20 | //查改lson,rson点前pushdown rt 先序递归 |
21 | //查改rt是不需要pushdown的 |
22 | //所以叶子节点也有lazy更新但不可能用上 |
23 | //仔细想想lazy是否有可叠加性 |
24 | //lson长len-(len>>1),rson长len>>1 |
25 | void pushdown(int rt,int len) { |
26 | if(lazy[rt]!=0) { |
27 | lazy[lson]+=lazy[rt]; |
28 | lazy[rson]+=lazy[rt]; |
29 | sum[lson]+=lazy[rt]*(len-(len>>1)); |
30 | sum[rson]+=lazy[rt]*(len>>1); |
31 | lazy[rt]=0; |
32 | } |
33 | } |
34 | |
35 | //init |
36 | void build(int L,int R,int rt) { |
37 | lazy[rt]=0; |
38 | if(L==R) { |
39 | scanf("%lld",&sum[rt]); |
40 | return ; |
41 | } |
42 | int mid=(L+R)>>1; |
43 | build(Lson); |
44 | build(Rson); |
45 | pushup(rt); |
46 | } |
47 | |
48 | |
49 | void update(int l,int r,long long val,int L,int R,int rt) { |
50 | if(l<=L&&r>=R) { |
51 | //此处只需管好rt自己 |
52 | sum[rt]+=val*(R-L+1); |
53 | lazy[rt]+=val; |
54 | return ; |
55 | } |
56 | pushdown(rt,R-L+1); |
57 | int mid=(L+R)>>1; |
58 | if(l<=mid) |
59 | update(l,r,val,Lson); |
60 | if(r>mid) |
61 | update(l,r,val,Rson); |
62 | pushup(rt); |
63 | } |
64 | |
65 | |
66 | long long query(int l,int r,int L,int R,int rt) { |
67 | if(l<=L&&r>=R) { |
68 | return sum[rt]; |
69 | } |
70 | pushdown(rt,R-L+1); |
71 | int mid=(L+R)>>1; |
72 | long long res=0; |
73 | if(l<=mid) |
74 | res+=query(l,r,Lson); |
75 | if(r>mid) |
76 | res+=query(l,r,Rson); |
77 | return res; |
78 | } |
79 | |
80 | |
81 | int main() { |
82 | int n,T,x,y; |
83 | long long val; |
84 | while(~scanf("%d%d",&n,&T)){ |
85 | build(1,n,1); |
86 | while (T--){ |
87 | scanf("%d%d%lld",&x,&y,&val); |
88 | update(x,y,val,1,n,1); |
89 | } |
90 | for (int i=1;i<=n;++i){ |
91 | printf("%lld",query(i,i,1,n,1)); |
92 | if (i==n) putchar('\n'); |
93 | else putchar(' '); |
94 | } |
95 | } |
96 | return 0; |
97 | } |
496 喵神的股票
Language: C++
Time: 1224ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[1000100]; |
5 | int b[1000100]; |
6 | |
7 | int main(){ |
8 | int n,maxn; |
9 | long long ans; |
10 | while (~scanf("%d",&n)){ |
11 | for (int i=1;i<=n;++i){ |
12 | scanf("%d",&a[i]); |
13 | } |
14 | a[n+1]=105; |
15 | ans=maxn=0; |
16 | for (int i=n;i>=1;--i){ |
17 | if (a[i]<maxn) ans+=(maxn-a[i]); |
18 | if (a[i]>maxn) maxn=a[i]; |
19 | } |
20 | printf("%d\n",ans); |
21 | } |
22 | return 0; |
23 | } |
501 A Prosperous Lot
Language: C++
Time: 620ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef long long ll; |
5 | |
6 | int num[20]; |
7 | ll dp[38][20][38]; |
8 | int cnm[]={1,0,0,0,1,0,1,0,2,1}; |
9 | |
10 | ll dfs(const int &k,int p,int quan,bool uplimit,bool zero){ |
11 | if (p==-1){ |
12 | if (quan==k) return 1; |
13 | return 0; |
14 | } |
15 | if (!uplimit && !zero && dp[k][p][quan]!=-1) return dp[k][p][quan]; |
16 | ll ret=0; |
17 | int up=uplimit?num[p]:9; |
18 | for (int i=up;i>=0;--i){ |
19 | ret+=dfs(k,p-1,quan+((i==0&&zero)?0:cnm[i]),uplimit&&i==up,zero&&i==0); |
20 | } |
21 | if (!uplimit && !zero) dp[k][p][quan]=ret; |
22 | return ret; |
23 | } |
24 | |
25 | ll solve(ll x,int k){ |
26 | int p=0; |
27 | while (x){ |
28 | num[p++]=x%10; |
29 | x/=10; |
30 | } |
31 | return dfs(k,p-1,0,true,true); |
32 | } |
33 | |
34 | int main(){ |
35 | memset(dp,-1,sizeof(dp)); |
36 | int T,k; |
37 | ll L,R,ansL,ansR; |
38 | scanf("%d",&T); |
39 | while (T--){ |
40 | scanf("%lld%lld%d",&L,&R,&k); |
41 | ansL=solve(L-1,k); |
42 | ansR=solve(R,k); |
43 | printf("%lld\n",ansR-ansL); |
44 | } |
45 | return 0; |
46 | } |
502 明7暗7加强版
Language: C++
Time: 1796ms
1 |
|
2 | using namespace std; |
3 | |
4 | int ansa,d; |
5 | int base[10]; |
6 | int dp[15][10][2]; |
7 | int num[10]; |
8 | |
9 | int dfs(int p,int x,bool tag,bool limit){ |
10 | if (p==-1){ |
11 | if (x==0||tag) return 1; |
12 | return 0; |
13 | } |
14 | if (!limit && dp[p][x][tag]!=-1) return dp[p][x][tag]; |
15 | int ret=0; |
16 | for (int i=limit?num[p]:9;i>=0;--i){ |
17 | if (i==7) ret+=dfs(p-1,x,true,limit&&i==num[p]); |
18 | else ret+=dfs(p-1,(x+i*base[p])%7,tag,limit&&i==num[p]); |
19 | } |
20 | if (!limit) dp[p][x][tag]=ret; |
21 | return ret; |
22 | } |
23 | |
24 | int solve(int x){ |
25 | int len=0; |
26 | while (x){ |
27 | num[len++]=x%10; |
28 | x/=10; |
29 | } |
30 | return dfs(len-1,0,false,true); |
31 | } |
32 | |
33 | bool check(int x){ |
34 | int ansb=solve(x); |
35 | if (ansb-ansa>=d) return true; |
36 | return false; |
37 | } |
38 | |
39 | void init(){ |
40 | base[0]=1; |
41 | for (int i=1;i<10;++i){ |
42 | base[i]=base[i-1]*10%7; |
43 | } |
44 | memset(dp,-1,sizeof(dp)); |
45 | } |
46 | |
47 | int main(){ |
48 | int a;init(); |
49 | while (~scanf("%d%d",&a,&d)){ |
50 | ansa=solve(a); |
51 | int L=a,R=1000000000,mid,ans=-1; |
52 | while (L<=R){ |
53 | mid=(L+R)>>1; |
54 | if (check(mid)){ |
55 | ans=mid; |
56 | R=mid-1; |
57 | } |
58 | else{ |
59 | L=mid+1; |
60 | } |
61 | } |
62 | printf("%d\n",ans); |
63 | } |
64 | return 0; |
65 | } |
504 小Y与二进制
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int n,ans1=0,ans0=0; |
6 | scanf("%d",&n); |
7 | if (n==0){ |
8 | printf("0 1"); |
9 | return 0; |
10 | } |
11 | while (n){ |
12 | if ((n|1)==n) ++ans1; |
13 | else ++ans0; |
14 | n>>=1; |
15 | } |
16 | printf("%d %d",ans1,ans0); |
17 | return 0; |
18 | } |
510 小Y吃苹果
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | //set<int> cur,nxt; |
5 | // |
6 | //void gao(){ |
7 | // nxt.clear(); |
8 | // for (auto &i:cur){ |
9 | // nxt.insert(i*2); |
10 | // nxt.insert(i*2+1); |
11 | // } |
12 | //} |
13 | // |
14 | //int main(){ |
15 | // cur.clear();nxt.clear(); |
16 | // cur.insert(1); |
17 | // for (int i=1;i<=20;++i){ |
18 | // gao(); |
19 | // printf("%d:%d\n",i,nxt.size()); |
20 | //// for (auto &i:nxt){ |
21 | //// printf("%d ",i); |
22 | //// } |
23 | //// printf("\n"); |
24 | // cur=nxt; |
25 | // } |
26 | // return 0; |
27 | //} |
28 | |
29 | int main(){ |
30 | int n; |
31 | cin>>n; |
32 | cout<<(1<<n)<<endl; |
33 | return 0; |
34 | } |
519 简单的暴力题
Language: C++
Time: 104ms
1 |
|
2 | using namespace std; |
3 | int main(){ |
4 | // freopen("3.in","r", stdin); |
5 | // freopen("33.out","w", stdout); |
6 | int T,n,k; |
7 | int a[11]; |
8 | scanf("%d",&T); |
9 | while (T--){ |
10 | scanf("%d%d",&n,&k); |
11 | for (int i=0;i<n;++i){ |
12 | scanf("%d",&a[i]); |
13 | } |
14 | if (n==1 && a[0]==0){ |
15 | if (k==1) printf("0\n"); |
16 | else printf("-1\n"); |
17 | continue; |
18 | } |
19 | // cout<<'?'; |
20 | sort(a,a+n,greater <int>()); |
21 | if (k==1){ |
22 | bool flag=true; |
23 | for (int i=0;i<n;++i){ |
24 | if (a[i]%3==0){ |
25 | flag=false; |
26 | printf("%d\n",a[i]); |
27 | break; |
28 | } |
29 | } |
30 | if (flag) printf("-1\n"); |
31 | continue; |
32 | } |
33 | // cout<<'?'; |
34 | int x=((k-2)*a[0])%3; |
35 | int ans; |
36 | bool flag=true; |
37 | for (int i=0;i<n && flag;++i){ |
38 | if (k==2 && a[i]==0) continue; |
39 | for (int j=0;j<n;++j){ |
40 | if ((a[i]*10+a[j]+x)%3==0){ |
41 | flag=false; |
42 | ans=a[i]*10+a[j]; |
43 | break; |
44 | } |
45 | } |
46 | } |
47 | if (!flag){ |
48 | for (int i=1;i<=k-2;++i){ |
49 | printf("%d",a[0]); |
50 | } |
51 | printf("%d\n",ans); |
52 | } |
53 | else{ |
54 | printf("-1\n"); |
55 | } |
56 | } |
57 | return 0; |
58 | } |
522 CSL的可并堆
Language: C++
Time: 260ms
1 |
|
2 | using namespace std; |
3 |
|
4 |
|
5 |
|
6 |
|
7 | |
8 | const int maxn=1e5+10; |
9 | |
10 | long long sum[maxn*4]; |
11 | int fa[maxn]; |
12 | int ra[maxn]; |
13 | int ans[maxn]; |
14 | int T,m,n,op; |
15 | bool flag; |
16 | |
17 | void pushup(int rt) { |
18 | sum[rt]=sum[lson]+sum[rson]; |
19 | } |
20 | |
21 | void build(int L,int R,int rt) { |
22 | if(L==R) { |
23 | if (!flag){ |
24 | sum[rt]=n; |
25 | flag=true; |
26 | } |
27 | else |
28 | sum[rt]=0; |
29 | return; |
30 | } |
31 | int mid=(L+R)>>1; |
32 | build(Lson); |
33 | build(Rson); |
34 | pushup(rt); |
35 | } |
36 | |
37 | void update(int p,int val,int L,int R,int rt) { |
38 | if(L==R) { |
39 | sum[rt]+=val; |
40 | return; |
41 | } |
42 | int mid=(L+R)>>1; |
43 | if(p<=mid) |
44 | update(p,val,Lson); |
45 | else |
46 | update(p,val,Rson); |
47 | pushup(rt); |
48 | } |
49 | |
50 | long long query(int p,int L,int R,int rt) { |
51 | if(L==R) { |
52 | return L; |
53 | } |
54 | int mid=(L+R)>>1; |
55 | int res=0; |
56 | if(p>sum[rson]) |
57 | res=query(p-sum[rson],Lson); |
58 | else |
59 | res=query(p,Rson); |
60 | return res; |
61 | } |
62 | |
63 | void init(int n){ |
64 | for (int i=1;i<=n;++i){ |
65 | fa[i]=i; |
66 | ra[i]=0; |
67 | ans[i]=1; |
68 | } |
69 | } |
70 | |
71 | int findfa(int x){ |
72 | if (fa[x]==x) return x; |
73 | return fa[x]=findfa(fa[x]); |
74 | } |
75 | |
76 | void unite(int x,int y){ |
77 | x=findfa(x); |
78 | y=findfa(y); |
79 | if (x==y) return; |
80 | // cout<<"--"<<ans[x]<<endl; |
81 | // cout<<"--"<<ans[y]<<endl; |
82 | // cout<<"++"<<ans[x]+ans[y]<<endl; |
83 | update(ans[y],-1,1,n,1); |
84 | update(ans[x],-1,1,n,1); |
85 | update(ans[x]+ans[y],1,1,n,1); |
86 | if (ra[x]<ra[y]){ |
87 | fa[x]=y; |
88 | ans[y]+=ans[x]; |
89 | ans[x]=-1; |
90 | } |
91 | else{ |
92 | fa[y]=x; |
93 | ans[x]+=ans[y]; |
94 | ans[y]=-1; |
95 | if (ra[x]==ra[y]) |
96 | ++ra[x]; |
97 | } |
98 | } |
99 | |
100 | |
101 | int main(){ |
102 | int x,y; |
103 | scanf("%d",&T); |
104 | while (T--){ |
105 | scanf("%d%d",&n,&m); |
106 | init(n);flag=false;build(1,n,1); |
107 | while (m--){ |
108 | scanf("%d",&op); |
109 | if (op==0){ |
110 | scanf("%d%d",&x,&y); |
111 | unite(x,y); |
112 | } |
113 | else{ |
114 | scanf("%d",&x); |
115 | printf("%d\n",query(x,1,n,1)); |
116 | } |
117 | } |
118 | } |
119 | return 0; |
120 | } |
523 合并序列
Language: C++
Time: 8ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct BigInt { //新建一个结构体,用来模仿大数类 |
5 | const static int mod = 10000; |
6 | const static int DLEN = 4; |
7 | int a[105],len; //长度 |
8 | BigInt(){ |
9 | memset(a,0,sizeof(a)); //初始化 |
10 | len = 1; |
11 | } |
12 | BigInt(const char s[]){ |
13 | memset(a,0,sizeof(a)); |
14 | int L = strlen(s); |
15 | len = L/DLEN; |
16 | if(L%DLEN) |
17 | len++; //将char数组转化为BigInt类型储存 |
18 | int index = 0; |
19 | for(int i = L-1;i >= 0;i -= DLEN){ |
20 | int t = 0; |
21 | int k = i - DLEN + 1; |
22 | if(k < 0)k = 0; |
23 | for(int j = k;j <= i;j++) |
24 | t = t*10 + s[j] - '0'; |
25 | a[index++] = t; |
26 | } |
27 | } |
28 | BigInt operator +(const BigInt &b)const{ //重构加法运算符 |
29 | BigInt res; |
30 | res.len = max(len,b.len); |
31 | for(int i = 0;i <= res.len;i++) |
32 | res.a[i] = 0; |
33 | for(int i = 0;i < res.len;i++){ |
34 | res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0); |
35 | res.a[i+1] += res.a[i]/mod; |
36 | res.a[i] %= mod; |
37 | } |
38 | if(res.a[res.len] > 0) |
39 | res.len++; |
40 | return res; |
41 | } |
42 | BigInt operator *(const BigInt &b)const{ //重构乘法运算符 |
43 | BigInt res; |
44 | for(int i = 0; i < len;i++){ |
45 | int up = 0; |
46 | for(int j = 0;j < b.len;j++){ |
47 | int temp = a[i]*b.a[j] + res.a[i+j] + up; |
48 | res.a[i+j] = temp%mod; |
49 | up = temp/mod; |
50 | } |
51 | if(up != 0) |
52 | res.a[i + b.len] = up; |
53 | } |
54 | res.len = len + b.len; |
55 | while(res.a[res.len - 1] == 0 &&res.len > 1) |
56 | res.len--; |
57 | return res; |
58 | } |
59 | void output(){ //由于没有输出的方式,添加输出的类 |
60 | printf("%d",a[len-1]); |
61 | for(int i = len-2;i >=0 ;i--) |
62 | printf("%04d",a[i]); |
63 | printf("\n"); |
64 | } |
65 | }; |
66 | |
67 | BigInt ans[1010]; |
68 | |
69 | void init(){ |
70 | ans[0]=ans[1]="1"; |
71 | for (int i=2;i<=1000;++i){ |
72 | ans[i]=ans[i-1]+ans[i-2]; |
73 | } |
74 | } |
75 | |
76 | int main(){ |
77 | init(); |
78 | int T,x;scanf("%d",&T); |
79 | while (T--){ |
80 | scanf("%d",&x); |
81 | ans[x].output(); |
82 | } |
83 | return 0; |
84 | } |
527 随机数种子
Language: Java
Time: 148ms
1 | import java.util.*; |
2 | import java.math.*; |
3 | |
4 | public class Main { |
5 | public static void main(String[] args) { |
6 | int n; |
7 | BigInteger a,b; |
8 | Scanner s=new Scanner(System.in); |
9 | n=s.nextInt(); |
10 | for (int i=0;i<n;++i) { |
11 | a=s.nextBigInteger(); |
12 | b=s.nextBigInteger(); |
13 | if (a.gcd(b).compareTo(BigInteger.ONE)==0) { |
14 | System.out.println("YES"); |
15 | } |
16 | else { |
17 | System.out.println("NO"); |
18 | } |
19 | } |
20 | s.close(); |
21 | } |
22 | } |
528 翻转子串
Language: C++
Time: 16ms
1 |
|
2 | using namespace std; |
3 | |
4 | char a[200100],b[200100]; |
5 | |
6 | int main(){ |
7 | int T,len,s1,s2;scanf("%d",&T); |
8 | bool flag; |
9 | while (T--){ |
10 | scanf("%s",a);scanf("%s",b); |
11 | len=strlen(a); |
12 | s1=-1;s2=-1; |
13 | for (int i=0;i<len;++i){ |
14 | if (a[i]!=b[i]){s1=i;break;} |
15 | } |
16 | if (s1==-1) {printf("YES\n");continue;} |
17 | for (int i=len-1;i>=0;--i){ |
18 | if (a[i]!=b[i]){s2=i;break;} |
19 | } |
20 | flag=true; |
21 | for (int i=0;i<=s2-s1;++i){ |
22 | if (a[s1+i]!=b[s2-i]){ |
23 | flag=false;break; |
24 | } |
25 | } |
26 | if (flag) printf("YES\n"); |
27 | else printf("NO\n"); |
28 | } |
29 | return 0; |
30 | } |
533 Arithmetic Sequence
Language: C++
Time: 1024ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | ll t,MAX,n; |
7 | // ios::sync_with_stdio(false); |
8 | // cin.tie(0); |
9 | cin>>t; |
10 | while(t--){ |
11 | MAX=0; |
12 | ll a; |
13 | ll num[3009]={0}; |
14 | cin>>n; |
15 | for(int i=0;i<n;++i){ |
16 | cin>>a; |
17 | if(a>MAX) MAX=a; |
18 | ++num[a]; |
19 | } |
20 | ll ans=0,flag1,flag2; |
21 | for(int i=1;i<=MAX;++i){ |
22 | for(int o=i;o<=MAX;++o){ |
23 | flag1=0; |
24 | flag2=1; |
25 | if(i==o){ |
26 | flag1=1; |
27 | flag2=3; |
28 | } |
29 | if(o==(o+(o-i))){ |
30 | flag2=6; |
31 | } |
32 | ans+=(num[i]*(num[o]-flag1)*( (num[o+(o-i)]-flag1*2>=0) ? (num[o+(o-i)]-2*flag1) : 0))/flag2; |
33 | } |
34 | } |
35 | cout<<ans<<endl; |
36 | } |
37 | return 0; |
38 | } |
534 Brilliant Color
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 | |
4 | int main(){ |
5 | int T; |
6 | scanf("%d",&T); |
7 | long long x,y; |
8 | while (T--){ |
9 | scanf("%lld%lld",&x,&y); |
10 | if (x<y) swap(x,y); |
11 | if (y<x){ |
12 | printf("%lld\n",(long long)ceil(sqrt(x*2-1))); |
13 | } |
14 | else{ |
15 | printf("%lld\n",(long long)ceil(sqrt(x*2))); |
16 | } |
17 | } |
18 | return 0; |
19 | } |
535 Can’t See the Blackboard
Language: C++
Time: 604ms
1 |
|
2 | |
3 | using namespace std; |
4 | |
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | |
26 | struct asd { |
27 | int x, y,ans; |
28 | }a[1000006]; |
29 | |
30 | int main() |
31 | { |
32 | int t; |
33 | cin >> t; |
34 | while (t--) |
35 | { |
36 | int n; |
37 | cin >> n; |
38 | for (int i = 1; i <= n; i++) |
39 | { |
40 | cin >> a[i].x; |
41 | a[i].y = i; |
42 | } |
43 | stack<asd > q; |
44 | for (int i = n; i >= 1; i--) |
45 | { |
46 | if (q.empty()) |
47 | { |
48 | q.push(a[n]); |
49 | a[n].ans = 0; |
50 | } |
51 | else |
52 | { |
53 | while (!q.empty() && a[i].x >= q.top().x) |
54 | q.pop(); |
55 | if (q.empty()) |
56 | { |
57 | q.push(a[i]); |
58 | a[i].ans = 0; |
59 | } |
60 | else |
61 | { |
62 | a[i].ans = q.top().y - a[i].y; |
63 | q.push(a[i]); |
64 | } |
65 | } |
66 | } |
67 | cout << a[1].ans; |
68 | for (int i = 2; i <= n; i++) |
69 | cout << ' ' << a[i].ans; |
70 | cout << endl; |
71 | } |
72 | return 0; |
73 | } |
537 Go Upstairs
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | ll a[55],n,t; |
7 | a[1]=1;a[2]=2;a[3]=4;a[4]=8; |
8 | for(int i=5;i<=52;++i){ |
9 | a[i]=a[i-1]+a[i-2]+a[i-3]+a[i-4]; |
10 | } |
11 | cin>>t; |
12 | while(t--){ |
13 | cin>>n; |
14 | cout<<a[n]<<endl; |
15 | } |
16 | return 0; |
17 | } |
538 Merge Coin
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | int main(){ |
6 | ll n,t,m; |
7 | cin>>t; |
8 | while(t--){ |
9 | cin>>n>>m; |
10 | if(n==1){ |
11 | cout<<"Yes"<<endl; |
12 | continue; |
13 | } |
14 | if(m==1){ |
15 | cout<<"No"<<endl; |
16 | continue; |
17 | } |
18 | while(n>=m){ |
19 | ll n1=n; |
20 | n=n%m; |
21 | n+=n1/m; |
22 | } |
23 | // cout<<n<<endl; |
24 | if(n%m==0||n==1){ |
25 | cout<<"Yes"<<endl; |
26 | }else{ |
27 | cout<<"No"<<endl; |
28 | } |
29 | } |
30 | return 0; |
31 | } |
539 Philosophy in Math
Language: C++
Time: 952ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | ll ans[1000]; |
6 | ll s1,s2; |
7 | ll a,b; |
8 | |
9 | ll ff(ll aaa){ |
10 | return ((((aaa%233)*(aaa%233))%233)*((aaa+1)%233))%233; |
11 | } |
12 | |
13 | ll fg(ll aaa){ |
14 | return ((((aaa%233)*(aaa%233))%233)*((aaa-1)%233))%233; |
15 | } |
16 | |
17 | void bfs(){ |
18 | queue<ll> q; |
19 | q.push(s1); |
20 | ans[s1]=1; |
21 | q.push(s2); |
22 | ans[s2]=1; |
23 | while(!q.empty()){ |
24 | ll nx=q.front(); |
25 | q.pop(); |
26 | if(nx==b) break; |
27 | ll t1=ff(nx); |
28 | if(ans[t1]==-1){ |
29 | q.push(t1); |
30 | ans[t1]=ans[nx]+1; |
31 | } |
32 | t1=fg(nx); |
33 | if(ans[t1]==-1){ |
34 | q.push(t1); |
35 | ans[t1]=ans[nx]+1; |
36 | } |
37 | } |
38 | } |
39 | |
40 | int main(){ |
41 | ll t; |
42 | cin>>t; |
43 | while(t--){ |
44 | for(ll i=0;i<1000;++i){ |
45 | ans[i]=-1; |
46 | } |
47 | cin>>a>>b; |
48 | if(a==b){ |
49 | cout<<0<<endl; |
50 | continue; |
51 | } |
52 | if(a<233){ |
53 | ans[a]=0; |
54 | } |
55 | if(b>=233){ |
56 | cout<<"-1"<<endl; |
57 | continue; |
58 | } |
59 | s1=ff(a); |
60 | s2=fg(a); |
61 | // cout<<s1<<" "<<s2<<endl; |
62 | bfs(); |
63 | cout<<ans[b]<<endl; |
64 | } |
65 | return 0; |
66 | } |
541 Thue-Morse Sequence
Language: C++
Time: 1ms
1 |
|
2 | using namespace std; |
3 |
|
4 | |
5 | ll a[100]; |
6 | |
7 | void init(){ |
8 | memset(a,0,sizeof(a)); |
9 | a[0]=1; |
10 | int i=0; |
11 | while (a[i]<=4e18){ |
12 | a[i+1]=a[i]*2; |
13 | ++i; |
14 | } |
15 | } |
16 | |
17 | int main(){ |
18 | init(); |
19 | int T; |
20 | scanf("%d",&T); |
21 | long long x,y; |
22 | while (T--){ |
23 | scanf("%lld%lld",&x,&y); |
24 | if (y!=0 && x<=log2(y)) { |
25 | printf("-1\n"); |
26 | continue; |
27 | } |
28 | int cnt=0; |
29 | ++y; |
30 | while (y!=1){ |
31 | for (int i=60;i>=0;--i){ |
32 | if (a[i]<y){ |
33 | y-=a[i]; |
34 | // printf("%d\n",y); |
35 | break; |
36 | } |
37 | } |
38 | ++cnt; |
39 | } |
40 | if (cnt%2==0){ |
41 | printf("0\n"); |
42 | } |
43 | else{ |
44 | printf("1\n"); |
45 | } |
46 | } |
47 | return 0; |
48 | } |
669 罗老师找乐子
Language: C++
Time: 48ms
1 |
|
2 | using namespace std; |
3 | |
4 | struct node{ |
5 | int x,y; |
6 | bool operator <(const node &b) const{ |
7 | if (x==b.x) return y<b.y; |
8 | return x>b.x; |
9 | } |
10 | }; |
11 | |
12 | bool cmp1(const node &a,const node &b){ |
13 | if (a.y==b.y) return a.x>b.x; |
14 | return a.y>b.y; |
15 | } |
16 | |
17 | int cur[11111]; |
18 | node fun[11111]; |
19 | priority_queue<node> que; |
20 | |
21 | int main(){ |
22 | int T,n,tmp1,tmp2,cur,ans; |
23 | scanf("%d",&T); |
24 | while (T--){ |
25 | scanf("%d",&n); |
26 | for (int i=0;i<n;++i){ |
27 | scanf("%d%d",&tmp1,&tmp2); |
28 | if (tmp2>n) tmp2=n; |
29 | fun[i]=(node){tmp1,tmp2}; |
30 | } |
31 | sort(fun,fun+n,cmp1); |
32 | while (!que.empty()) que.pop(); |
33 | cur=0;ans=0; |
34 | for (int i=0;i<n;++i){ |
35 | que.push(fun[i]); |
36 | cur+=fun[i].x; |
37 | while(que.size()>fun[i].y){ |
38 | cur-=que.top().x; |
39 | que.pop(); |
40 | } |
41 | ans=max(ans,cur); |
42 | } |
43 | ans=max(ans,cur); |
44 | cout<<ans<<endl; |
45 | } |
46 | return 0; |
47 | } |
48 | |
49 | /* |
50 | 1000 |
51 | 6 |
52 | 2 100 |
53 | 1 100 |
54 | 3 60 |
55 | 4 40 |
56 | 5 40 |
57 | 100 1 |
58 | */ |
675 秦神复习计划
Language: C++
Time: 144ms
1 |
|
2 | using namespace std; |
3 | |
4 | int a[1000100]; |
5 | int dp[1000100]; |
6 | bool s[1000100]; |
7 | |
8 | int main(){ |
9 | int n,ans=0; |
10 | scanf("%d",&n); |
11 | memset(s,false,sizeof(s)); |
12 | memset(dp,0,sizeof(dp)); |
13 | for (int i=1;i<=n;++i){ |
14 | scanf("%d",&a[i]); |
15 | } |
16 | for (int i=1;i<=n;++i){ |
17 | if (!s[i]){ |
18 | for (int j=2*i;j<=n;j+=i){ |
19 | if (!s[j] && a[j]<=(j/i)*a[i]) s[j]=true; |
20 | } |
21 | } |
22 | } |
23 | // for (int i=1;i<=n;++i){ |
24 | // if (s[i]) cout<<'.'; |
25 | // else cout<<a[i]; |
26 | // cout<<' '; |
27 | // } |
28 | // cout<<endl; |
29 | for (int i=1;i<=n;++i){ |
30 | if (s[i]) continue; |
31 | for (int j=i;j<=n;++j){ |
32 | dp[j]=max(dp[j],dp[j-i]+a[i]); |
33 | } |
34 | // for (int i=0;i<=n;++i){ |
35 | // cout<<dp[i]<<' '; |
36 | // } |
37 | // cout<<endl; |
38 | } |
39 | for (int i=0;i<=n;++i){ |
40 | ans=max(ans,dp[i]); |
41 | } |
42 | printf("%d\n",ans); |
43 | return 0; |
44 | } |
684 csl找妈妈I
Language: C++
Time: 52ms
1 |
|
2 | using namespace std; |
3 | typedef long long ll; |
4 | const ll mod=1e9+7; |
5 | |
6 | //int main(){ |
7 | // ll ans; |
8 | // for(ll n=1;n<=100;++n){ |
9 | // ans=0; |
10 | // for (ll i=1;i<=n;++i){ |
11 | // ans=(ans+(n-i+1)*(n-i+1)%mod*i%mod)%mod; |
12 | // } |
13 | // cout<<ans<<','; |
14 | // cout<<"oeisnb"<<endl; |
15 | // } |
16 | // return 0; |
17 | //} |
18 | |
19 | ll inv (ll a){ |
20 | if (a==1) return 1; |
21 | return inv(mod%a)*(mod-mod/a)%mod; |
22 | } |
23 | |
24 | int main(){ |
25 | int T; |
26 | ll tmp,ans; |
27 | scanf("%d",&T); |
28 | while (T--){ |
29 | scanf("%lld",&tmp);++tmp; |
30 | ans=(tmp*tmp%mod*(tmp*tmp%mod-1))%mod*inv(12); |
31 | ans%=mod; |
32 | printf("%lld\n",ans); |
33 | } |
34 | return 0; |
35 | } |
686 你好,2019!
Language: C++
Time: 4ms
1 |
|
2 | using namespace std; |
3 | |
4 | typedef int Lemon; |
5 | typedef string In_Year_Of_2019; |
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | |
26 | |
27 | In_Year_Of_2019 my_wish_is []= |
28 | { |
29 | " 2019年我要脱单呀喂喂喂!!! \n", |
30 | " 2019新的一年里门门4.0 \n", |
31 | " 棍网球社要在2019年招到更多的大一小哥哥 \n" |
32 | }; |
33 | |
34 | /* I am going to tell you a story */ |
35 | |
36 | Lemon is /* a good friend of T_T */ |
37 | {/* He masters a lot about magic and has a warm heart to his friends.*/ |
38 | On New_Years Eve Lemon /* whispered to */ T_T; |
39 | I_can make_your_wish come_true |
40 | |
41 | /* After a brief thought, T_T */ |
42 | responded_undoubtedly ( Lemon The ONLY_WISH I_Have is_For_Everyone ) |
43 | |
44 | AND my_wish_is ____ |
45 | |
46 | HAPPY NEW YEAR |
47 | |
48 | |
49 | } |