2018.5.29.ACM欢乐赛总结

  很欢乐的ACM欢乐赛欢乐地开始了《------------------------------ (假的)
  一共八题:(对不起找不到链接)

 1.CodeForces 984A 
 2.CodeForces 984B 
 3.CodeForces 984C 
 4.CodeForces 984D  
 5.CodeForces 984E
 6.CodeForces 559C  
 7.CodeForces 519E  
 8.AtCoder 3621

 /*-----------------------------------------------第一题是水题掠过不讲------------------------------------------------*/
/*------------------------------------------------然后是激动人心的第二题----------------------------------------------*/
  这题明显欺负我们组不会玩扫雷,只好摸着石子过河,WA了6次之后才过
#include <bits/stdc++.h> using namespace std; #define C getchar() #define maxn 1010 #define rep(i,p) for(int i=1;i<=p;i++) inline int read() { int x=0; char ch; bool flag=true; for(;ch>'9'||ch<'0';ch=C) if(ch=='-') flag=false; for(;ch>='0'&&ch<='9';ch=C) x=(x<<3)+(x<<1)+(ch^48); return flag?x:-x; } int n,m; struct game { int biao; char d; } g[maxn][maxn]={}; void intt() { n=read(); m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j].d; } void work() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(g[i][j].d=='*') { g[i+1][j].biao++; g[i+1][j+1].biao++; g[i+1][j-1].biao++; g[i][j+1].biao++; g[i][j-1].biao++; g[i-1][j].biao++; g[i-1][j+1].biao++; g[i-1][j-1].biao++; } else continue; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(g[i][j].d!='*') { if(g[i][j].d=='.') { if(g[i][j].biao!=0) { cout<<"NO"; exit(0); } continue; } else if(g[i][j].biao!=g[i][j].d-48) { cout<<"NO"<<endl; exit(0); } } } cout<<"YES"<<endl; } int main() { intt(); work(); return 0; }

这个题目我们一开始是顺着做的,然后蒙题蒙了6次之后改变思路,写出正解。
要说有什么好总结的就是:要好好读题!要好好读题!!要好好读题!!!要好好读题!!!
当都不懂题目的时候最好多读几次,慢慢揣摩题目的意思,不到万不得已,千万不要蒙题(要知道ACM不AC不但不给分,还罚时)。

/*--------------------------------------------------------第三题----------------------------------------------------------*/
数论没学好系列

明明是很简单的一道题目,却应为数论没学好白白扔掉了一个气球。
这个故事告诉我们:一道噱头噱脑的题目其实并不是看上去那么难,要静下心来思考,方可破敌。

/*-------------------------------------------------------第四题------------------------------------------------------------------*/
很明显的dp题,据说有人使用那个区间dp写的,但好像我们组不是这样的

#include <bits/stdc++.h>
using namespace std;

#define C getchar()
#define maxn 5010
#define rep(i,p)  for(int i=1;i<=p;i++)

inline long long read()
{
	long long x=0;
	char ch;
	bool flag=true;
	for(;ch>'9'||ch<'0';ch=C)
	if(ch=='-')
	flag=false;
	for(;ch>='0'&&ch<='9';ch=C)
	x=(x<<3)+(x<<1)+(ch^48);
	return flag?x:-x;
}

struct GG
{
int zhi;
int maxx;	
}solve[maxn][maxn]={};
int n,q;

void intt()
{
	n=read();
	for(int i=1;i<=n;i++)
	   solve[1][i].zhi=solve[1][i].maxx=read();
}

void build()
{
	for(int i=2;i<=n;i++)
	  for(int j=1;j<=n-i+1;j++)
	     {
	     solve[i][j].zhi=solve[i-1][j].zhi^solve[i-1][j+1].zhi;
		 solve[i][j].maxx=max(solve[i-1][j].maxx,solve[i-1][j+1].maxx);
		 solve[i][j].maxx=max(solve[i][j].maxx,solve[i][j].zhi);
		 }
//	for(int i=1;i<=n;i++)
//	  {
//	  	for(int j=1;j<=n-i+1;j++)
//	  	   cout<<solve[i][j].maxx<<' ';
//	  	cout<<endl;
//	  }
}

void work()
{
	q=read();
	for(int i=1;i<=q;i++)
	  {
	  	int s1,s2;
	  	s1=read();
	  	s2=read();
	  	printf("%d\n",solve[s2-s1+1][s1].maxx);
	  }
}

int main()
{
	intt();
	build();
	work();
	return 0;
}

   这题还是告诉了我们组审题要仔细,一开始题目没看懂,直接略过。差点放过一个气球,在解决了题意之后,就第一时间想到了思路,但细节处理不力,白白罚时两次…………
/*----------------------------------------------4~8题------------------------------------------------------*/

请各位大佬baidu一下,因为我不会iu

猜你喜欢

转载自blog.csdn.net/airno2/article/details/80514356