#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std;
typedef long long ll; const int maxn = 1020000; const ll INF = 0x3f3f3f3f3f3f3f3f; int n,k; int mat[120][120]; int dp[120][120];
struct Node{ int v,r,c; bool operator < (const Node a) { return v>a.v; } }arr[12000];
bool check(int i ,int j) { if (i<1||i>n||j<1||j>n) return false; else return true; }
int main() { int t = 1 ; while (~scanf("%d%d",&n,&k)) { if (n==-1&&k==-1) break; for (int i = 1; i <= n ; i ++) { for (int j = 1 ; j <= n ; j ++) { scanf("%d",&mat[i][j]); dp[i][j] = mat[i][j]; arr[(i-1)*n+j].r = i; arr[(i-1)*n+j].c = j; arr[(i-1)*n+j].v = mat[i][j];
} } sort(arr+1,arr+n*n+1); int x,y; for (int i = 1 ; i <= n*n ; i ++) { x = arr[i].r , y = arr[i].c; for (int p = -k ; p <= k ; p ++) { if (check(x+p,y)&&mat[x+p][y]>mat[x][y]) dp[x][y] = max(dp[x][y],dp[x+p][y]+mat[x][y]); if (check(x,y+p)&&mat[x][y+p]>mat[x][y]) dp[x][y] = max(dp[x][y],dp[x][y+p]+mat[x][y]); } } printf("%d\n",dp[1][1]);
struct str { char val[1005]; str() { memset(val, 0, sizeof(val)); } friend int operator<(str a, str b) { return strcmp(a.val, b.val) < 0; } };
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; } long long lcm(long long x, long long y) { return x * (y / gcd(x, y)); }
int bits[50]; void getbits() { for (int i = 0; i < 30; i++) { bits[i] = 1 << i; } }
long long Q_pow(long long x, long long y) { long long res = 1; while (y) { if (y % 2 == 1) { res *= x; res %= MODA; } x = x * x; x %= MODA; // if(x<=1e-5){ // return 0; // } y /= 2; } return res; }
//返回d=gcd(a,b);和对应于等式ax+by=d中的x,y long long extend_gcd(long long a, long long b, long long &x, long long &y) { if (a == 0 && b == 0) return -1; //无最大公约数 if (b == 0) { x = 1; y = 0; return a; } long long d = extend_gcd(b, a % b, y, x); y -= a / b * x; return d; } //*********求逆元素******************* //ax = 1(mod n) long long mod_reverse(long long a, long long MOD) { long long x, y; long long d = extend_gcd(a, MOD, x, y); if (d == 1) return (x % MOD + MOD) % MOD; else return -1; }
struct point { long long x, y; friend int operator<(const point &a, const point &b) { if (a.x != b.x) return a.x < b.x; return a.y < b.y; }
friend int operator==(const point &a, const point &b) { return (a.x == b.x) && (a.y == b.y); } };
struct fenshu { long long fenzi, fenmu; void zhengqi() { if (fenzi == 0 && fenmu == 0) {
} else if (fenzi == 0) { fenmu = 1; } else if (fenmu == 0) { fenzi = 1; } else { if (fenmu < 0) { fenzi = -fenzi; fenmu = -fenmu; } int flag0 = (fenzi < 0); if (flag0) { fenzi = -fenzi; } int nowgcd = gcd(fenzi, fenmu); fenzi /= nowgcd; fenmu /= nowgcd; if (flag0) { fenzi = -fenzi; } } } friend int operator<(const fenshu &a, const fenshu &b) { if (a.fenzi != b.fenzi) return a.fenzi < b.fenzi; return a.fenmu < b.fenmu; }
};
int h, n, m, w; point a[100050]; int endof[100050]; long long pow2[1050];
map<fenshu, int> mapfenshu; int main() { long long ti = 1; for (int i = 0; i < 1050; i++) { pow2[i] = ti; ti *= 2; ti %= MODA; }
int T; scan(T); while (T--) { scan(n); for (int i = 0; i < n; i++) { scan(a[i].x); scan(a[i].y); } sort(a, a + n); endof[n - 1] = n - 1; for (int i = n - 2; i >= 0; i--) { if (a[i + 1] == a[i]) { endof[i] = endof[i + 1]; } else { endof[i] = i; } }
long long ansa = 0; for (int i = 0; i < n; i++) { int chongdian = endof[i] - i; mapfenshu.clear(); for (int j = endof[i] + 1; j < n; j++) {
#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<cmath> using namespace std;
typedef long long ll;
struct Trie{ Trie *next[10]; int val; Trie(){ val = 0; for (int i = 0 ; i < 10 ; i ++) next[i] = NULL; } };
bool addword(char *str,Trie* node) {
if (node->val!=0) return false; if (node->next[str[0]-'0']==NULL) node->next[str[0]-'0'] = new Trie; node = node->next[str[0]-'0']; str++; //printf("%d\t",*str); if (*str) return addword(str,node); else { node->val++; return true; } }
int query(char *str ,Trie *node) { // printf("%d\t",*str); if (node->next[*str-'0']==NULL) return 0; else node= node->next[*str-'0']; ++str; if (*str) return query(str,node); else return node->val; }
void del(Trie *node) { for (int i = 0 ; i < 10 ; i ++) { if (node->next[i]!=NULL) del(node->next[i]); } delete node; node = NULL; return; } struct String{ char str[20]; int len; void read() { scanf("%s",str); len = strlen(str); } bool operator <(const String& a) { return len<a.len; } }s[12000];
int main() { int T,n; //printf("hello\n"); Trie *head; //printf("world\n"); scanf("%d",&T);
while (T--) {
scanf("%d",&n); head = new Trie; for (int i = 1; i <= n ; i ++) { s[i].read(); } sort(s+1,s+n+1); int f = 1; //printf("ok\n"); for (int i = 1 ; i <= n ; i ++) { if (!addword(s[i].str,head)) { f = 0; break; } } //printf("fuck\n"); if (!f) printf("NO\n"); else printf("YES\n"); del(head);
if (!limit&&dp[pos][sta]!=-1) { //printf("dp[%d][%d] = %lld\n",pos,sta,dp[pos][sta]); return dp[pos][sta]; } int up = limit?a[pos]:9; ll ans = 0; for (int i = 0 ; i <= up ; i ++) { int temp = sta; if (pre==4&&i==9) temp = max(temp,2); else if (i==4) temp = max(temp,1); else { if (temp!=2) temp = 0; } ans += dfs(pos-1,i,temp,limit&&i==pos[a]); } if (!limit) dp[pos][sta] = ans; return ans; }
ll solve(ll n) { pos = 0; while (n) { a[pos++] = n%10; n /= 10; } return dfs(pos-1,0,0,true); }
int main() { ll n; int T; scanf("%d",&T); memset(dp,-1,sizeof(dp)); while (T--) { scanf("%lld",&n); printf("%lld\n",solve(n)); } }
#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std;
const int maxn = 520000; const int INF = 0x3f3f3f3f; int n,p,r; int arr[maxn],g[maxn],dp[maxn];
int main() { int t = 1 ; while (~scanf("%d",&n)) { // if (t!=1) // putchar('\n'); for (int i = 1 ; i <= n ; i ++) { scanf("%d%d",&p,&r); arr[p] = r; } memset(g,0x3f,sizeof(g)); memset(dp,0,sizeof(dp));
for (int i = 1 ; i <= n ; i ++) { int pos = lower_bound(g+1,g+n+1,arr[i])-g; dp[i] = pos; g[pos] = arr[i]; }
int maxx =0 ; for (int i = 1 ; i <= n ; i ++) maxx = max(maxx,dp[i]); printf("Case %d:\n",t++); if (maxx==1) printf("My king, at most %d road can be built.\n\n",maxx); else printf("My king, at most %d roads can be built.\n\n",maxx); }
const ll mod = 998244353; const int maxn = 1e6+100;
ll l,r,k; int len; bool isprime[maxn+200]; int prime[maxn];
ll divi[maxn]; ll cnt[maxn];
void init() { for (int i =2 ; i <= maxn; i ++) { if (!isprime[i]) { prime[++prime[0]] = i; for (int j = i +i ; j <= maxn ; j+= i) isprime[j] = true; } } }
void solve() { int st; for (int i = 1 ; prime[i]<= r/prime[i] && i<= prime[0] ; i ++) { //printf("i = %d\n",prime[i]); if (l%prime[i]==0) st = 1; else st = 1 + (prime[i]-l%prime[i]); for (int j = st ; j <= len ; j +=prime[i]) { int ct = 0; while (divi[j]%prime[i]==0) { divi[j]/=prime[i]; ct++; } cnt[j]*=(ct*k+1); if (cnt[j]>=mod) cnt[j] %= mod; } } ll ans = 0; for (int i =1 ; i <= len ; i ++) { if (divi[i]!=1) cnt[i] = cnt[i] * (k+1)%mod; //printf("divi[%d] = %lld\n",i,divi[i]); ans += cnt[i]; if (ans>=mod) ans %= mod; } printf("%lld\n",ans); }
int main() { init(); //printf("prime[0] = %d\n",prime[0]); int T; scanf("%d",&T); while (T--) { scanf("%lld%lld%lld",&l,&r,&k); len = (int)(r- l +1); for (int i = 1 ; i <= len ; i ++) { divi[i] = l + i -1; cnt[i] = 1; }