D首先看到这题通过手推会发现所有的点都能成立,因为如果XY相同等式一定成立,XY不同时X|Y==1那么|X-Y|就会少1直到xy相等;
#include <bits/stdc++.h> #define int long long #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) const int maxn=2e5+50; const int INF=0x3f3f3f3f; using namespace std; signed main(){ IOS; int t; cin>>t; while(t--){ int ans=0; int x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; for(int i=x1;i<=x2;i++){ for(int j=y1;j<=y2;j++){ ans++; } } cout<<ans<<'\n'; } return 0; }
G:比赛时一直纠结好久0^n是不是没有意义,0^0==1那么输入0 n得出的结果是0 还是-1;所以这题没写出来...
其实因该是-1...
后来补题的
while(t--){ int n,m;cin>>n>>m; if(n==0||m==0||n==1)cout<<-1<<'\n'; else { unsigned long long ans=1; int k=0; while(m>=n){ m/=n;k++; } cout<<k<<'\n'; }
H:对称之美,我纯暴力模拟写的。。无论奇数还是偶数行前n/2行和后n/2行扫一遍,然后看是不是能有n/2次找到相同的字母,需要注意的是(记得break)每两行找到一个就够了
#include <bits/stdc++.h> #define int long long #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) const int maxn=1e5+50; const int INF=0x3f3f3f3f; using namespace std; char a[105][55]; int b[505][505]; signed main(){ int t;cin>>t; while(t--){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } int ans=0; for(int i=0;i<n/2;i++){ int flag=0; for(int j=0;j<a[i][j]!='\0';j++){ for(int k=0;a[n-1-i][k]!='\0';k++){ if(a[i][j]==a[n-1-i][k]){ans++;flag=1;break; } } if(flag==1)break; } } // cout<<ans; if(ans==n/2)cout<<"Yes"<<'\n'; else cout<<"No"<<'\n'; } return 0; }
I非对称之美:这个算是思维题吧如果是回文字符串就比字符长度少1,如果不是就输出字符长度,特殊考虑一下整个字符串就一种字符的比如aaaaa
#include <bits/stdc++.h> #define int long long #define IOS ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) const int maxn=1e5+50; const int INF=0x3f3f3f3f; using namespace std; int a[26]={0}; int b[505][505]; signed main(){ string s; cin>>s; string s1=""; for(int i=0;i<s.size();i++){ a[s[i]-'a']++; } int l=0; int m=s.size(); for(int i=m-1;i>=0;i--){ s1+=s[i]; } int flag=-1; for(int i=0;i<26;i++){ if(a[i]==m)flag=1; // cout<<a[i]<<" "; } // cout<<s<<" "<<s1<<'\n'; if(flag==1)cout<<0<<'\n'; else { if(s==s1)cout<<m-1<<'\n'; else cout<<m<<'\n'; } return 0; }