预计分数:20+10+40
实际分数:100+10+40.
一百三十多人的比赛全场rand7还水了个鼠标+键盘
unbelievable!
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<queue>
7 #include<stack>
8 #define lli long long
9 using namespace std;
10 const int mod=998244353;
11 void read(int &n)
12 {
13 char c='+';int x=0;bool flag=0;
14 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
15 while(c>='0'&&c<='9')
16 x=(x<<1)+(x<<3)+c-48,c=getchar();
17 flag==1?n=-x:n=x;
18 }
19 lli n,m;
20 int fastmul(int x,int p)
21 {
22 int now=x;
23 int ans=0;
24 while(p)
25 {
26 if(p&1)
27 {
28 --p;
29 ans=(ans+now)%mod;
30 }
31 p>>=1;
32 now=(now+now)%mod;
33 }
34 return (ans-1)%mod;
35 }
36 int main()
37 {
38 freopen("bpmp.in","r",stdin);
39 freopen("bpmp.out","w",stdout);
40 //read(n);read(m);
41 cin>>n>>m;
42 cout<<fastmul(n,m)%mod;
43 return 0;
44 }
一开始搞了个贪心不知道对不对,所以不期望能拿多少分,但没想到居然AC了
而且我以为这个题没有那么水于是就写了个快速乘、
事实上只要输出(n*m-1)%mod 就能AC,
(表示差点被卡成rank8,没奖)
http://www.cnblogs.com/zwfymqz/p/7186080.html
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<queue>
7 #include<stack>
8 #include<cstdlib>
9 using namespace std;
10 inline void read(int &n)
11 {
12 char c='+';int x=0;bool flag=0;
13 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14 while(c>='0'&&c<='9')
15 x=(x<<1)+(x<<3)+c-48,c=getchar();
16 flag==1?n=-x:n=x;
17 }
18 int n,m;
19 struct node
20 {
21 int a[101][101];
22 int nowmaxn;
23 int bgx,bgy,edx,edy;
24 }now,nxt;
25 int ans=-0x7ffff;
26 queue<node>q;
27 int tot=0;
28 inline void calc()
29 {
30 /*memset(nxt.a,0,sizeof(nxt.a));
31 for(int i=now.bgx;i<=now.edx;i++)
32 for(int j=now.bgy;j<=now.edy;j++)
33 nxt.a[i][j]=now.a[i][j];*/
34 nxt=now;
35 }
36 inline void print()
37 {
38
39 for(int i=now.bgx;i<=now.edx;i++)
40 {
41 for(int j=now.bgy;j<=now.edy;j++)
42 printf("%d ",now.a[i][j]);
43 printf("\n");
44 }
45 printf("*********************************\n");
46 }
47 inline void getans()
48 {
49 for(int i=now.bgx;i<=now.edx;i++)
50 for(int j=now.bgy;j<=now.edy;j++)
51 ans=max(ans,now.a[i][j]);
52 }
53 void check()
54 {
55 tot++;
56 //cout<<tot<<"---"<<endl;
57 if(tot>63843800)
58 {
59 cout<<ans;
60 exit(0);
61 }
62
63 }
64 inline void bfs(int hc,int lc)
65 {
66 q.push(now);
67 while(!q.empty())
68 {
69 now=q.front();
70 q.pop();
71 int num=0;
72 for(int i=now.bgx;i<=now.edx;i++)
73 for(int j=now.bgy;j<=now.edy;j++)
74 if(now.a[i][j]>0)
75 num+=now.a[i][j],check();
76 if(ans>num)
77 continue;
78
79 getans();
80 calc();
81 // print();
82 for(int i=now.bgy;i<now.edy;i++)//横向折叠
83 {
84 for(int j=1;j<=(min((i-now.bgy),(now.edy-i))+1);j++)
85 {
86 for(int k=1;k<=now.edx;k++)
87 {
88 nxt.a[k][i+j]+=nxt.a[k][i-j+1];
89 nxt.a[k][i-j+1]=0;
90 check();
91 }
92 }
93 // cout<<now.bgy<<"&"<<i<<endl;
94 nxt.bgy=i+1;
95 // cout<<nxt.bgy<<"^"<<endl;
96 nxt.edy=max(now.edy,i+i-now.bgy+1);
97 nxt.bgx=now.bgx;
98 nxt.edx=now.edx;
99 q.push(nxt);
100 calc();
101 }
102 for(int i=now.bgx;i<now.edx;i++)
103 {
104 for(int j=1;j<=(min((i-now.bgx),(now.edx-i+1))+1);j++)
105 {
106 for(int k=1;k<=now.edy;k++)
107 {
108 nxt.a[i+j][k]+=nxt.a[i-j+1][k];
109 nxt.a[i-j+1][k]=0;
110 check();
111 }
112 }
113 nxt.edy=now.edy;
114 nxt.bgy=now.bgy;
115 nxt.bgx=i+1;
116 nxt.edx=max(now.edx,i+i-now.bgx+1);
117 q.push(nxt);
118 calc();
119 }
120 }
121
122 }
123 int main()
124 {
125 freopen("cfyw.in","r",stdin);
126 freopen("cfyw.out","w",stdout);
127 read(n);read(m);
128 for(int i=1;i<=n;i++)
129 for(int j=1;j<=m;j++)
130 read(now.a[i][j]);
131 now.bgx=now.bgy=1;
132 now.edx=n;
133 now.edy=m;
134 bfs(0,0);
135 printf("%d",ans);
136 return 0;
137 }
一开始以为是矩阵什么乱七八糟的肯定不会于是就写超级暴力广搜,
本来以为能过50%的数据结果发现连4*4的都跑不出来。
没办法加了个最优性剪枝又加了个卡时,
结果。
除了第一个点AC其他全MLE,,,,,,,,,,,,,
What' a pity!
http://www.cnblogs.com/zwfymqz/p/7185970.html
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<queue>
7 #include<stack>
8 #define lli long long int
9 using namespace std;
10 inline void read(int &n)
11 {
12 char c='+';int x=0;bool flag=0;
13 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14 while(c>='0'&&c<='9')
15 x=(x<<1)+(x<<3)+c-48,c=getchar();
16 flag==1?n=-x:n=x;
17 }
18 int mod=998244353;
19 int n,m;
20 int ans=0;
21 int gcd(int a,int b)
22 {
23 return b==0?a%mod:gcd(b,a%b)%mod;
24 }
25 int hash[40000001];
26 int main()
27 {
28 //freopen("hoip.in","r",stdin);
29 // freopen("hoip.out","w",stdout);
30 read(n);read(m);
31 if(n<4000&&m<4000)
32 {
33 for(int i=1;i<=n;i++)
34 for(int j=1;j<=m;j++)
35 ans=(ans+gcd(i,j))%mod;
36 printf("%d",ans%mod);
37 }
38 else if(n>6001&&m>6001)
39 {
40 printf("0");
41 }
42 else
43 {
44 for(int i=1;i<=n;i++)
45 for(int j=1;j<=m;j++)
46 {
47 if(hash[(i*257)%23456789+(j*359)%23456789])
48 {
49 ans+=hash[(i*257)%23456789+(j*359)%23456789];
50 continue;
51 }
52 lli p=gcd(i,j)%mod;
53 lli a=i,b=j;
54 while(a<n&&b<m)
55 {
56 p=p+p;
57 a=a+a;
58 b=b+b;
59 hash[(i*257)%23456789+(j*359)%23456789]=p;
60 }
61 }
62 printf("%d",ans);
63 }
64 return 0;
65 }
暴力暴力暴力!!!
http://www.cnblogs.com/zwfymqz/p/7189521.html
这次考试也是比较无语,
感觉自己运气成分比较大,
全场40多个140分.......
也就是说T2接近150行的暴力救了我一命=.=///
不过我们学校居然有A了T3的(但那孩子T1炸了。。。)
以后继续努力吧!