8.12京东笔试 300%
1、先枚举移动的位数,再数修改的位数
int main() { int n; string s; cin>>n>>s; int ans=1e9; for(int i=0;i<=n;i++) { int l=0,r=n-1,cnt=0; while(l<r) { if(s[l]!=s[r]) cnt++; l++; r--; } cnt+=i; ans=min(ans,cnt); char ch=s[0]; s.erase(0,1); s.push_back(ch); } cout<<ans<<endl; return 0; }
2、递推计一下数,n=1的情况要特殊处理
const int N=2e5+1000,mod=1e9+7; ll cnt[N][10]; int main() { int n; ll a[N]; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; if(n==1) { for(int i=0;i<=9;i++) { if(i==a[1]) cout<<1<<" "; else cout<<0<<" "; } return 0; } cnt[1][(a[n-1]+a[n])%10]++; cnt[1][(a[n-1]*a[n])%10]++; for(int i=2;i<=n-1;i++) { for(int j=0;j<=9;j++) { cnt[i][(j*a[n-i])%10]=(cnt[i][(j*a[n-i])%10]+cnt[i-1][j])%mod; cnt[i][(j+a[n-i])%10]=(cnt[i][(j+a[n-i])%10]+cnt[i-1][j])%mod; } } for(int i=0;i<=9;i++) cout<<cnt[n-1][i]<<" "; return 0; }
3、暴力枚举点的坐标就行
#include<bits/stdc++.h> #define x first #define y second #define mem(a,b) memset(a,b,sizeof(a)) #define F(i,l,r) for(int i=l;i<=r;i++) using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef unsigned long long ull; const int N=52; int n,m,a[N][N]; vector<pii> v; bool check(pii x) { for(auto p:v) if(p==x) return true; return false; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char ch; cin>>ch; if(ch=='X') v.push_back({i,j}); } int ans=0; for(int i=0;i<v.size();i++) for(int j=i+1;j<v.size();j++) { pii a=v[i],b=v[j]; pii c={b.x+b.y-a.y,b.y-(b.x-a.x)},d={a.x+b.y-a.y,a.y-(b.x-a.x)}; if(check(c)&&check(d)) ans++; c={b.x-(b.y-a.y),b.y+b.x-a.x},d={a.x-(b.y-a.y),a.y+b.x-a.x}; if(check(c)&&check(d)) ans++; } cout<<ans/4<<endl; return 0; }