3.22第二次周赛总结

来源:互联网 发布:2016广联达软件购买 编辑:程序博客网 时间:2024/05/16 12:37

20/32····这次周赛还是大部分没有算法。。也让我发现了自己思维的不足。。估计是刷题刷的太少了吧。

A题很快就出了,去做B题,觉得是贪心,,但是感觉还是想法出了点问题,应该要从大的开始取。。我变成从小的开始取,,搞了半天一直错,快崩溃了。

这时候发现好多人出了D,我就跑去看D,感觉就是难度不算大,但是要避免超时,我一开始直接遍历就妥妥的超时了,本来想写二分,奈何二分写的少,不是太会写,后来改成从中间向两边进行查询,就没事了。。后来听大一学长讲解之后,STL里面有自带的二分查找。。回去学习了一下。。确实比较好用。。

A了D之后,赶快回去写B,测了几组数据发现之前的从小开始取好像有点问题,然后从大开始取。。。赶快改啊啊啊啊啊啊。。。改完交了还是WA,觉得不科学。。仔细看了下代码,发现有一处地方。。s[0]写成s[n-1]没有改回来。。这时候还剩十分钟,怀着激动的心情交了终于过了orzzzzzzzzz 然后就等于结束了吧 10分钟开不了一题了。。。

A代码:

#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define M 1009#define INF 0x3fffffffusing namespace std;int isnot_prime(int a){for(int i = 2;i*i <= a;i++){if(a%i==0) return 1;}return 0;}int main (){int n;scanf("%d",&n);for(int i = 2;i < n;i++){if(isnot_prime(i)&&isnot_prime(n-i)){printf("%d %d\n",i,n-i);break;}}return 0;}

B题代码:

#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define M 2009#define INF 0x3fffffffusing namespace std;int s[M];int cmp(int a,int b){return a > b;}int main (){int n,k;int ans = 0;scanf("%d %d",&n,&k);for(int i = 0;i < n;i++)scanf("%d",&s[i]);sort(s,s+n,cmp);int m = 0;//int i = 0;int q = n-k;if(q>0){while(m<q) //第几个人 {ans += 2*(s[m]-1);m += k;}ans += 2*(s[m]-1);printf("%d\n",ans);}elseprintf("%d\n",2*(s[0]-1));return 0;}

D题一开始写的

#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define M 1000500#define INF 0x3fffffffint s[M];int mark[M];struct state{int left,right;}a[M];using namespace std;int main (){int n;scanf("%d",&n);for(int i = 1;i <= n;i++)scanf("%d",&s[i]);a[1].left = 1;mark[a[1].left] = 1;a[1].right = s[1];mark[a[1].right] = 1;for(int i = 2;i <= n;i++){a[i].left = a[i-1].right+1;mark[a[i].left] = i;a[i].right = a[i-1].right+s[i];mark[a[i].right] = i;}int m;scanf("%d",&m);for(int i = 0;i < m;i++){int temp;scanf("%d",&temp);if(mark[temp]==0){for(int j = temp;j<=1000000;j++){if(mark[j]!=0){printf("%d\n",mark[j]);goto out;}}for(int j = temp;j>=1;j--){if(mark[j]!=0){printf("%d\n",mark[j]);goto out;}}}else printf("%d\n",mark[temp]);out:;}return 0;}

D题使用STL二分查找:

#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define M 1000500#define INF 0x3fffffffint s[M];int a[M];using namespace std;int main (){int n;scanf("%d",&n);for(int i = 1;i <= n;i++)scanf("%d",&s[i]);a[1]= 1;a[2] = s[1];for(int i = 3;i <= 2*n;i++){if(i%2!=0)a[i] = a[i-1]+1;elsea[i] = a[i-2]+s[i/2];}int m;scanf("%d",&m);for(int i = 0;i < m;i++){int temp;scanf("%d",&temp);int *iter = lower_bound(a, a+2*n,temp);if((iter-a)%2==0)printf("%d\n",(iter-a)/2);elseprintf("%d\n",(iter-a)/2+1);}return 0;}


0 0
原创粉丝点击