【Codeforces 1031C】Cram Time

【链接】 我是链接,点我呀:)
【题意】


题意

【题解】


如果找到最大的n使得1+2+...+n<=a+b
然后第一天输出1,2.3,4....t1
这里1+2+..+t1<=a
这还远远不够。
因为可能1+2+3...+t1 这就使得第一天还有剩余的时间没有用.
那么接下来如果继续让第二题从t1+1..n的话
可能第二题的累加和会大于b
所以我们可以这样,
让第二题再加上一天。
即输出1,2.3....t1,t1+1
然后从中删掉一个数字x=1+2+3..+t1+(t1+1)-a
显然这个数字是小于t1+1的,所以一定在第一天输出的序列中.
这样的话,第一题就能满满地用够a小时了。
然后再把x在第二题输出就好了,然后第二题从t1+2开始输出。。
注意t1=n的情况,这种情况的话,第二题就不用输出任何数字了,x也不用输出啦

【代码】

#include 
#define ll long long
using namespace std;

const int N = 1e5;

ll a,b;
ll n;
int tag[N+10];

int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    cin >> a >> b;
    //(1+n)*n/2
    for (n = 0;n*(1+n)/2<=(a+b);n++);
    n--;
    ll t1 = 0;
    for (t1 = 1;t1*(t1+1)/2<=a;t1++);
    t1--;
    if (t1*(t1+1)/2==a){
        cout<0) cout<0)cout<

转载于:https://www.cnblogs.com/AWCXV/p/10662333.html

你可能感兴趣的:(【Codeforces 1031C】Cram Time)