目录
题目传送
P2669 [NOIP2015 普及组] 金币
-
简单题,可以画个图
-
需要注意是否需要开 long long
-
\({(1+n)*n}/{2}=1e4 ==> n<2e2\)
-
\(2e2*1e4 = 2e6\) 无需 long long。
-
若扩大数据范围,就需要longlong以及利用公式优化了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int k,cnt=0, ans=0; cin>>k;
for(int i=1; cnt<k; i++){
// for(int j=1; j<=i && cnt<k; j++) {
// ans+=i, cnt++;
// }
if(cnt+i<=k) ans+=i*i, cnt+=i;// 可以优化
else { ans+=i*(k-cnt); break; }
}
cout<<ans;
return 0;
}
P2670 [NOIP2015 普及组] 扫雷游戏
- 开心游戏,为了简化,可以开 dis[][2] 数组记录方向
- 枚举每个点,如果不是地雷,查询九宫格内的地雷数量。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110,INF=0x3f3f3f3f;
int n,m,dis[][2]={-1,-1, -1,0, -1,1, 0,-1, 0,1, 1,-1, 1,0, 1,1};
string s[N];
int main() {
cin>>n>>m;
for(int i=0; i<n; i++) cin>>s[i];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(s[i][j]=='?'){
int cnt=0;
for(int k=0; k<8; k++){
int tx=i+dis[k][0], ty=j+dis[k][1];
if(tx<0||tx>=n||ty<0||ty>=m) continue;
if(s[tx][ty]=='*') cnt++;
}
s[i][j]=cnt+'0';
}
}
}
for(int i=0; i<n; i++) cout<<s[i]<<endl;
return 0;
}