2021寒假训练(六)

题号 A B C D E F G H
AC √   Ο √   Ο        

 

 

 

A.Farey Sequence

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

// int phi(int n){
//     int ans = n;
//     for(int i = 2; i <= sqrt(n); i++){
//         if(n % i == 0){
//             ans = ans / i * (i - 1);
//             while(n % i == 0)n /= i; 
//         }
//     }
//     if(n > 1) ans = ans / n * (n - 1);
//     return ans;
// }

int euler[maxn];
void Euler(){
     for(int i=0;i<maxn;i++)euler[i]=i;
     for(int i=2;i<maxn;i++)  
        if(euler[i]==i)  
           for(int j=i;j<maxn;j+=i)  
              euler[j]=euler[j]/i*(i-1);
}

int sum[maxn] = {0};

void init(){
    Euler();
    for(int i = 1; i <= maxn; i++){
        sum[i] = sum[i-1] + euler[i];
    }
}

signed main(){
    init();
    int n;
    while(~scanf("%lld",&n), n){
        printf("%lld\n", sum[n] - 1);
    }
    //system("pause");
    return 0;
}
View Code

B.Halloween treats

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 2147493647;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

int a[maxn], prefix[maxn], index[maxn];

signed main(){
    int c, n;
    while(~scanf("%lld %lld", &c, &n), c || n){
        int p = 0;
        for(int i = 1; i <= n; i++){
            a[i] = rd();
            prefix[i] = (prefix[i-1] + a[i]) % c;
            if(prefix[i] == 0) p = i; 
            index[i] = -1;
        }
        if(p){
            for(int i = 1; i <= p; i++)
                printf("%lld%c", i, " \n"[i == p]);
        }else{
            for(int i = 1; i <= n; i++){
                if(index[prefix[i]] != -1){
                    for(int j = index[prefix[i]] + 1; j <= i; j++)
                        printf("%lld%c", j," \n"[j == i]);
                    break;
                }else{
                    index[prefix[i]] = i;
                }
            }
        }
    }
    //system("pause");
    return 0;
}
View Code

C.Multiplication Table

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

signed main(){
    int n, m, k;
    scanf("%lld %lld %lld",&n ,&m, &k);
    int l = 1;
    int r = n * m;
    while(r >= l){
        int mid = (l + r) >> 1;
        int cnt = 0;
        for(int i = 1; i <= m ; i++)cnt += min(n, mid / i);
        if(cnt < k)l = mid + 1;
        else r = mid - 1;
    }
    printf("%lld\n", l);
    //system("pause");
    return 0;
}
View Code

 D.Flowers

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

int n, k, dp[maxn] = {0}, pre[maxn] = {0};
void init(){
    for(int i = 1; i <= maxn; i++){
        if(i - k < 0)dp[i]++;
        else if(i - k == 0)dp[i] = 2;
        else dp[i] = (dp[i - 1] + dp[i - k]) % mod;
        pre[i] = (pre[i-1] + dp[i]) % mod;
    }
}

signed main(){
    n = rd();
    k = rd();
    init();

    while(n--){
        int a = rd();
        int b = rd();
        printf("%lld\n",(pre[b] - pre[a - 1] + mod) % mod);
    }

    //system("pause");
    return 0;
}
View Code
posted @ 2021-01-25 22:45  濡苏  阅读(41)  评论(0)    收藏  举报