十月天梯賽訓練補題 10.28
阿新 • • 發佈:2020-10-29
A - Dubious CyrptoCodeForces - 1379B
題意:在區間[l,r]中取a、b、c要求滿足a*n+(b-c)=m. m已知,n為正整數。
思路:模運算
1 #include <set> 2 #include <map> 3 #include <list> 4 #include <stack> 5 #include <queue> 6 #include <deque> 7 #include <cmath> 8 #include <string> 9 #include <vector> 10#include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <sstream> 14 #include <iostream> 15 #include <algorithm> 16 //#include <unordered_map> 17 #define INF 0x3f3f3f3f 18 #define ll long long 19 #define ull unsigned long long 20 #define FILL(a,n,v) fill(a,a+n,v) 21#define Mset(a,v) memset(a,v,sizeof a) 22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b 23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) 24 using namespace std; 25 26 ll t; 27 ll l,r,m; 28 29 int main() 30 { 31 cin>>t; 32 while(t--) 33 { 34 cin>>l>>r>>m;35 36 ll mx=r-l; 37 ll mi=l-r; 38 for(int i=l;i<=r;i++) 39 { 40 if(m%i<=mx&&m>=i) 41 { 42 cout<<i<<' '<<m%i+l<<' '<<l<<endl; 43 break; 44 } 45 if(m%i-i>=mi) 46 { 47 cout<<i<<' '<<r+m%i-i<<' '<<r<<endl; 48 break; 49 } 50 } 51 52 } 53 }
B
C - Big VovaCodeForces - 1407B
題意:給出序列a 將a重新排序成序列b 需滿足條件:
1.序列c: ci是
1 #include <set> 2 #include <map> 3 #include <list> 4 #include <stack> 5 #include <queue> 6 #include <deque> 7 #include <cmath> 8 #include <string> 9 #include <vector> 10 #include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <sstream> 14 #include <iostream> 15 #include <algorithm> 16 //#include <unordered_map> 17 #define INF 0x3f3f3f3f 18 #define ll long long 19 #define ull unsigned long long 20 #define FILL(a,n,v) fill(a,a+n,v) 21 #define Mset(a,v) memset(a,v,sizeof a) 22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b 23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) 24 using namespace std; 25 26 const int maxn=1e4; 27 int t; 28 int n; 29 int a[maxn]; 30 int b[maxn]; 31 int gcd(int a,int b) 32 { 33 return b==0?a:gcd(b,a%b); 34 } 35 36 bool cmp(int a,int b) 37 { 38 return a>b; 39 } 40 41 int main() 42 { 43 cin>>t; 44 while(t--) 45 { 46 cin>>n; 47 for(int i=0;i<n;i++) cin>>a[i]; 48 sort(a,a+n,cmp); 49 50 // for(int i=0;i<n;i++) cout<<a[i]<<' '; 51 52 bool vis[maxn]; 53 memset(vis,false,sizeof vis); 54 55 int max=a[0]; 56 b[0]=a[0]; 57 vis[0]=true; 58 for(int i=1;i<n;i++) 59 { 60 int tmp=0; 61 int tmpj=0; 62 for(int j=1;j<n;j++) 63 { 64 if(!vis[j]) 65 { 66 int t=gcd(max,a[j]); 67 if(t>tmp) 68 { 69 70 tmp=t; 71 tmpj=j; 72 } 73 } 74 } 75 vis[tmpj]=true; 76 b[i]=a[tmpj]; 77 max=tmp; 78 } 79 80 for(int i=0;i<n;i++) cout<<b[i]<<(i==n-1?'\n':' '); 81 } 82 }
D
E
F - Preparing OlympiadCodeForces - 550B
題意:在n個題目中選擇若干個,要求滿足:
1.題目的總難度在[l,r]之間。
2.最難題與最易題的難度差值>=x。
求滿足條件的方法數量。
思路:
暴力dfs。
1 #include <set> 2 #include <map> 3 #include <list> 4 #include <stack> 5 #include <queue> 6 #include <deque> 7 #include <cmath> 8 #include <string> 9 #include <vector> 10 #include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <sstream> 14 #include <iostream> 15 #include <algorithm> 16 //#include <unordered_map> 17 #define INF 0x3f3f3f3f 18 #define ll long long 19 #define ull unsigned long long 20 #define FILL(a,n,v) fill(a,a+n,v) 21 #define Mset(a,v) memset(a,v,sizeof a) 22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b 23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) 24 using namespace std; 25 26 int a[50]; 27 int n,l,r,x; 28 29 int cnt=0; 30 void dfs(int res,int first,int sub,int i) 31 { 32 if(i==n) 33 { 34 if(res>=l&&res<=r&&(sub>=x)) cnt++; 35 return; 36 } 37 38 dfs(res,first,sub,i+1); 39 if(first==-1) 40 { 41 first=a[i]; 42 } 43 dfs(res+a[i],first,a[i]-first,i+1); 44 45 } 46 47 int main() 48 { 49 cin>>n>>l>>r>>x; 50 for(int i=0;i<n;i++) cin>>a[i]; 51 sort(a,a+n); 52 53 dfs(0,-1,0,0); 54 cout<<cnt<<endl; 55 56 }
G - Train Problem IHDU - 1022
題意:堆疊模擬
1 #include <set> 2 #include <map> 3 #include <list> 4 #include <stack> 5 #include <queue> 6 #include <deque> 7 #include <cmath> 8 #include <string> 9 #include <vector> 10 #include <cstdio> 11 #include <cstring> 12 #include <cstdlib> 13 #include <sstream> 14 #include <iostream> 15 #include <algorithm> 16 //#include <unordered_map> 17 #define INF 0x3f3f3f3f 18 #define ll long long 19 #define ull unsigned long long 20 #define FILL(a,n,v) fill(a,a+n,v) 21 #define Mset(a,v) memset(a,v,sizeof a) 22 #define Mcpy(a,b) memcpy(a,b,sizeof b) //a=b 23 #define fcio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) 24 using namespace std; 25 int n; 26 27 28 int main() 29 { 30 while(cin>>n) 31 { 32 vector<string>v; 33 string s1; 34 string s2; 35 cin>>s1>>s2; 36 map<char,bool>vis; 37 stack<char>st; 38 int j=0; 39 bool flag=true; 40 for(int i=0;i<s2.size();i++) 41 { 42 43 if(!vis[s2[i]]) 44 { 45 vis[s2[i]]=true; 46 while(s1[j]!=s2[i]&&j<=s1.size()) 47 { 48 vis[s1[j]]=true; 49 st.push(s1[j++]); 50 v.push_back("in"); 51 } 52 v.push_back("in"); 53 j++; 54 v.push_back("out"); 55 } 56 else 57 { 58 if(st.top()!=s2[i]) 59 { 60 flag=false; 61 cout<<"No."<<endl<<"FINISH"<<endl; 62 break; 63 } 64 else 65 { 66 st.pop(); 67 v.push_back("out"); 68 } 69 } 70 } 71 72 if(flag) 73 { 74 cout<<"Yes."<<endl; 75 for(int i=0;i<v.size();i++) cout<<v[i]<<endl; 76 cout<<"FINISH"<<endl; 77 } 78 } 79 80 }
H
I