以下是acwing第121场比赛的abc三题
直接模拟,用floor()函数来实现下取整
- #include
- #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- #define endl '\n'
-
- using namespace std;
- typedef long long LL;
- int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
- int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
- bool is_prime(int x){if(x<2) return false;
- for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
- //numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end()); // 去重操作
- const int N = 2e5+10;
-
- inline void solve(){
- int x,y,z; cin>>x>>y>>z;
- int ans = floor(1.0 * (z-y) / x) *x + y;
- cout << ans << endl;
- }
-
- int main()
- {
- IOS
- int _;
- cin >> _;
- // _ = 1;
- while(_ --) solve();
- return 0;
- }
如果没出现a[i][j] = 1 || a[i][j] = 3,那么代表i牛是满足题目条件的;
这样模拟即可!
- #include
- #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- #define endl '\n'
-
- using namespace std;
- typedef long long LL;
- int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
- int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
- bool is_prime(int x){if(x<2) return false;
- for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
- //numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end()); // 去重操作
- const int N = 105;
- int n,a[N][N];
-
- inline void solve(){
- int ans = 0;
- vector<int> res;
- cin >> n;
- for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
- for(int i=1;i<=n;i++){
- bool tag = true;
- for(int j=1;j<=n;j++){
- if(a[i][j]==1 || a[i][j]==3){
- tag = false;
- break;
- }
- }
- if(tag){
- res.push_back(i);
- ans ++;
- }
- }
- cout << ans << endl;
- for(int num : res) cout << num << " ";
- return ;
- }
-
- int main()
- {
- IOS
- int _;
- // cin >> _;
- _ = 1;
- while(_ --) solve();
- return 0;
- }
-
用hsah表实现模拟,否则会超时!!!
- #include
- using namespace std;
- typedef long long LL;
- const int N = 1e5+144;
- LL n, m, k,a[N],ans;
- unordered_map
mp; - void swap(int &x,int &y){
- int tmp = x;
- x = y;
- y = tmp;
- }
- int main()
- {
- cin>>n>>m>>k;
- for(int i=1;i<=n;i++){
- cin>>a[i];
- mp[a[i]] = i;
- }
- for(int i=1;i<=m;i++){
- int b ; cin>>b;
- if(mp[b]%k==0) ans += mp[b]/k;
- else ans += mp[b]/k+1;
- int idx = mp[b];
- if(idx==1) continue;
- int beforeNum = a[idx-1];
- swap(a[idx-1],a[idx]);
- swap(mp[b],mp[beforeNum]);
- }
- cout << ans << endl;
- return 0;
- }