水题直接贴代码
#includeusing namespace std; int main() { int n; cin>>n; printf("%d! 520!",n); return 0; }
简单if分支语句
#includeusing namespace std; int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); if(n*k==m) printf("zheng hao mei ren %d!",k); else if(n*k
直接贴代码#includeusing namespace std; int main() { int a,b,c,d,e; scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); int n; cin>>n; while(n--){ int x,y,z; scanf("%d%d%d",&x,&y,&z); if(a!=x) if(y>=b&&y<=c) if(z>=d&&z<=e) printf("%d %d %dn",x,y,z); } return 0; }
这里需要注意的是一个精度问题避免除法产生误差
原式子通分得 3xyz=n(xy+zx+y*z) 即可后暴力三层循环#includeusing namespace std; int flag=0; int main() { int a, b, c, d, e; scanf("%d%d", &a, &b); for (int i = 1; i <= b - 2; i += 2) { for (int j = i + 2; j <= b - 1; j += 2) { for (int k = j + 2; k <= b; k += 2) { if (3 * (i * j * k) == a * (i * j + i * k + k * j)) { printf("%d %d %dn", i, j, k); return 0; } } } } printf("No solution in (3, %d].n",b); return 0; }
用俩个数组分别统计给出字符串中0~9数字的个数
注意考虑去除前导0#includeusing namespace std; typedef long long ll; int n[15],m[15]; void check(string h) { int f=0; for(int i=0;i int a=h[i]-'0'; if(a>0)f=1; if(f>0)n[a]++; } } void slove(string h) { int f=0; for(int i=0;i int a=h[i]-'0'; if(a>0)f=1; if(f>0)m[a]++; } } int main() { string a,b; cin>>a>>b; check(a); check(b); string x,y; while(cin>>x>>y){ if(x[0]=='0'&&y[0]=='0'&&x.size()+y.size()==2) break; slove(x); slove(y); int f=0; for(int i=0;i<10;i++){ if(n[i]!=m[i]) f=1; m[i]=0; } if(f) cout<<"No"<
这题其实没什么好讲的,跟随题意模拟就好#includeusing namespace std; typedef long long ll; int main() { int n; cin>>n; int c=n*1.0/2.718; int f=0; int maxn=0,manx=0,x=0,y=0; for(int i=1;i<=n;i++){ int a; cin>>a; if(a>maxn){ maxn=a; x=i; } if(i<=c) manx=max(manx,a); else if(f==0&&manx<=a){ y=i; manx=a; f=1; } } cout<
题意明朗,注意输出不能重复即可也是一个模拟题思路较为直接#includeusing namespace std; typedef long long ll; ll a[1005][1005]; int vis[1005][1005]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; int x,y,t; cin>>x>>y>>t; vector vec; int maxn=abs(a[x][1]-t); vec.push_back(1); for(int i=2;i<=m;i++){ if(abs(a[x][i]-t) vec.clear(); vec.push_back(i); maxn=abs(a[x][i]-t); }else if(abs(a[x][i]-t)==maxn){ vec.push_back(i); } } for(int i=0;i printf("(%d,%d)n",x,vec[i]); } vec.clear(); maxn=abs(a[1][y]-t); vec.push_back(1); for(int i=2;i<=n&&i!=x;i++){ if(abs(a[i][y]-t) vec.clear(); vec.push_back(i); maxn=abs(a[i][y]-t); }else if(abs(a[i][y]-t)==maxn){ vec.push_back(i); } } for(int i=0;i printf("(%d,%d)n",vec[i],y); } return 0; }
压轴题有点考思维但是我们可以从正负分开处理
排序后处理
(1)正的最大值一定是原始序列其中一个的5倍,之后将其2倍数和自身标记起来避免重复,从大到小遍历。
(2)负数的最小值一定是原始序列其中一个的5倍,之后将其2倍数和自身标记起来避免重复,从小到大遍历。
我采用的是双端队列时间复杂度o(N)#includeusing namespace std; typedef long long ll; int h[100005]; int vis[1000005]; deque qu; vector vec; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>h[i]; } sort(h+1,h+n+1); for(int i=1;i<=n;i++){ qu.push_back(h[i]); //cout< int f=qu.front(); if(f<0) { qu.pop_front(); if (vis[f + 500000] == 0) { // vis[f + 500000]++; vis[f / 5 + 500000]++; vis[f / 5 * 2 + 500000]++; vec.push_back(f / 5); sum++; //cout << f << " f" << endl; } else { vis[f + 500000]--; } } int t=qu.back(); if(t>=0){ qu.pop_back(); if(vis[t+500000]==0){ //vis[t+500000]++; vis[t/5+500000]++; vis[t/5*2+500000]++; //cout< vis[t+500000]--; } } } sort(vec.begin(),vec.end()); for(int i=vec.size()-1;i>=0;i--){ if(i!=vec.size()-1) cout<<" "; cout< 达成120分



