Codeforces Round #560 div3 (C,D)
阿新 • • 發佈:2019-05-15
clu 全部 排序 -- mes 成對 long long lse iostream
C
- 題目大意: 給出一個字符串,可以刪除任意位置上的字符,得到一個好字符串. 長度為偶數,且奇數位置i上的字符與\(i+1\)上的字符不相等. 求最小的操作次數
- 思路: 暴力,遇到奇數位置與後面位置相同直接刪除,註意是答案字符串上的奇數位置
#include<cstdio> #include<cstring> #include<queue> #include<vector> #include<iostream> #include<algorithm> #include<map> #define ll long long #define FOR(i,n) for(int i =1; i <= n;++i ) #define FOR0(i,n) for(int i =0; i < n;++i ) #define inf 0x3f3f3f3f using namespace std; const int maxn = 2e5+10; char buf[maxn]; char ans[maxn]; int n; int main(){ cin >> n; if(n==0){ cout << 0 << endl << endl; exit(0); //長度為0 } cin >>buf; int cur = 0; for(int i=0;i<n;++i){ if(cur%2==0){ while(buf[i+1]==buf[i]) i++; } ans[cur++] = buf[i]; } ans[cur] = 0; int ccur =cur;// 保證長度為偶數 ccur= ccur/2*2; ans[ccur] = 0; cout << n-ccur<<endl<<ans <<endl; return 0; }
D
- 題目大意: 給出一個序列,判斷是否為一個數的幾乎全部因數(除去1和該數本身).
要判斷是否滿足所有因子,且所有因子都來自於一個數 - 思路: 暴力,一個數的因子肯定成對出現. 給因子排序 判斷是否所有\(a[i]*a[n-i+1]\) 都相等,如果相等在計算因子數量是否滿足序列長度,當答案是平方數是要特殊判斷一下.
#include<cstdio> #include<cstring> #include<queue> #include<vector> #include<iostream> #include<algorithm> #include<cmath> #include<map> #define ll long long #define FOR(i,n) for(int i =1; i <= n;++i ) #define FOR0(i,n) for(int i =0; i < n;++i ) #define inf 0x3f3f3f3f using namespace std; const int maxn = 310; ll a[maxn]; int n; ll cans; int judge(){ if(n==1){ cans = a[1]*(ll)a[1]; return 1; } cans = a[1]*1LL*a[n]; for(int i=2;i<=n/2;++i){ if(a[i]*a[n-i+1]!=cans) return 0; } if(n%2==1 && a[n/2+1]*a[n/2+1]!=cans) return 0; //當n為奇數 特判中間數的平方 return 1; } int main(){ int orz; cin >> orz; while(orz--){ cin >> n; FOR(i,n){ cin >> a[i]; } sort(a+1,a+1+n); if(judge()!=0){ int cnt = 0; for(ll i=2;i*i<cans;++i){ if(cans%i==0){ cnt++; // cout << i << endl; } } cnt*=2; if((ll)sqrt(cans)*(ll)sqrt(cans)==cans) cnt++; if(cnt==n) cout << cans << endl; else cout << -1 << endl; }else{ cout << -1 <<endl; } } return 0; }
Codeforces Round #560 div3 (C,D)