z3475 的博客

题解 P2818 【天使的起誓】

原本一开始以为要上高精,想了一下n进制m的个位就是答案

无奈代码复杂度太高,瞟了一下标签,普及+,同余....

马上想到了读入优化的黑科技

思路楼下讲的很清楚了

1268 mod n=(((1%n*10+2)%n*10+6)%n*10+8)%n

用通俗的话说可以一边读一边模n

然后代码就是读入优化的模板加模然后判断0的特殊点了

好像代码最短?

#include <bits/stdc++.h>
typedef long long ll;

using namespace std;
int readd(ll n){
    char l=getchar();ll u=0;
    while (!(l>='0'&&l<='9')) l=getchar();
    while ((l>='0'&&l<='9')) u=(u*10+l-'0')%n,l=getchar();//膜一下
    return u?u:n;//等价u与if (u!=0) return u;else return n;
}
int main (int argc, char const* argv[])
{    
    ll n,m;//m%n 0=n //2<=n<=10^8,2<=m<=10^1000
    scanf("%lld",&n);
    cout << readd(n);
}

思路知道了就很简单了


2017-10-29 16:38:46 in 题解