void solve() {
int n;cin>>n;
int k=n/4;
n-=k*4;
cout<<k+n/2<<endl;
}
B - Scale
void solve() {
int n,k;cin>>n>>k;
vector<vector for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>s[i][j]; } } for(int i=1;i<=n;i+=k){ for(int j=1;j<=n;j+=k){ cout<<s[i][j]; } cout<<endl; } } C - Sort 思路转化一下,求区间[l,r]内的不同字母个数其实就是分别求从a到z字母在区间[l,r]内的不同出现次数 dp,dp1[i][j]表示在区间1-i内,第一个字符串中,字母j的出现次数,两个dp分别对所有字符求差就可得出有多少个不同位置的二倍,因为每个不同位置都会被算两次 void solve() { int n,q;cin>>n>>q; string a,b;cin>>a>>b; a=" "+a;b=" "+b; vector dp1(n+1,vector<int>(27)); vector dp2(n+1,vector<int>(27)); for(int i=1;i<=n;i++){ dp1[i]=dp1[i-1];dp2[i]=dp2[i-1]; dp1[i][a[i]-'a']++;dp2[i][b[i]-'a']++; } while(q--){ int l,r;cin>>l>>r; int ans1=0,ans2=0,ans=0; for(int i=0;i<26;i++){ ans+=abs((dp1[r][i]-dp1[l-1][i])-(dp2[r][i]-dp2[l-1][i])); } cout<<ans/2<<endl; } } D - Fun 枚举a。由于ab+ac+bc≤n,所以至少ab≤n。两边同时除以a得到b≤n/a。当a=1时,b有n种选择;当a=2时,b有n²种选择。因此,总共b有n+n²+n³+...+n^n种选择。这是调和级数,所以在所有可能的a中,b大约有nlogn种选择。所以可以枚举a与b 计算c的合法最大数,从1到c的所有数字都是合法的方案 数学联邦政治世界观提示您:看后求收藏(同人小说网http://tongren.me),接着再看更方便。