0%

shuoj部分题目代码

居然也有万把行了….

大家元旦快乐!!

因为有学弟要一些题目的题解,于是乎我想到一年多前写了个学校Online Judge(敏感时期需要校网访问)的爬虫,稍微改了改格式直接输出markdown语法,顺手就整理了这篇博客。

由于不少题都是非常年轻的时候写的,甚至我记得有个别题目测试数据有误。所以我不保证以下所有代码的可读性和性能,仅作备份留存之用。
学校OJ有一些题还是比较有养分的,如果有对算法设计感兴趣的后生,可以了解一下我校ACM集训队的相关情况。

1 A+B Problem

Language: C++
Time: 1ms

1
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdlib>
3
#include <cstdio>
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
#include <iostream>
2
#include <cstdlib>
3
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
4
#include <algorithm>
5
#include <cstring>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define x first
4
#define y second
5
#define INF 10000000
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <cmath>
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
#include <iostream>
2
using namespace std;
3
#include <algorithm>
4
#include <cmath>
5
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
4
#include <algorithm>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll unsigned long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
const double eps=1e-6;
4
#define zero(x) ((fabs(x)<eps?1:0))
5
#define sgn(x) (fabs(x)<eps?0:((x)<0?-1:1))
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define x first
4
#define y second
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <string>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
4
#include <string>
5
#include <cstring>
6
#include <algorithm>
7
#include <cmath>
8
#include <queue>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
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
#include <iostream>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <cmath>
4
#include <cstdlib>
5
#include <algorithm>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cmath>
4
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
3
#include <string>
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
#include <iostream>
2
using namespace std;
3
#include <algorithm>
4
#include <cmath>
5
#include <cstdio>
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
#include <iostream>
2
#include <cstdio>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <algorithm>
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
#include <iostream>
2
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
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
#include <iostream>
2
using namespace std;
3
#include <cstdio>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <cmath>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
typedef long long ll;
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
2
using namespace std;
3
typedef long long ll;
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
2
using namespace std;
3
typedef long long ll;
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
2
using namespace std;
3
typedef long long ll;
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
2
using namespace std;
3
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstring>
3
#include <algorithm>
4
#include <cstdlib>
5
#include <cmath>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include<cstdio>
2
#include<cstring>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include<bits/stdc++.h>
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
#define MAXIMUM 26
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
#include <iostream>
2
#include <cstring>
3
#include <algorithm>
4
#include <cstdlib>
5
#include <cmath>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll unsigned long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
4
#define lson rt<<1
5
#define rson rt<<1|1
6
#define Lson L,mid,lson
7
#define Rson mid+1,R,rson
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
#include <iostream>
2
#include <cstdio>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define pi 3.14159265358
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <cstdio>
3
#include <cstdlib>
4
#include <queue>
5
#include <cstring>
6
#include <algorithm>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define x first
4
#define y second
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
#include <iostream>
2
#include <cstdio>
3
#include <cmath>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <iostream>
2
#include <sstream>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
const double eps=1e-6;
4
#define zero(x) ((fabs(x)<eps?1:0))
5
#define sgn(x) (fabs(x)<eps?0:((x)<0?-1:1))
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
#include <bits/stdc++.h>
2
using namespace std;
3
4
const double eps = 1e-10;
5
6
#define zero(x) ((fabs(x) < eps ? 1 : 0))
7
#define sgn(x) (fabs(x) < eps ? 0 : ((x) < 0 ? -1 : 1))
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define lson rt<<1
4
#define rson rt<<1|1
5
#define Lson L,mid,lson
6
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define lson rt<<1
4
#define rson rt<<1|1
5
#define Lson L,mid,lson
6
#define Rson mid+1,R,rson
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll unsigned long long
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
#include <bits/stdc++.h>
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
#include<bits/stdc++.h>
2
3
using namespace std;
4
5
#define pb push_back
6
#define x first
7
#define y second
8
#define pii pair<int ,int >
9
#define piis pair<pii,stack<int> >
10
#define piii pair<pii,int >
11
#define ll long long
12
#define ld long double
13
#define tos to_string
14
#define mp make_pair
15
#define clr(a,b) memset(a,b,sizeof(a))
16
#define INF 0x3f3f3f3f
17
#define VI vector<int >
18
#define VII vector <vector <int > >
19
#define QIN ios::sync_with_stdio(false); cin.tie(0) 
20
#define ps system("pause")
21
#define lson pos<<1
22
#define rson pos<<1|1
23
#define Lson l,mid,lson
24
#define Rson mid+1,r,rson
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll unsigned long long
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include<bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
2
using namespace std;
3
#define ll long long
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
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
#include <bits/stdc++.h>
2
using namespace std;
3
4
typedef int Lemon;
5
typedef string In_Year_Of_2019;
6
#define is main()
7
#define I_can cout<<"     How many wishes do you want this year: ";
8
#define make_your_wish cin>>T_T;
9
#define come_true cout<<endl;
10
#define __ =0;
11
#define ___ ;++
12
#define HAPPY return
13
#define NEW T_T
14
#define YEAR __
15
#define On cout<<endl<<endl<<"\tThe year 2018 has became history, T_T"<<endl;
16
#define New_Years cout<<"    But we can still wish for the next year! QAQ"<<endl;
17
#define Eve
18
#define AND cout<<
19
#define ____ [orz]<<endl;
20
#define responded_undoubtedly for
21
#define The orz
22
#define ONLY_WISH __
23
#define I_Have orz < T_T
24
#define is_For_Everyone ___ orz
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
}