2 solutions

  • 3
    @ 2024-12-9 13:23:04

    long long

    #include <bits/stdc++.h>
    using namespace std;
    //令x最小 
    //贪心 
    long long q, n, ans = 0;
    int main()
    {
    	cin >> n >> q; 
    	for(int i = 1; i <= q; i++)
    	{
    	    long long k;
    	    cin >> k;
    	    //((long long) 1) << k 表示将 ((long long) 1) 的二进制表示向左移动k位所得的值 
    	    long long x = (((long long) 1) << (k-1));
    //	    cout << x << endl;
    	    if (n & x)
    		{
    			continue;//由于n的第k位(从右往左数)本身就是1,所以无需改变 
    		}
    		//否则 
    	    long long c = n % x;
    //	    cout << c << endl;
    	    ans += x - c;
    //	    cout << ans << endl;
    	    n += x - c;//每次操作都会让 n 变为 n+x,会影响后续操作 
    //	    cout << n << endl;
    	}
    	cout << ans;
    	
    	
    	
    	return 0;
    }
    

    没用long long只有70分

    • -1
      @ 2024-12-9 13:22:59
       
      
      • 1

      Information

      ID
      1146
      Time
      1000ms
      Memory
      512MiB
      Difficulty
      8
      Tags
      # Submissions
      78
      Accepted
      13
      Uploaded By