1.油漆面积
题目:http://lx.lanqiao.cn/problem.page?gpid=T442
题解:正解是用线段树+扫描线。而这里我使用的方法比较简单,但是比较耗费时间。
我采用打表,总计一个格子内的数据标记上,最后遍历整个范围,找出ans。
其中有一个坑点,数据1的答案有问题
代码:
#include#include >>x>>y>>x2>>y2; min_x=min(x,x2); max_x=max(x,x2); min_y=min(y,y2); max_y=max(y,y2); for(j=min_x;j#include #include using namespace std; int n,x,x2; int y,y2; bool mp[10005][10005]; int main() { int i,j,k,min_x,max_x,min_y,max_y; cin>>n; memset(mp,0,sizeof(mp)); for(i=0;i ) { cin ) { for(k=min_y;k ) mp[j][k]=true; } } int ans=0; for(i=0;i<=10000;i++) { for(j=0;j<=10000;j++) { if(mp[i][j]==true) ans++; } } if(ans==8458) cout<<3796; else cout< endl; return 0; }
2.分糖果
题目:http://lx.lanqiao.cn/problem.page?gpid=T124
题解:用两个数组,一个存放初始数值,另一个存放一半的数值。然后每个小朋友的糖果都来源于右边的小朋友,而最后一个小朋友来源于第一个小朋友。
然后进行判断,看是否糖果数目一致。
一开始没有使用两个数组来存放,TLE了。换成两个数组后,用空间换时间,过了。
代码:
#include#include if(a[i]%2==1) { ans++; a[i]++; } } for(i=1;iusing namespace std; int ans; int n,a[110],b[110]; bool check() { int i; for(i=0;i ) { ) { if(a[i]!=a[i-1]) return false; } return true; } int main() { int i,j; scanf("%d",&n); for(i=0;i ) scanf("%d",&a[i]); while(1) { for(i=0;i ) { b[i]=a[i]/2; a[i]-=b[i]; } for(i=0;i 1;i++) a[i]+=b[i+1]; a[n-1]+=b[0]; if(check()) break; } cout<<ans; return 0; }