战绩and总结
被兴哥拯救的D,%%兴哥,兴哥yyds,小上50分
A - Your First Judge
看图说话
#include <bits/stdc++.h> using namespace std; int main() { string s1; cin>>s1; if(s1=="Hello,World!") { cout<<"AC"<<endl; } else { cout<<"WA"<<endl; } return 0; }
B - log2(N)
看图说话第二题,注意下longlong 就好
#define int long long signed main() { int n,i,j,k; cin>>n; for(i=0;;i++) { if(quickpow(2,i)<=n&&quickpow(2,i+1)>n) { cout<<i<<endl; break; } } return 0; }
C - One More aab aba baa
题意:
给你一个字符串,和一个数n,求这个字符串全排列之后的第n大。
思路:
用全排列函数对字符串进行排列,因为长度只有8,所以不会超时
#include<bits/stdc++.h> using namespace std; char s1[10]; int main() { int n,i=0,j,k; cin>>s1>>k; j=strlen(s1); sort(s1,s1+j); int cnt=0; do{ cnt++; if(cnt==k) { i=1; cout<<s1<<endl; break; } }while(next_permutation(s1,s1+j)); if(i==0) cout<<s1<<endl; }
D - Coprime 2
题意:
给你一个长度为n 的数组和数字k,要求你从1-k里找到所有的数和数组里的每个数求完gcd都是1的数。
思路:
通过观察可以发现,最简单的方法就是通过数组里的质因数去筛选,类似于埃氏筛的方法,把质因数筛出来之后再把这些质因数用累加的方法到k,去标机被扫到的数,没有被扫到的即是答案,注意这些质因子必须要小于k,不然会有bug,555!兴哥的代码简单明了,我的又臭又长,我还是贴我的吧,警告自己2333
#include <bits/stdc++.h> #include <unordered_map> using namespace std; #define endl '\n' const long N = 1e5+2000; int a[N]; long prime[N] = { 0 }, num_prime = 0; int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int n,i,j,k; cin>>n>>k; unordered_map<int ,int >mo; int cnt=0; for(i=0;i<n;i++) { cin>>a[i]; for(j=2;j<=a[i]/j;j++) { if(a[i]%j==0) { while(a[i]%j==0) { a[i]/=j; } if(!mo[j]) prime[num_prime++]=j; mo[j]++; if(mo[j]==1&&j<=k) cnt++; } } if(a[i]>1&&mo[a[i]]==0) { if(a[i]<=k) cnt++; prime[num_prime++]=a[i]; mo[a[i]]++; } } for(i=0;i<num_prime;i++) { int d1=prime[i]; if(d1==1) continue; for(j=d1;j<=k;j+=d1) { mo[j]++; if(mo[j]==1) cnt++; } } cout<<k-cnt<<endl; for(i=1;i<=k;i++) { if(mo[i]==0) cout<<i<<endl; } return 0; }